HTTP 实用指南 | 青训营笔记

76 阅读3分钟

这是我参与「第四届青训营 」笔记创作活动的第11天

image.png 常用响应头

HTTP/0.9

HTTP问世之初并没有作为标准建立,被正式制定为标准是在1996年公布的HTTP/1.0协议。因此,在这之前的协议被称为HTTP/0.9。

request只有一行且只有一个GET命令,命令后面跟着的是资源路径。

GET /index.$html$
复制代码

reponse仅包含文件内容本身

<html>
  <body>HELLO WORLD!</body>
</html>
复制代码

HTTP/0.9没有header的概念,也没有content-type的概念,仅能传递html文件。同样由于没有status code,当发生错误的时候是通过传递回一个包含错误描述的html文件来处理的。

HTTP/1.0

随着互联网技术的飞速发展,HTTP协议被使用的越来越广泛,协议本身的局限性已经不能满足互联网功能的多样性。因此,1996年5月HTTP/1.0诞生,其内容和功能都大大增加了。对比与HTTP/0.9,新的版本包含了以下功能:

  • 在每个request的GET一行后面添加版本号
  • 在response第一行中添加状态行
  • 在request和response中添加header的概念
  • 在header中添加content-type以此可以传输html之外类型的文件
  • 在header中添加content-encoding来支持不同编码格式文件的传输
  • 引入了POST和HEAD命令
  • 支持长连接(默认短连接)
GET /index.html HTTP/1.0
User-Agent: NCSA_Mosaic/2.0 (Windows 3.1)

200 OK
Date: Tue, 15 Nov 1994 08:12:31 GMT
Server: CERN/3.0 libwww/2.17
Content-Type: text/htmlcharset=utf-8 // 类型,编码。
<HTML>
A page with an image
  <IMG src="/image.gif">
<HTML>
复制代码

content

简单的文字页面自然无法满足用户的需求,于是1.0加入了更多的文件类型

常见Content-Type
text/plantext/htmltext/css
image/jpegimage/pngimage/svg + xml
application/javascriptapplication/zipapplication/pdf

也同样可以用在html中

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
复制代码

Content-encoding

由于支持任意数据格式的发送,因此可以先把数据进行压缩再发送。HTTP/1.0进入了Content-Encoding来表示数据的压缩方式。

  • Content-Encoding: gzip。【表示采用 Lempel-Ziv coding (LZ77) 压缩算法,以及32位CRC校验的编码方式】
  • Content-Encoding: compress。【采用 Lempel-Ziv-Welch (LZW) 压缩算法】
  • Content-Encoding: deflate。【采用 zlib 】

客户端发送请求带有表明我可以接受gzipdeflate两种压缩方式

Accept-Encoding: gzip, deflate
复制代码

服务器在 Content-Encoding 响应首部提供了实际采用的压缩模式

Content-Encoding: gzip
复制代码

HTTP/1.0 缺点

  1. 队头阻塞(Head-of-Line Blocking ,每个TCP连接只能发送一个请求。发送数据完毕,连接就关闭,如果还要请求其他资源,就必须再新建一个连接
  2. 默认是短连接,即每个HTTP请求都要使用TCP协议通过三次握手和四次挥手实现
  3. 仅定义了16种状态码

image.png 缓存可以分为两类,一类为强缓存,一类为协商缓存

image.png cookie 泄露风险

image.png

http2 概述:

更快 更稳定 更简单