HTTP/1.1 200 OK
HTTP及其工作原理
HTTP头
HTTP头字段是HTTP的请求和响应消息中的消息头部分,它们定义了一个超文本传输协议事务中的操作参数,其头部字段可根据自己的需要定义。
请求头信息
请求头组成
例子:一个GET请求头
1 | GET /home.html HTTP/1.1 |
响应头信息
响应头组成
响应头 | 说明 |
---|---|
Allow:支持的请求方法 | 服务器支持哪些请求方法(如GET、POST等)。 |
Content-Encoding:编码方法 | 文档的编码方法。只有解码才能正确得到Content-Type头指定的内容类型,一般的编码方式如gzip,通过压缩的方式使HTML文档下载时间显著减少。 |
Content-Length:内容长度 | |
Content-Type:文档类型 | 表示后面的文档是什么类型,默认为text/plain,但一般会显式指定为text/html |
Date:时间 | |
Last-Modified:最后改动日期 | |
Server:服务器名字 | |
Set-Cookie:设置关联Cookie |
例子:一个GET响应头
1 | 200 OK |
HTTP请求流程
sequenceDiagram participant DNS服务器 participant 客户 participant 服务器 客户->>DNS服务器:DNS域名解析 DNS服务器->>客户:服务器IP地址 loop 尝试TCP连接 客户->>服务器: TCP三次握手 end 客户->>服务器: 发起HTTP请求 服务器->>客户: 响应HTTP请求,发送HTML代码 服务器->>客户: 四次挥手,断开连接 客户->>客户: 浏览器解析HTML代码获得资源 客户->>客户: 浏览器渲染页面并呈现
为什么HTTP使用TCP
由于打开网页需要传输很多数据,而TCP协议提供拥塞控制、数据重排以及错误纠正等机制,所以更适合HTTP使用场景。
HTTP 发展历程
HTTP1.0
最早版本的HTTP协议是HTTP1.0,其有点是浏览器与服务器只保持短暂连接,且连接不进行记录,这是为了提高效率,但是也造成了一些缺陷,主要包括如下缺点:
- 访问复杂网页会导致多次请求和响应,每次请求响应都会建立新的连接
- 连接无法复用,导致重复经历三次握手和慢启动
- 队头阻塞,如果HTTP流水线中有多个请求出现,一个数据包的阻塞会导致后续的数据包都被阻塞
HTTP1.1
为了改进HTTP1.0的缺陷,人们又提出了1.1,相比1.0,1.1的优点如下:
支持持久连接
在1.1版本中,支持了持久连接,一个TCP连接可以传送多个HTTP请求与响应,减少了建立和关闭连接的消耗与延迟。一个复杂网页可以在一个连接中进行传输。此外,一些其他优点如下所示:
更多请求和响应头
例如Host响应头,Host使浏览器能够区分来自同一服务器的不同站点
- 支持断点续传
HTTP2.0
HTTP2.0相比1.1在性能上有了更大提升,它包含如下特性:
多路复用
二进制分帧
首部压缩
服务端推送
其他
HTTP/HTTPS区别
HTTP运行于TCP上,明文传输,C/S端均无法验证对方身份;HTTPS为身披SSL外壳的HTTP,运行于SSL(安全传输协议)上,而SSL运行于TCP上,架构如下:
graph TD; A["HTTP: 80"] B["HTTPS: 443"] C["SSL"] D["TCP"] A-->D; B-->C; C-->D;
区别:
- 端口不同
- 开销不同,HTTPS由于要加密,需要更大开销
- HTTPS需要购买证书
吃个甜点——Session/Cookie
Session是服务器对用户进行辨识的机制,由于HTTP是无状态协议,因此服务端在辨识用户时,需要一些记录,从而催生了Session,Session和Cookie的区别是Cookie一般保存在C端,当用户第二次发起请求时,会自动将上次存储的cookie发送至服务器,实现身份辨识。
而Session保存在服务器端,默认存放在服务器一个文件夹中,更加安全,但是占用服务器资源。