IP 地址; 2.建立TCP连接(三次握手); 3.浏览器发出读取文件(URL 中域名后面部分对应的文件)的HTTP 请求,该请求报文作为 TCP 三次握手的第三个报文的数据发送给服务器; 4.服务器对浏览器请求作出响应...,使用三次握手协议建立连接。...首部压缩 HTTP 2.0 在客户端和服务器端使用“首部表”来跟踪和存储之前发送的键-值对,对于相同的数据,不再通过每次请求和响应发送;通信期间几乎不会改变的通用键-值对(用户代理、可接受的媒体类型,等等...所以应充分利用两者各自的优势,将多种方法组合起来用于通信。在交换密钥环节使用公开密钥加密方式,之后的建立通信交换报文阶段则使用共享密钥加密方式。...在取得服务器响应后,建立的连接会将HTTP升级从HTTP协议交换为WebSocket协议。 webSocket原理:在TCP连接第一次握手的时候,升级为ws协议。后面的数据交互都复用这个TCP通道。
服务器无法处理请求 5XX 服务器错误状态码 服务器处理请求出错 2. 2XX成功 200: OK:正常处理 204: No Content,服务器接受的请求成功处理,但返回但响应报文不包含主体部分...首部字段分类 通用首部字段:请求和响应都使用的字段 请求首部字段:客户端信息,请求的附加信息等 响应首部字段:响应的附加信息 实体首部字段:请求和响应的实体部分使用的字段 3....使用ssl时,http先和ssl通信,再由ssl和tcp通信 3.2 常用的加密方式 共享密钥加密 也叫对称密钥加密,加密和解密用同一个密钥 缺点:无法安全的将密钥发送给接收方 公开密钥加密 使用一对非对称的密钥...不仅连接开销小,且首部信息很少,减少通信量 4. websocket通信机制 在http建立连接后,需要完成一次“握手”步骤 附加头信息中添加"Upgrade: WebSocket",表明这是一个申请协议升级的...HTTP 请求 Sec-WebSocket-Key:记录握手过程中的键值 Sec-WebSocket-Protocol:记录使用的子协议 参考文献 《图解http》
,使用三次握手协议建立连接。...首部压缩 HTTP 2.0 在客户端和服务器端使用“首部表”来跟踪和存储之前发送的键-值对,对于相同的数据,不再通过每次请求和响应发送;通信期间几乎不会改变的通用键-值对(用户代理、可接受的媒体类型,等等...所以应充分利用两者各自的优势,将多种方法组合起来用于通信。在交换密钥环节使用公开密钥加密方式,之后的建立通信交换报文阶段则使用共享密钥加密方式。...所谓响应头,请求头,其实都可以自己添加字段,只要前后端给对应的处理机制即可 Node.js代码实现响应头的设置 if (config.cache.expires) {...在取得服务器响应后,建立的连接会将HTTP升级从HTTP协议交换为WebSocket协议。 webSocket原理: 在TCP连接第一次握手的时候,升级为ws协议。
引用RFC: 此协议未规定服务器在WebSocket握手期间可以对客户端进行身份验证的任何特定方式。...响应。 “状态行”告诉客户端HTTP状态代码(如果没有问题,通常为200),并提供解释状态代码的简短“原因”文本描述。...响应时,服务器必须将特殊GUID值258EAFA5-E914-47DA-95CA-C5AB0DC85B11附加到密钥,生成结果字符串的SHA-1哈希值,然后将其包含为Sec的base-64编码值。...要完成握手,请将适当的HTTP响应头写入客户端套接字。...必须单独实现对不同子协议或消息传递通道等附加功能的支持。 生成和解析WebSocket消息帧 一旦将握手响应发送到客户端,客户端和服务器就可以使用他们选择的子协议(如果有的话)开始通信。
每当其他任何通信使用HTTPS(包括API调用和HTTPS查询上的 DNS)时,也会发生TLS握手。 通过 TCP 握手打开 TCP 连接后,会发生TLS 握手。 TLS 握手期间会发生什么? ?...通过服务器的公钥和 SSL 证书颁发机构的数字签名来验证服务器的身份 握手完成后,生成会话密钥以使用对称加密 加密套件决定握手方式:: 摘自:《HTTPS 篇之 SSL 握手过程详解》[1] 在TLS中有两种主要的握手类型...握手完成,后续通过主密钥加解密。 只有加密套件,讲解的话需要有抓包基础。改天,改天我一定讲。。。 ? 4. WebSocket握手 ? WebSocket协议实现起来相对简单。...它使用HTTP协议进行初始握手。成功握手之后,就建立了连接,WebSocket基本上使用原始 TCP 读取/写入数据。 《图解HTTP》一书中的图讲的比较清楚: ?...: 13 Origin: http://example.com 服务端响应: HTTP/1.1 101 Switching Protocols Upgrade: websocket Connection
WebSocket 简单来说,WebSocket减少了客户端与服务器端建立连接的次数,减轻了服务器资源的开销,只需要完成一次HTTP握手。...response code: 400 看到这个错误信息后,确定这是服务端返回的400响应。...WebSocket 和 HTTP 是两种不同的协议,但是 WebSocket 中的握手和 HTTP 中的握手兼容,它使用 HTTP 中的 Upgrade 协议头将连接从 HTTP 升级到 WebSocket...所以,当 Nginx 代理服务器拦截到一个客户端发来的 Upgrade 请求时,需要我们显式的配置Connection、Upgrade头信息,并使用 101(交换协议)返回响应,在客户端、代理服务器和后端应用服务之间建立隧道来支持...使用Ping、Pong的解决方法有额外的好处,如:可以发现连接是否被意外关闭等。
,HTTP1.1的请求消息和响应消息都应支持Host头域,且请求消息中如果没有Host头域会400错误 HTTP2.0和HTTP1.X相比的新特性 HTTP1.x存在的问题: TCP连接数限制 对于同一个域名...以发送密钥就有被窃听的风险,但不发送,对方就不能解密。 公开密钥加密(非对称加密):使用一对非对称的密钥。一把叫做私有密钥,另一把叫做公开密钥加密。...可以解决共享密钥加密的问题:发送密文的一方使用对方的公开密钥进行加密处理,对方收到被加密的信息后,再使用自己的私有密钥进行解密。...在交换密钥环节使用公开密钥加密方式,之后建立通信交换报文阶段则使用共享密钥加密方式 认证:证明公开密钥正确性的证书 使用数字证书认证机构(CA)和其他相关机关颁发的公开密钥证书 三次握手,四次挥手,为什么是三次和四次...webSocket传输的数据包相对于http而言很小,很适合移动端使用 没有同源限制,可以跨域共享资源 WebSocket 教程[7] Ajax, Fetch, Axios ajax const xhr
“403 Forbidden”实际上不是客户端的请求出错,而是表示服务器禁止访问资源。...权重的最大值是 1,最小值是 0.01,默认值是 1,如果值是0就表示拒绝具体的形式是在数据类型或语言代码后面加一个“;”,然后是“q=value” 例如下面的 Accept 字段:它表示浏览器最希望使用的是...WebSocket 没有使用 TCP 的“IP 地址 + 端口号”,而是使用兼容 HTTP 的 URI 来发现服务,但定义了新的协议名“ws”和“wss”,端口号也沿用了 80 和 443 WebSocket...使用二进制帧,结构比较简单,特殊的地方是有个“掩码”操作,客户端发数据必须掩码,服务器则不用 WebSocket 利用 HTTP 协议实现连接握手,发送 GET 请求要求“协议升级”,握手过程中有个非常简单的认证机制...“意外”识别成 WebSocket,握手消息还增加了两个额外的认证用头字段(所谓的“挑战”,Challenge) Sec-WebSocket-Key:一个 Base64 编码的 16 字节随机数,作为简单的认证密钥
在发送 101 状态码之后,服务器可以使用新协议,并根据需要执行任何额外的特定于协议的握手。实际上,一旦这次升级完成了,连接就变成了双向管道。并且可以通过新协议完成启动升级的请求。...当不安全(HTTP)客户端希望升级时,可以使用该标头,以提供一定程度防止滥用的保护。密钥的值是使用 WebSocket 规范中定义的算法计算的,因此不提供安全性。...该标头由选择使用它的客户端自动添加;它不能使用 XMLHttpRequest.setRequestHeader() 方法添加。 Sec-WebSocket-Key: key key此请求升级的密钥。...如果客户端愿意,则添加它,服务器将在响应中包含一个自己的密钥,客户端将在向你发送升级响应之前验证该密钥。 服务器响应的 Sec-WebSocket-Accept 标头将基于指定的 key 计算的值。...仅响应标头 来自服务器的响应可能包含这些。 Sec-WebSocket-Accept 当服务器愿意发起 WebSocket 连接时,其包含在打开握手过程中来自服务器的响应消息中。
一旦客户端的握手请求发送完成后,客户端必须等待服务端的握手响应,在此期间不可以向服务器传输任何数据。...比如客户端的握手请求中的期望使用的扩展集合为: Sec-WebSocket-Extensions: bar; baz=2 复制代码 那么服务端可以选择使用其中的某个(些)扩展,通过在回传的 |Sec-WebSocket-Extensions...HTTP 响应(比如 400 Bad Request)。...Sec-WebSocket-Version: 25 复制代码 服务端的返回看起来类似: HTTP/1.1 400 Bad Request ......Sec-WebSocket-Version: 13, 8, 7 复制代码 注意,服务器也可以返回下面的内容: HTTP/1.1 400 Bad Request ...
从淡黄的长裙和蓬松的头发我察觉到,面前坐着的这位女面试官属实是有点东西。我的自我介绍也变得声情并茂起来。Skr~~~ 在此期间,小姐姐面无改色的看着我的简历。不过无所谓,这些都不重要。...ECDHE 算法利用了椭圆曲线和离散对数等思想,按照当下的计算机算力,很难在短时间进行破解。且每次握手时生成的都是一对临时的公钥和私钥,这样就保证每次的密钥对也不同。...虽然可以使用轮询来不停的向服务器发送 HTTP 请求,但是缺点也很大,反复的无效请求占用了大量的带宽和 CPU 资源。所以,WebSocket 应运而生。...的精确度更高),需要预先在服务端的响应报文里设置,配合条件请求使用。...202 Accepted:服务器接受并开始处理请求,但请求未处理完成 206 Partial Content:使用range协议时返回部分响应内容时的响应码 3xx 请查阅上文重定向部分,这里不再赘述
握手 客户端的握手消息: GET /chat HTTP/1.1 Host: server.example.com Upgrade: websocket Connection: Upgrade Sec-WebSocket-Key...: 13 // 协议版本 Upgrade: websocket 服务端的握手响应消息: HTTP/1.1 101 Switching Protocols // 101状态代表连接建立成功 Upgrade...消息 WebSocket的消息是使用帧序列来传输的,客户端必须使用掩码发送所有的帧。...被动关闭:TCP意外中断,WebSocket连接也会中断。...不过使用Chrome抓包有局限性,看不到全部的帧信息,可以使用Wireshark抓包工具进行抓包。 引入WebSocket带来的影响 使用WebSocket协议也会对系统架构造成一些影响。
TCP/IP connect: TCP/IP的三次握手: “` 标有syn的数据包 ————-> 标有syn/ack的数据包 client...<————- server 标有ack的数据包 ————–> “` TCP/IP finish: TCP/IP的四次握手: “`...+ Pragma: no-cache, 不使用缓存,http1.1前的历史字段 + Connection: – 控制不在转发给代理首部不字段 – Keep-Alive/Close: 持久连接...: 创建请求的用户代理名称 + Cookie: cookie信息 常见响应头 + Location: 重定向地址 + Server: 被请求的服务web server的信息 + Set-Cookie...+ 公开密钥加密建立连接:非对称加密 + 共享密钥加密 ## Websocket + 基于http协议建立连接,header的upgrade字段转化协议为websocket + 全双工通信,客户端建立连接
第三部分实践环节我们使用了gorilla/websocket库帮助我们快速构建WebSocket服务,它帮封装了使用Go标准库实现WebSocket服务相关的基础逻辑,让我们能从繁琐的底层代码中解脱出来...WebSocket连接由浏览器请求,并由服务器响应,然后建立连接,此过程通常称为握手。...服务器确定了WebSocket请求后,需要使用握手响应进行回复。...ok { // handle error } ..... } 要完成握手,服务器必须使用适当的头进行响应。...然后使用它作为Sec-WebSocket-Accept 响应头的值。 传输数据帧 握手成功完成后,您的应用程序可以从客户端读取数据或向客户端写入数据。
在这个小节中,我们将展示如何使用OWASP_ZAP来监控、拦截和修改WebSockets通信,就像我们在渗透测试期间处理普通请求一样。...发起websocket通信的请求包括Sec-WebSocket-Key报头和base64编码的值。此密钥不是身份验证机制;它只帮助确保服务器不接受来自非websockets客户端的连接: ?...服务器的响应是101的交换协议代码,其中包括一个头Sec-WebSocket-Accept,其目的与客户机使用的键类似。 4....原理剖析 WebSocket通信是客户端通过JavaScript中的WebSocket类发起的。当创建WebSocket实例时,客户机启动与服务器的握手。...当服务器响应握手并建立连接时,HTTP连接随后被WebSocket连接替换,它就变成了一个双向的二进制协议,不一定与HTTP兼容。 WebSockets是纯文本,HTTP也是。
2.1、建立连接 客户端去与服务器建立 TCP 连接,客户端生成 websocket 对象,然后使用 API 建立连接,代码如下: let ws= new WebSocket('ws://localhost...:8888') ws.onopen = function(){ console.log("连接") } 2.2、握手阶段 客户端与服务器建立连接之后,客户端发送握手请求,随后服务器发送握手响应即完成握手阶段...ya9Lkv+tsUtXLXQ==', 'Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits', 服务器握手响应如下...Masking-key域的数据即是掩码密钥,用于解码PayloadData。客户端发出的数据帧需要进行掩码处理,所以此位是1。...Masking-key:0到4字节,如果MASK位设为1则有4个字节的掩码解密密钥,否则就没有。 Payload data:任意长度数据。
如果存在不合法的请求头,那么服务端应该发送 400 响应(“Bad Request”),并且立即关闭套接字。通常情况下,服务端可以在 HTTP 响应体中提供握手失败的原因 。...2.2 服务端握手响应当服务端收到握手请求时,将发送一个特殊响应,该响应表明协议将从 HTTP 变更为 WebSocket。...下面的 Python 代码根据Sec-WebSocket-Key请求头生成Sec-WebSocket-Accept响应头的值:import typingfrom hashlib import sha1import...所有扩展必须指定"扩展数据"的长度,或者如何计算该长度,并且在开始握手期间,必须协商扩展的使用方式。如果存在,那么“扩展数据”包含在总有效载荷长度中。...下图是握手过程中的服务端响应报文:可见,客户端和服务端协商使用扩展“permessage-deflate”,也就是对每条消息使用 deflate 压缩。
领取专属 10元无门槛券
手把手带您无忧上云