HTTP - 杂记
yuiyake 5/11/2022
# 请求报文(请求行+请求头+请求体)
# 请求报文头属性
- Accept:客户端接收什么类型的相应
- Accept-Encoding:编码格式
- Referer:请求头是从那个url来的
- Connection:告诉对方当前tcp连接的状态。如果是keep-alive,网络链接就是持久的,不会关闭,使得对同一个服务器的请求可以持续在这个连接上完成。
- Cache-Control:缓存控制。如一个请求希望相应的内容在客户端缓存一段时间或不被缓存 //协商缓存
- Content-type:(一般存在于post请求),意在告诉服务器传输的是什么类型的数据。传输文件的时候要配置这个请求头。
- Host:请求资源主机端口
- User-Agent:告诉服务器,客户端使用的操作系统、浏览器版本名称
# 相应报文
# 状态码
- 1xx:指示信息–表示请求已接收,继续处理。
- 2xx:成功–表示请求已被成功接收、理解、接受。
- 常用的有200
- 3xx:重定向–要完成请求必须进行更进一步的操作。
- 常用的有304
- 4xx:客户端错误–请求有语法错误或请求无法实现。
- 常见404
- 5xx:服务器端错误–服务器未能实现合法的请求。
- 常见500
- 常见:
- 200:成功
- 301:永久跳转
- 302:可以简单的理解为该资源原本确实存在,但已经被临时改变了位置。
- 303:POST重定向为GET
- 304:资源未修改,可以直接读取本地缓存。这是协商缓存的情况。
- 400:请求中有语法错误,一般是数据或者文件格式传错了
- 403: 意思是除非拥有授权否则服务器拒绝提供所请求的资源。这个状态经常会由于服务器上的损坏文件或目录许可而引起。
- 404:找不到页面地址
- 405 (Method Not Allowed/方法未允许):指出请求方法(GET, POST, HEAD, PUT, DELETE, 等)对某些特定的资源不允许使用。 该状态码是新加入 HTTP 1.1中的。
- 500:内部服务器错误
- 501 (SC_NOT_IMPLEMENTED):状态告诉客户端服务器不支持请求中要求的功能。例如,客户端执行了如PUT这样的服务器并不支持的命令。
# HTTP1.0 1.x 2.0 3.0 和 HTTPS区别
# 1.0
- HTTP/1.* 一次请求-响应,建立一个连接,用完关闭;每一个请求都要建立一个连接;
# 1.1
- 长连接复用
- HTTP/1.1 Pipeling解决方式为,若干个请求排队串行化单线程处理,后面的请求等待前面请求的返回才能 获得执行机会,一旦有某请求超时等,后续请求只能被阻塞,毫无办法,也就是人们常说的线头阻塞;
# 2.0
- 多路复用,即每一个request都是是用作连接共享机制的。一个request对应一个id,这样一个连接上可以有多个request, 每个连接的request可以随机的混杂在一起,接收方可以根据request的 id将request再归属到各自不同的服务端请求里面。
- HTTP/2多个请求可同时在一个连接上并行执行。某个请求任务耗时严重,不会影响到其它连接的正常执行;
- 请求头压缩
# 3.0(又叫HTTP over QUIC)
- 这个差别很大,因为quic他是用的udp传输,不再是tcp。可以定义成:HTTP3.0基于UDP的安全可靠的HTTP2.0协议。
- 减少了TCP三次握手及TLS握手时间。HTTPS和HTTP2还需要使用TLS协议来进行安全传输。这就出现了两个握手延迟,而基于UDP 协议的QUIC,因为UDP本身没有连接的概念,连接建立时只需要一次交互,半个握手的时间。
- 多路复用丢包的线头阻塞问题.QUIC中一个连接上的多个stream之间没有依赖。所以当发生丢包时,只会影响当前的stream,也就避免了线头阻塞问题。
- 优化重传策略。发送端在传送封包时,初始与重传的每一个封包都改用一个新的编号,unique packet number,每一个编号都唯一而且严格递增,这 样每次在收到ACK时,就可以依据编号明确的判断这个ACK是来自初始封包或者是重传封包。
- 流量控制。采用了连线层(connection flow control)和Stream层的(streamflow control)流量控制,限制单一Stream可以占用的最大buffer size。
- 连接迁移。QUIC连接不以四元组(源ip,源端口,目的ip,目的端口)作为标识,而是使用一个64位的随机数,这个随机数被称为Connection lD,对应每 个stream,即使IP或者端口发生变化,只要Connection ID没有变化,那么连接依然可以维持。
# HTTP 与 HTTPS
- HTTPS协议需要到CA申请证书,一般免费证书很少,需要交费。
- HTTP协议运行在TCP之上,所有传输的内容都是明文,HTTPS运行在SSL/TLS之上,SSL/TLS运行在TCP之上,所有传输的内容都经过加密的。
- HTTP和HTTPS使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
- HTTPS可以有效的防止运营商劫持,解决了防劫持的一个大问题。
# http无状态协议
为什么是无状态
- 因为他每个请求都是完全独立的,每个请求包含了处理这个请求所需的完整的数据,发送请求不涉及到状态 变更。
优缺点
- 优点:即使连接断开,会话状态不会受到严重伤害,保持会话也不需要保持连接本身。 无状态也对中间件友好,他不需要理解通信双方的交互过程。
- 缺点:单个请求需要的所有信息都必须要包含在请求中一次发送到服务端,这导致单个消 息的结构需要比较复杂,必须能够支持大量元数据。
解决无状态问题,用cookie,session,token,jwt。