http的部分知识点

本文深入解析HTTP协议,涵盖三次握手与四次挥手的过程,介绍常见HTTP状态码及其含义,讲解WebSocket协议的特点。同时,讨论HTTP/2的多路复用、帧结构和服务器推送,并提及HTTP3的QUIC协议。
摘要由CSDN通过智能技术生成

HTTP

三次握手

第一次握手:建立连接时,客户端发送syn包到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号
第二次握手:服务器收到syn包,必须确认客户端的SYN,同时自己也发送一个SYN包,即SYN+ACK包,此时服务器进入SYN_RECV状态。
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK,此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手

四次挥手

TCP客户端发送一个FIN,用来关闭客户到服务器的数据传送。
 服务器收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。和SYN一样,一个FIN将占用一个序号。
服务器关闭客户端的连接,发送一个FIN给客户端。
客户端发回ACK报文确认,并将确认序号设置为收到序号加1。

状态码

1.xx

101 协议升级使用,客户端代upgrade头部,升级websocket或则http2.0

2.xx

200 返回成功响应
204 成功执行,但是不返回响应体,要求不刷新页面
205 成功执行,但是不返回响应体,要求刷新页面

3.xx

301 永久性重定向, 客户端缓存
302 临时重定向
307 301基础,但是重定向请求方式必须一样
308 302基础,但是重定向请求方式必须一样

4.xx

401 用户认证信息缺失或则不正确
407 需要代理的请求,认证信息没有通过代理服务器,如使用网吧的网络等
403 无权限执行请求,如文件的权限
410 404的补充,但是表示永远没有这个文件的存在
414 uri太长了。超出服务器接受的最大长度
426 拒绝当前服务器协议,通过upgrade告知升级协议

常用请求头参数

referer

 来自某一页面的请求自动添加的头部,如哪个搜索引擎,但是如果是用http协议,但是来源页面是https
常用于统计分析,缓存优化,防盗链

Accept-Encoding 和Content-Encoding

客户端发送请求时,通过Accept-Encoding带上自己支持的内容编码格式列表,如:gzip, deflate, br
服务端在接收到请求后,从中挑选出一种用来对响应信息进行编码,并通过Content-Encoding来说明服务端选定的编码信息,如gzip
浏览器在拿到响应正文后,依据Content-Encoding进行解压
作用是优化大小,也可以选择不压缩

content-Length

content-Length表示的是返回的body的长度,如果content-Length长度比实际的要长,那么直接请求报错,如果content-Length长度比实际的要短,那么直接只返回一部分

Range

rang的涉及到下载的片段,所以在下面说

跨域

简单跨域请求

服务器端设置Access-Control-Allow-Origin

复杂跨域请求

服务器端设置Access-Control-Allow-Origin、Access-Control-Allow-Methods、Access-Control-Allow-Headers、Access-Control-Max-Age等

http2使用的非对称加密

非对称加密

加密的时候使用对方的公钥加密
解密的时候使用自己的私钥

http2的tsl流程

tsl

tsl是由ssl发展过来的
1."client hello"消息:客户端通过发送"client hello"消息向服务器发起握手请求,该消息包含了客户端所支持的 TLS 版本和密码组合以供服务器进行选择,还有一个"client random"随机字符串。
2."server hello"消息:服务器发送"server hello"消息对客户端进行回应,该消息包含了数字证书,服务器选择的密码组合和"server random"随机字符串。
3.验证:客户端对服务器发来的证书进行验证,确保对方的合法身份,验证过程可以细化为以下几个步骤:

检查数字签名
验证证书链 (这个概念下面会进行说明)
检查证书的有效期
检查证书的撤回状态 (撤回代表证书已失效)
4."premaster secret"字符串:客户端向服务器发送另一个随机字符串"premaster secret (预主密钥)",这个字符串是经过服务器的公钥加密过的,只有对应的私钥才能解密。
5.使用私钥:服务器使用私钥解密"premaster secret"。
6。生成共享密钥:客户端和服务器均使用 client random,server random 和 premaster secret,并通过相同的算法生成相同的共享密钥 KEY。
7.客户端就绪:客户端发送经过共享密钥 KEY加密过的"finished"信号。
8.服务器就绪:服务器发送经过共享密钥 KEY加密过的"finished"信号。
9.达成安全通信:握手完成,双方使用对称加密进行安全通信。

WebSocket

客户端的帧必须使用掩码编码
掩码是为了解决缓存污染攻击
 xor ,根据 frame-masking-ket与数据进行掩码操作
如:掩码为11111111,
则按照四个字节作为一次,进行一次xor(异或操作)注意,是使用ascii的

rang实现分段下载


range规范:服务器端只发送一部分,而客户端自动将包体组成一个更大的,完整的
range=bytes=100

range的条件请求
第一次的时候,请求内容,并且使用range=byte=1的时候,获取到一部分的字节,然后服务器会返回一个etag,下回吧这个etag作为if-mtach传送过去,如果服务器判定变化了,则直接返回412,如果没有就没事
Content-Range=bytes 41-1233/1234
Content-Range=byte-content-range/other-content-range
206成功=>416错误=>200不支持

HTTP2的部分概念(待完善)

connection

1 个 TCP 连接,包含一个或者多个 Stream。

Stream

一个双向通讯数据流,包含 1 条或者多条 Message

Message

对应 HTTP/1 中的请求或者响应,包含一条或者多条 Frame。

Frame

最小单位,以二进制压缩格式存放 HTTP/1 中的内容。

上述四者的关系

在http2的一个请求中,可以实现多路复用,且,一个tcp的链接,可以由一个或多个stream。,每一个stream可以由一个或多个message,如浏览器向服务器端发送一个消息,视位一个message。一个message中可以有多个帧,每一个帧是一个二进制的数据块
每一个stream中的frame都是串行的。每一个frame都有一个streamid。标志着是哪一个stream的,且服务器端推送的streamid,是奇数。而浏览器端的streamid,是偶数,但是同一个请求响应的帧必须是有序的。如先头部,在header,根据streamid
http2中,是有序的,

服务器端推送

其实就是你客户端先访问,服务端加个标识,然后再给你response一个

HTTP3(待完善)

QUIC协议

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值