前后端 HTTP

HTTP,Hyper Text Transfer Protocol,即超文本传输协议。

一、什么是 HTTP ?

  • HTTP 基于 TCP/IP 通信协议

  • HTTP 定义了浏览器(即万维网客户)怎么向万维网服务器请求万维网文档,以及服务器怎么将文档传送给浏览器

  • HTTP 是短连接的

    建立 TCP 连接后就开始传输数据,数据传输结束后就释放连接

  • HTTP 是无状态的,它并没有 “记忆”,每次 HTTP 请求都是独立的

  • HTTP 是媒体独立的

    任何类型的数据都可以通过 HTTP 传送

二、请求报文

1. 请求行

  • 方法,即请求方法

    • OPTION:用于跨域预检
    • GET
    • HEAD:用于读取信息首部
    • POST
    • PUT
    • DELETE
    • TRACE:用于环回测试
    • CONNECT:用于代理服务器

    常用的请求方式是 GET 和 POST,其中:

    • GET 传递的内容通过 URL 传递,POST 传递的内容放在请求体中
    • GET 在浏览器回退时是无害的,而 POST 会再次提交请求
    • GET 产生的 URL 地址可以被保存,而 POST 不可以,因此
      • GET 请求可以被保存,而 POST 不可以
      • GET 请求可以被保存在历史记录中
    • GET 传递的内容有长度限制,而 POST 没有
    • POST 相对”更安全”
  • URL

  • 版本

2. 首部行

3. 实体主体

通常不存在。

三、响应报文

1. 状态行

  • 版本

  • 状态码

    • 响应状态码都是 3 位数字
    • 分类:
      • 1XX:表示客户端的请求未完成
      • 2XX:成功
      • 3XX:重定向
      • 4XX:客户端错误
      • 5XX:服务器端错误
  • 短语,用于描述状态码

2. 首部行

  • Content-Type:服务器告诉客户端本次响应体的数据格式及编码格式

  • Content-disposition:服务器告诉客户端以什么格式打开响应体数据

    • in-line:默认值,在当前页面打开
    • attachment;filename=xxx:以附件形式打开响应体

3. 实体主体

可能存在,用于放置响应内容。

四、HTTP/1.1

  • 支持持久连接:
    • HTTP/1.0 是短连接,每次 HTTP 请求都会建立和释放 TCP 连接,这将造成巨大的开销
    • HTTP/1.1 增加了 “持久连接” 机制,多个 HTTP 请求可以复用同一个 TCP 连接
  • 请求头中新增了 host 字段,用于指明服务器的域名

五、HTTP/2

  • HTTP/1.1 中,报文头为文本,数据体为文本或二进制;HTTP/2.0 中,报文头和数据体都是二进制

  • HTTP/2.0 中,多个 HTTP 请求不仅可以复用同一个 TCP 连接,而且还可以同时发送,不需要串行发送

  • HTTP/2.0 支持头信息压缩,一方面,头信息会使用 gzip/compress 压缩;另一方面,客户端和服务器都会维护一个头信息表,从而避免相同字段的重复发送

  • HTTP/2.0 允许服务器主动向客户端发送静态资源

六、HTTP/3

HTTP/3 基于 QUIC 协议。

QUIC,Quick UDP Internet Connection,其目的是替代 TCP,它具有类似 TCP 的连接管理、拥塞窗口、流量控制等网络特性,并且具有更快建立连接、更低延迟等特点。

参考