根据HTTP RFC格式化的请求标头的系统示例如下所示: GET /index.html HTTP/1.1 Host: www.example.com 收到请求标头后,服务器然后格式化一个以状态行开头的响应标头...子协议请求标头示例: Sec-WebSocket-Protocol: mqtt, wamp 服务器在响应中发出的示例倒数标题: Sec-WebSocket-Protocol: wamp 请注意,服务器必须从客户端提供的列表中精确选择一种协议...当客户端和服务器都实现为从一开始就使用通用消息传递协议时,可以在初始请求中省略Sec-WebSocket-Protocol标头,在这种情况下服务器可以忽略此步骤。...请注意,如果客户端请求使用子协议但未提供服务器可以支持的任何内容,则服务器必须发送失败响应并关闭连接。...必须单独实现对不同子协议或消息传递通道等附加功能的支持。 生成和解析WebSocket消息帧 一旦将握手响应发送到客户端,客户端和服务器就可以使用他们选择的子协议(如果有的话)开始通信。
如果客户端愿意,则添加它,服务器将在响应中包含一个自己的密钥,客户端将在向你发送升级响应之前验证该密钥。 服务器响应的 Sec-WebSocket-Accept 标头将基于指定的 key 计算的值。...Sec-WebSocket-Protocol Sec-WebSocket-Protocol 标头按优先顺序指定你希望用的一个或者多个 WebSocket 协议。...将服务器支持的第一个 WebSocket 协议,由服务器在响应中包含的 Sec-WebSocket-Protocol 标头中选择并返回它。...如果服务器确实支持请求的协议版本,则响应中不包含 Sec-WebSocket-Version 标头。...仅响应标头 来自服务器的响应可能包含这些。 Sec-WebSocket-Accept 当服务器愿意发起 WebSocket 连接时,其包含在打开握手过程中来自服务器的响应消息中。
这个双向通信是通过一个TCP连接来实现的。webSocket于2011年以RFC 6455发布成为IETF的标准。 同样作为基于TCP协议的标准协议,它和HTTP有什么区别呢?...HTTP upgrade header是在HTTP1.1中引入的一个HTTP头。当客户端觉得需要升级HTTP协议的时候,会向服务器端发送一个升级请求,服务器端会做出相应的响应。...服务器端接收到客户端的请求之后,如果支持webSocket协议,那么会返回同样的Upgrade: WebSocket和Connection: Upgrade 头到客户端。...客户端接收到服务器端的响应之后,就知道服务器端支持websocket协议了,然后就可以使用WebSocket协议发送消息了。...: Qhfsfew12445m= Sec-WebSocket-Protocol: chat 在上面的例子中,除了使用Upgrade头之外,客户端还向服务器端发送了Sec-WebSocket-Key header
当客户端向服务器发送一个HTTP请求时,客户端和服务器之间打开一个TCP连接,并且在接收到响应后,这个TCP连接会被终止。...每个HTTP请求都会向服务器打开一个单独的TCP连接,如果客户端向服务器发送了10个请求,就会打开10个独立的TCP连接。...客户端发送的握手消息是一个带有Upgrade头的HTTP Request消息。具体长下面这样。...确保服务端能够正确地响应客户端的请求,从而验证服务端的身份 Sec-WebSocket-Protocol:指定使用哪个协议 Sec-WebSocket-Version:客户端可以接受哪些子协议 服务端回复给客户端的报文如下...: chat 101: 服务端响应101状态码,任何非101状态码都会导致错误,意味着WebSocket握手未完成 Sec-WebSocket-Accept:将客户端传过来的Sec-WebSocket-Key
当客户端和服务端都发送了他们的握手协议,并且当握手已经成功,那么数据传输就开始了。这是一个双方都可以独立发送任意数据的双向通信渠道。...Sec-WebSocket-Protocol: chat 服务端也可以设置cookie相关字段来设置cookie相关属性,具体文档见RFC6265。 1.4 结束握手 此节为非规范章节。...任何一端都可以发送一个包含特定关闭握手的控制帧数据(详情见5.5.1节)。收到此帧后,另一端在不发送任何数据后会发送一个结束帧作为响应。...在发送了一个表明连接需要被关闭的控制帧后,这个客户端不会再发送任何的数据;在收到一个表明连接需要被关闭的控制帧后,这个客户端会丢弃此后的所有数据。 这样比两边同时发起握手要更加安全。...例如,在某些平台中,如果一个socket在接收队列有数据时被关闭,会发送一个RST包,尽管数据还在等待被读取,这也会导致接收到RST的一方数据接收失败。 1.5 设计哲学 此节为非规范章节。
HTTP头的格式以及解析方式见 RFC2616 一旦客户端和服务端都发送了它们的握手信息,握手过程就完成了,随后就开始数据传输部分。因为这是一个双向的通信,所以客户端和服务端都可以首先发出信息。...服务端为了告知客户端它已经接收到了客户端的握手请求,服务端需要返回一个握手响应。在服务端的握手响应中,需要包含两部分的信息。...可选的头字段也可以被包含在服务端的握手响应中。在这个版本的协议中,主要的可选头字段就是 Sec-WebSocket-Protocol,它可以指出服务端选择哪一个子协议。...一端一旦接受到了来自另一端的请求关闭控制帧后,接收到关闭请求的一端如果还没有返回一个作为响应的关闭帧的话,那么它需要先发送一个关闭帧。...在发送了请求关闭控制序列之后,发送请求的一端将不可以再发送其他的数据内容;同样的,一但接收到了一端的请求关闭控制序列之后,来自那一端的其他数据内容将被忽略。
公众号中回复gohttp10获取本文源代码 WebSocket介绍 WebSocket通信协议通过单个TCP连接提供全双工通信通道。与HTTP相比,WebSocket不需要你为了获得响应而发送请求。...WebSocket中的特殊标头仅需要浏览器与服务器之间的一次握手即可建立连接,该连接将在其整个生命周期内保持活动状态。...ok { // handle error } ..... } 要完成握手,服务器必须使用适当的头进行响应。...然后使用它作为Sec-WebSocket-Accept 响应头的值。 传输数据帧 握手成功完成后,您的应用程序可以从客户端读取数据或向客户端写入数据。...关闭握手 当各方之一发送状态为关闭的关闭帧作为有效负载时,握手将关闭。可选的,发送关闭帧的一方可以在有效载荷中发送关闭原因。如果关闭是由客户端发起的,则服务器应发送相应的关闭帧作为响应。
更深层次的解释就是WebSocket 是应用层第七层上的一个应用层协议,它必须依赖 HTTP 协议进行一次握手 ,握手成功后,数据就直接从 TCP 通道传输,与 HTTP 无关了。...所以,握手阶段WebSocket 首先发起一个 HTTP 请求,在请求头加上 Upgrade 字段,该字段用于改变 HTTP 协议版本或者是换用其他协议,http://www.liuxue1.com/...: 13 Sec-WebSocket-Key 字段,它由客户端生成并发给服务端,用于证明服务端接收到的是一个可受信的连接握手,可以帮助服务端排除自身接收到的由非 WebSocket 客户端发起的连接,该值是一串随机经过...收到请求后,服务端做一次响应: 1 http://www.liuxue1.com/ 1.1 101 Switching Protocols 2 Upgrade: websocket 3 Connection...: Upgrade 4 Sec-WebSocket-Accept: HSmrc0sMlYUkAGmm5OPpG2HaGWk= 5 Sec-WebSocket-Protocol: chat 响应里面重要的是
,且非实时。...10.此Request消息可能包含Sec-WebSocket-Protocol头域,其意义如上文中所述。...如果含有Sec-WebSocket-Protocol头,要判断是否之前的Request握手带有此协议,如果没有,则连接失败。...6.Opcode == 9 Ping 类似于心跳,一方收到Ping,应当立即发送Pong作为响应。...可能会出现一方收到很多的Ping,但是只需要响应最近的那一次就可以了。 8.Opcode == 11 – 15 未来使用(控制帧) 帧的格式 具体的每一项代表什么意思在这里就不做详细的阐述了。
205 Reset Content 服务器已满足该请求,并希望用户代理将“文档视图”重置为从原始服务器接收到的原始状态,该文档视图导致发送了请求。...303 See Other 服务器正在将用户代理重定向到其他资源,如Location标头字段中的URI所示,该资源旨在提供对原始请求的间接响应。...417 Expectation Failed 至少一台入站服务器无法满足请求的Expect标头字段1中给出的期望。...431 Request Header Fields Too Large 服务器不愿意处理该请求,因为其标头字段太大。减小请求头字段的大小后,可以重新提交请求。...504 Gateway Timeout 该服务器虽然充当网关或代理,但未收到其为完成请求而需要访问的上游服务器的及时响应。
概述: 首先,我们知道,起初的http协议只是为了能够进行通信而被创造出来(也就是请求-响应的过程)。...,只是是握手的时候会传输特定的数据让协议升级成为webSocket协议 与http与之不同的是webSocket是一个持久化协议,而http协议是一个非持久化协议,也就是http他请求然后响应就结束了...在此就不多描述) 多路复用:Socket.io允许你在单个共享连接上创建多个namespace,这些namespace拥有单独的通信通道(room),也可设置单独的权限验证,但是可以共享原来的底层连接;...也是客户端的标识 pingInterval:ping的间隔时长 pingTimeout:判断连接超时的时长 当客户端收到响应之后,scoket.io会根据当前客户端环境是否支持Websocket。...用于升级协议 noop:空操作数据包,客户端收到noop消息会将之前等待暂停的轮询暂停,用于在接收到一个新的websocket强制一个新的轮询周期。
请求体 4.1 Form表单 4.2 非表单类型 请求头 其他 利用HTTP协议向服务器传参有以下几种方式 从url中截取 使用查询字符串 在请求体中发送数据 在http报文头 header 中发送数据...例: 浏览器向后端发送了一个请求,url为 /weather/beijing/20171001 未命名参数 路由 url(r'^weather/([a-z]+)/(\d{8})$', views.weather...QueryDict 在django的 HttpRequest 对象中,属性 GET 和 POST 得到的都是 django.http.QueryDict 所创建的实例,这是django自定义的一个类似字典的类...如果key 具有多个值,以列表形式返回 key 的所有值。当key 不存在时返回一个空列表,设置了默认值则返回默认值。 3. 查询字符串 在url中格式如 ?...name=xuanli,age=18 4.2 非表单类型 非表单类型的数据django无法自动解析,需要通过 request.body 获取原始的请求体数据,然后自己根据数据类型解析。
点击上方“IT平头哥联盟”,选择“置顶或者星标” 一起进步~ 编者按:本文转载自 SHERlocked93 的掘金文章,跟着作者一起来学习一下吧 最近在工作中遇到了需要服务器推送消息的场景,这里总结一下收集整理...长轮询(Long Polling)是在Ajax轮询基础上做的一些改进,在没有更新的时候不再返回空响应,而且把连接保持到有更新的时候,客户端向服务器发送Ajax请求,服务器接到请求后hold住连接,直到有新消息才返回响应信息并关闭连接...,客户端处理完响应信息后再向服务器发送新的请求。...服务器与客户端之间交换的标头信息大概只有2字节; 可以发送文本,也可以发送二进制数据。 没有同源限制,客户端可以与任意服务器通信。 协议标识符是ws(如果加密,则为wss),服务器网址就是 URL。...是一个持久化的协议,相对于HTTP这种非持久的协议来说。
首先, WebSocket 是一个持久化的协议,相对于 HTTP 这种非持久的协议来说。简单的举个例子吧,用目前应用比较广泛的 PHP 生命周期来解释。...四、Websocket的优缺点 优点: WebSocket协议一旦建议后,互相沟通所消耗的请求头是很小的 服务器可以向客户端推送消息了 缺点: 少部分浏览器不支持,浏览器支持的程度与方式有区别(IE10...一般,如果只是用于保活还是可以的。 心跳包一般来说都是在逻辑层发送空的 echo 包来实现的。...,依然没有收到应答包,则说明服务器挂了 // 前端解决方案:心跳检测 var heartCheck = { timeout: 30000, //30秒发一次心跳 timeoutObj:...WebSocket 协议握手是依靠 HTTP 协议的,依靠于 HTTP 响应101进行协议升级转换。
"表明这是一个申请协议升级的 HTTP 请求,服务器端解析这些附加的头信息然后产生应答信息返回给客户端,客户端和服务器端的 WebSocket 连接就建立起来了,双方就可以通过这个连接通道自由的传递信息...客户端发送HTTP升级请求后,直到服务端响应 101 状态码、Upgrade和Sec-WebSocket-Accept首标才算连接成功,否则不能连接成功。...Sec-WebSocket-Protocol: chat, superchat // 首标 告诉客户端应用程序可使用的协议 Sec-WebSocket-Extensions: permessage-deflate...(协商使用传输数据压缩); client_max_window_bits(擦采用LZ77压缩算法时,滑动窗口相关SIZE大小)// 首标 // 服务器发出的响应头 HTTP/1.1 101 Server...其他目的 服务端检测到某个客户端迟迟没有心跳过来可以主动关闭通道,让它下线; 客户端检测到某个服务端迟迟没有响应心跳也能重连获取一个新的连接。
服务器返回此代码表示已收到请求的第一部分,正在等待其余部分。 101 切换协议 请求者已要求服务器切换协议,服务器已确认并准备切换。...201 已创建 请求成功并且服务器创建了新的资源。 202 已接受 服务器已接受请求,但尚未处理。 203 非授权信息 服务器已成功处理了请求,但返回的信息可能来自另一来源。...服务器必须在响应中包含有关冲突的信息。 410 已删除 如果请求的资源已永久删除,服务器就会返回此响应。 411 需要有效长度 服务器不接受不含有效内容长度标头字段的请求。...416 请求范围不符合要求 如果页面无法提供请求的范围,则服务器会返回此状态代码。 417 未满足期望值 服务器未满足"期望"请求标头字段的要求。...已经接受请求,但未处理完成 203 Non-Authoritative Information 非授权信息。请求成功。 204 No Content 无内容。服务器成功处理,但未返回内容。
然而,Sec-WebSocket-Extensions 头字段在 HTTP 响应中不能出现超过1次。...Sec-WebSocket-Accpet 头在一个 HTTP 响应中不允许出现超过1次。...Sec-WebSocket-Protocol 头字段可以在一个 HTTP 请求中出现多次(这个逻辑是等价于一个单独的 Sec-WebSocket-Protocol 头字段包含所有值)。...然而, Sec-WebSocket-Protocol 头字段在 HTTP 响应中不能出现超过1次。...Sec-WebSocket-Version 头字段在服务端理解的版本不匹配从客户端收到的版本导致的 WebSocket 握手失败时,也从服务端发送给客户端。
Short Polling 短轮询使用这种技术,客户端定期发送HTTP请求来检测服务器状态的变化,服务器被编程为立即响应。空响应表示没有变化。...该协议被设计为在客户端和服务器之间已经建立的标准TCP通道上操作,因此是安全的。换句话说,已经使用的通道支持web浏览器和web服务器之间的HTTP协议。...客户端发送WebSocket连接的握手请求。服务器发送握手响应(如果可以的话)。web服务器识别握手请求消息中的传统HTTP头结构,并向客户机发送类似构造的响应消息,表明它支持WebSocket协议。...例如:Set ..BinaryData = 1websocket服务器示例以下简单的WebSocket服务器类接受来自客户机的传入连接,并简单地回显接收到的数据。...这说明了支持WebSockets的关键概念之一:从服务器与客户端启动消息交换。最后,如果客户端(即用户)发送了字符串exit, WebSocket就会优雅地关闭。
Subprotocols []string // 指定 http 的错误响应函数,如果没有设置 Error 则,会生成 http.Error 的错误响应。...如果不检查,就设置一个返回值为 true 的函数。 // 如果请求 Origin 标头可以接受,CheckOrigin 将返回 true。...如果 CheckOrigin 为nil,则使用安全默认值:如果 Origin 请求头存在且原始主机不等于请求主机头,则返回 false CheckOrigin func(r *http.Request...无上下文接管”模式 EnableCompression bool } Upgrade 函数可将 http 升级到 WebSocket 协议: // responseHeader 包含在对客户端升级请求的响应中...// 使用 responseHeader 指定 cookie(Set-Cookie)和应用程序协商的子协议(Sec-WebSocket-Protocol)。
为了建立一个 WebSocket连接,客户端浏览器首先要向服务器端发起一个 HTTP请求,这个请求稍有些不同,它包含了一些附加头信息,其中附加头信息Upgrade: WebSocket表明这是一个申请协议升级的...服务器端解析这些附加的头信息,然后产生应答信息返回给客户端,客户端和服务器端的 WebSocket连接就建立起来了,双方就可以通过这个连接通道自由的传递信息,并且这个链接会持续存在直到客户端或者服务器端的某一方主动的关闭链接...但是 ajax轮询 这种方式增加了网络开销与服务器端资源消耗,是一种低效的实时交互方案。还有一点就是客户端总是主动的,服务器端总是被动的接收请求并响应数据。 WebSocket 解决的问题 1....持久性连接 JavaScript调用浏览器的API发出一个 WebSocket请求至服务器,经过三次握手后与服务器建立了TCP连接。为什么要建立持久性连接(非http keep-alive)呢?...验证 访问服务器, 浏览器请求信息与服务器端响应信息如下图。 ? 小结 ---- 最后来总结下文章中的知识点 WebSocket 是一种在客户端与服务器端之间保持TCP长连接的网络协议。
领取专属 10元无门槛券
手把手带您无忧上云