走进HTTP协议
超文本传输协议(Hypertext Transfer Protocol,HTTP)是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。请求和响应消息的头以ASCII形式给出;而消息内容则具有一个类似MIME的格式。这个简单模型是早期Web成功的有功之臣,因为它使开发和部署非常地直截了当。 HTTP是基于客户/服务器模式,且面向连接的。典型的HTTP事务处理有如下的过程: (1)客户与服务器建立连接; (2)客户向服务器提出请求; (3)服务器接受请求,并根据请求返回相应的文件作为应答; (4)客户与服务器关闭连接。 客户与服务器之间的HTTP连接是一种一次性连接,它限制每次连接只处理一个请求,当服务器返回本次请求的应答后便立即关闭连接,下次请求再重新建立连接。这种一次性连接主要考虑到WWW服务器面向的是Internet中成千上万个用户,且只能提供有限个连接,故服务器不会让一个连接处于等待状态,及时地释放连接可以大大提高服务器的执行效率。 HTTP是一种无状态协议,即服务器不保留与客户交易时的任何状态。这就大大减轻了服务器记忆负担,从而保持较快的响应速度。HTTP是一种面向对象的协议。允许传送任意类型的数据对象。它通过数据类型和长度来标识所传送的数据内容和大小,并允许对数据进行压缩传送。当用户在一个HTML文档中定义了一个超文本链后,浏览器将通过TCP/IP协议与指定的服务器建立连接。 HTTP支持持久连接,在HTTP / 0.9和1.0中,连接在单个请求/响应对之后关闭。在HTTP / 1.1中,引入了保持活动机制,其中连接可以重用于多个请求。这样的持久性连接可以明显减少请求延迟,因为在发送第一个请求之后,客户端不需要重新协商TCP 3-Way-Handshake连接。另一个积极的副作用是,通常,由于TCP的缓慢启动机制,连接随着时间的推移而变得更快。 该协议的1.1版还对HTTP / 1.0进行了带宽优化改进。例如,HTTP / 1.1引入了分块传输编码,以允许流传输而不是缓冲持久连接上的内容。HTTP流水线进一步减少了延迟时间,允许客户端在等待每个响应之前发送多个请求。协议的另一项附加功能是字节服务,即服务器仅传输客户端明确请求的资源部分。 从技术上讲是客户在一个特定的TCP端口(端口号一般为80)上打开一个套接字。如果服务器一直在这个周知的端口上倾听连接,则该连接便会建立起来。然后客户通过该连接发送一个包含请求方法的请求块。 HTTP规范定义了9种请求方法,每种请求方法规定了客户和服务器之间不同的信息交换方式,常用的请求方法是GET和POST。服务器将根据客户请求完成相应操作,并以应答块形式返回给客户,最后关闭连接。
课程背景
终端<->前端由<->页面<->状态管理<->API接受层<->HTTP请求
数据库...<->业务逻辑<->后端路由<->请求解析<->HTTP请求
再谈HTTP协议
- HTTP协议是什么 ?
HTTP:超文本传输协议(Hypertext Transfer Protocol)
超文本(.JPG \ TEXT \ .MP3 \ .AVI)
需要协议的原因是因为在传输过程中需要一定的规则才能传输
1.1) 为什么需要协议? 需要明确的边界
- 协议开始
- 协议元数据(用来描述文件的信息,什么样的类型)
- Text
- 结束
1.2) 协议里面有什么 ? 一个常见的POST请求在协议层究竟做了什么?
POST / SIS HTTP/1.1 /*对于HTTP当前版本的描述*/
who: Alex
Content_Type: text/plain
Host: 127.0.0.1:8888
Comtemt_length : 28
/*协议元数据,对于包的描述*/
Let's watch a movie together
/*我们包的一部分*/
HTTP/1.1 200 OK
Server: hertz
Data :Thu, 21 Apr 202 11:46:32 GMT
Content -Type: text/plain; charset=utf-8
Content_Length: 2
Upstream-Caught: 16505415929845800
OK
1.2.1)请求行/状态行
请求行分为:方法名 URL 协议版本
常见的方法名:GET HEAD POST PUT DELETE CONNECT OPTIONS TRACE PATCH
状态行分为:协议版本 状态码 状态码描述
状态码:
1xx: 信息类
2xx:成功
3xx: 重定向
4xx: 客户端错误
5xx: 服务端错误
1.2.2)请求头/相应头
1.2.3)请求体/响应体
1.3) 请求过程
1.4)不足与展望
HTTP1:对头阻塞,传输效率低,明文传输不安全、
HTTP2:多路复用,头部压缩,二进制协议
QUIC:基于UDP实现,解决对头阻塞,加密减少握手次数,支持快速启动