# HTTP协议

OSI 网络七层模型的 应用层

OSI 网络七层模型:

  • 应用层:DNS、FTP、SNMP、HTTP
  • 表示层
  • 会话层
  • 传输层:TCP、UDP
  • 网络层:IP、ICMP、RIP、OSPF、BGP、ICMP
  • 数据链路层:ARP、PARP
  • 物理层

# 总结

# GET 和 POST 请求的区别

  • GET 是一个幂等操作,不会对服务器资源产生影响;POST 一般会对服务器资源产生影响;
  • GET 请求缓存场景较多;POST 一般不缓存;
  • GET 请求报文中实体部分为空;POST 请求报文中实体为有效数据
  • GET 请求的参数在 url 会记录;
  • GET 请求的 url 在浏览器中有限制;
  • POST 参数传递支撑更多类型

# 常见的 HTTP 请求头和响应头

请求头:

  • Accept:内容类型
  • Accept-Charset:字符集
  • Accept-Language:浏览器当前设置的语言
  • Accept-Encoding:压缩编码
  • Connection:浏览器与服务器之间连接的类型
  • Cookie:当前页面设置的 Cookie
  • Host:发出请求的页面所在域
  • Referer:发出请求的页面的 URL
  • User-Agent:浏览器的用户代理字符串

响应头:

  • Data:消息发送的时间
  • Server:服务器名称
  • Connection:连接类型
  • Cache-Control:控制 HTTP 缓存
  • Content-Type:文档类型
    • application/x-www-form-urlencoded:浏览器原生 form 表单,数据存放在 body 中,按照 & 拼接,并对 key、value 进行转码
    • multipart/form-data:通常上传文件使用
    • application/json:服务器消息主体是序列化后的 JSON 字符串
    • text/html:提交 XML 格式数据

# HTTP 状态码

  • 10x:
    • 100:继续,响应已被接收,且仍未被拒绝
    • 101:切换协议,服务器理解客户端请求,通过 Upgrade 消息头通知客户端采用不同的协议来完成这个请求。
  • 20x:
    • 200:成功
    • 201:Created,通常是 PUT 方法得到的响应码
    • 202:Accepted,服务器已接受请求,但尚未处理。
    • 203:未授权信息,服务器成功处理了请求,但返回的实体头部元信息无效
    • 204:无内容,没有响应内容,只有响应头
    • 205:重置内容
    • 206:部分内容,分段下载使用
  • 30x:
    • 301:永久重定向,被请求资源被永久移动到新位置,通过响应的 Location 找到新的 URL。客户端访问正确地址后应当自动更换请求为当前地址,浏览器会缓存
    • 302:临时重定向,临时从不同的 URI 响应请求。通过响应的 Location 找到新的 URL。
    • 304:客户端存在有效缓存,使用缓存内容即可
      • 缺点:SEO 权重降低,搜索引擎收录减少,网站快照停止
  • 40x:
    • 400:错误请求
    • 401:未授权,需要身份验证
    • 402:需要付款,保留以供将来为数字支付系统而用,
    • 403:禁止访问,客户端无权访问
    • 404:未找到,找不到资源
    • 405:不允许使用该方法
    • 406:无法接受
    • 407:要求代理身份验证
    • 408:请求超时
  • 50x:
    • 500:内部服务器错误
    • 501:未实现,服务器不支持请求中使用的方法
    • 502:网关错误,服务器作为网关从上游拿到了一个无效的 HTTP 响应
    • 503:服务不可用,临时的服务器维护或过载,将会在一段时间内恢复。
    • 504:网关超时
    • 505:HTTP 版本不受支持

# HTTP 发展

  • HTTP 1.0: 非持久连接
  • HTTP 1.1:持久连接,浏览器为每个域名最多维护 6 个 TCP 连接,引入 Cookie
  • HTTP 2:二进制协议,可发起多个请求,多路复用,允许专用算法压缩头部,允许服务器主动向客户端推送数据,增加了安全性
  • HTTP 3:QUIC 协议,基于 UDP 的底层封装,实现了 流量控制、传输可靠、数据重传、拥塞控制等,继承了 TLS 加密功能。实现了多路复用,同一物理连接上实现了多个独立逻辑连接。快速握手功能。