这是我参与「第四届青训营 」笔记创作活动的第5天
什么是HTTP
超文本传输协议(Hyper Text Transfer Protocol)是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。请求和响应消息的头以ASCII形式给出;而消息内容则具有一个类似MIME的格式。
它是一个应用层协议,基于TCP协议,是无状态的。因为其良好的扩展性,时至今日,它不仅被用来传输超文本文档,还用来传输图片、视频或者表单等内容。
HTTP的历史
- HTTP/O.9: 1991年制定,有严重设计缺陷,只支持GET方法,不支持MIIME类型,很快被
- HTTP/1.0取代。
- HTTP/1.0: 1996年制定,支持多种请求方法,支持多媒仲对象,得到广泛应用。
- HTTP/10+:支持持久连接、虚拟主机、代理连接等新特性,成为非官方的事实标准。
- HTTP/11: 1999年制定,校正HTTP中的设计缺陷,性能优化,删除一些不好的特性。
- HTTP-NG(或HTTP/20):关注HTTP协议的性能优化以及更强大的服务逻辑远程执行框架,研究工作仍在进行中。
HTTP的原理
首先我们需要了解浏览器以及服务器的请求和响应:
- 由像浏览器这样的客户端发出的消息叫做请求( requests )
- 被服务端回应的消息叫做响应(responses )
HTTP的工作流程如下所示:
- 触发。如用户点击某个超链接,软件启动时发送的请求,用户在地址栏访问网址等等。
- 解析。浏览器解析URL,得到协议类型、域名或服务器地址、资源地址等。
- DNS查询。浏览器依次检查缓存与Hosts文件,如果没有,则向DNS服务器请求目标服务器的IP地址。
- 握手。浏览器向服务器发起TCP的连接请求,TCP经过3次握手以后建立连接。
- 请求。建立连接后,浏览器发送一个HTTP请求给服务器。
- 响应。服务器处理完后响应HTTP,返回数据给html。
HTTP的组成
HTTP包含着请求报文和响应报文:
其中常见的请求头和响应头有:
| 请求头 | 响应头 |
|---|---|
| Accept | Allow |
| Accept-Encoding | Content-Length |
| Accept-Language | Content-Type |
| Connection | Content-Encoding |
| Host | Date |
| Origin | Expires |
| Referer | cache-control |
| Cookie | Location |
| User-Agent | Server |
| Content-Type | Transfer-Encoding |