KonishiLee's Blog

HTTP 协议

背景

HTTP 协议是互联网的基础协议,也是网页开发的必须要学习的知识,目前最新的版本是 HTTP/2。

Content-Type (数据类型)

关于字符编码,1.0 规定头信息必须是 ASCII 码,数据则可以是任何格式。所以在服务端回应的时候,必须告诉客户端这些是什么格式。

  • text/plain
  • text/html
  • text/css
  • image/jpeg
  • image/png
  • image/svg+xml
  • audio/mp4
  • video/mp4
  • application/javascript
  • application/pdf
  • application/zip
  • application/atom+xml

这些数据类型总称为 MIME type,客户端在请求的时候,可以使用 Accept 字段申明只接受哪些数据类型的格式。

升级

持久链接

从 HTTP/1.1 发布之后,最大的改变就是持久链接(persistent connection),即 TCP 链接默认不关闭,不需要声明 Connection: keep-alive,如果需要关闭,声明Connection: close

管道机制

HTTP/1.1 还增加了管道机制(pipelining),即在同一个 TCP 链接里,客户端可以同时发送多个请求。

方法

HTTP/1.1 还增加了许多动词方法。PUTPATCHHEADOPTIONSDELETE

缺点

虽然1.1版允许复用TCP连接,但是同一个TCP连接里面,所有的数据通信是按次序进行的。服务器只有处理完一个回应,才会进行下一个回应。要是前面的回应特别慢,后面就会有许多请求排队等着。这称为”队头堵塞”(Head-of-line blocking)。

为了避免这个问题,只有两种方法:一是减少请求数,二是同时多开持久连接。这导致了很多的网页优化技巧,比如合并脚本和样式表、将图片嵌入CSS代码、域名分片(domain sharding)等等。如果HTTP协议设计得更好一些,这些额外的工作是可以避免的。

如果喜欢这个分享,就帮忙买杯咖啡吧