这是我参与「第四届青训营 」笔记创作活动的第11天
常用响应头
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/html;charset=utf-8 // 类型,编码。
<HTML>
A page with an image
<IMG src="/image.gif">
<HTML>
复制代码
content
简单的文字页面自然无法满足用户的需求,于是1.0加入了更多的文件类型
| 常见Content-Type | ||
|---|---|---|
| text/plan | text/html | text/css |
| image/jpeg | image/png | image/svg + xml |
| application/javascript | application/zip | application/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 】
客户端发送请求带有表明我可以接受gzip、deflate两种压缩方式
Accept-Encoding: gzip, deflate
复制代码
服务器在 Content-Encoding 响应首部提供了实际采用的压缩模式
Content-Encoding: gzip
复制代码
HTTP/1.0 缺点
队头阻塞(Head-of-Line Blocking,每个TCP连接只能发送一个请求。发送数据完毕,连接就关闭,如果还要请求其他资源,就必须再新建一个连接默认是短连接,即每个HTTP请求都要使用TCP协议通过三次握手和四次挥手实现- 仅定义了16种状态码
缓存可以分为两类,一类为强缓存,一类为协商缓存
cookie 泄露风险
http2 概述:
更快 更稳定 更简单