HTTP报文
前言
http是客户端浏览器等与Web服务器之间的应用层通信协议,http协议非常重要,是互联网上应用最为广泛的一种协议,所有www文件都必须遵守这个标准。
一、HTTP报文相关概念
HTTP报文就是用于HTTP协议交互的信息 ,有请求报文和响应报文。请求端,即客户端的报文为请求报文,响应端,即服务器的叫做响应报文。
它本身是由多行数据构成的字符串文本 (用CR+LF作为换行符)。报文大致可以分为报文首部和报文主体两块,两者由最初出现的空行(CR+LF)来划分,报文一定要有报文首部,但不一定有报文主体 。
HTTP在传输数据时可以按照数据原貌直接传输,也可以在传输过程中通过编码提升传输效率 。通过在传输时编码,能有效地处理大量的访问请求,但同时编码的操作需要由计算机来完成,在提高传输速率的同时,不可避免地会因此消耗更多的CPU等资源 。
二、报文主体和实体主体的差异
通常,报文主体是等于实体主体。不过当传输过程中进行编码操作的时候,实体主体的内容就会发生变化 ,此时两者便有了差异。
在HTTP通信中,请求的编码实体资源尚未完全传输完成时,浏览器是无法显示请求页面,但在传输大容量数据的时候,可以通过把数据切分成多块,这样能让浏览器逐步显示页面,这种把实体主体分块的方法叫做分块传输编码(chunked) 。分块传输编码将其分成多块,每一块会用16进制数来标记大小,实体最后会用“0(CR+LF)”来标记。
传输编码使用 Transfer-Encoding 首部进行标记,在HTTP/1.1 协议里,它只有 chunked 这一个取值,表示分块编码。 在HTTP2.0不支持HTTP/1.1语义下的chunked模式的——因为它的DATA帧是天然的chunked模式 ,这就是最容易出现问题的地方。客户端请求基本上都是chunked模式,所以当升级到HTTP2后就会出现问题。
三、状态码的类别
HTTP状态码(英语:HTTP Status Code)是用以表示网页服务器超文本传输协议响应状态的3位数字代码。它由 RFC 2616 规范定义的,并得到 RFC 2518、RFC 2817、RFC 2295、RFC 2774 与 RFC 4918 等规范扩展。(来源于百度百科)
状态码由5种类别,通过3位数字中的第一位来区别不同的类别。
| 类别 | 原因短语 |
---|
1xx | Informational | 接收的请求正在处理 | 2xx | Success | 请求正常处理完毕 | 3xx | Redirection | 需要进行附加操作 | 4xx | Client Error | 服务器无法处理请求 | 5xx | Server Error | 服务器处理请求出错 |
几个常见的状态码: 200 OK:表示请求已经正常处理 204 Not Content:请求处理成功,但没有资源 304 Not Modified:资源已找到,但并不符合条件请求(304返回时,不包含任何响应的主体部分,304虽然被划分在3xx类别中,但是和Redirection(重定向)没有关系 ) 400 Bad Request:请求报文中存在语法错误 403 Forbidden:访问被服务器拒绝了 404 Not Found:服务器上没有请求的资源。除此之外,也可以是服务器端拒绝请求并且不想说明理由时候返回的状态码。 503 Service Unavailable:表明服务器暂时处于超负荷或停机维护。
四、通信数据转发程序
通信数据转发程序:代理、网关、隧道
代理
代理是一种具有转发功能的应用程序,它扮演了位于服务器和客户端“中间人”的角色,接收由客户端发送的请求并转发给服务器,同时也接收服务器返回的响应并转发给客户端。 优点:利用缓存技术减少网络带宽的流量,组织内部针对特定网站的访问控制,以获取访问日志 等。 分类基准: ①是否使用缓存?缓存代理:非缓存代理 ②是否修改报文?非透明代理:透明代理
网关
网关是转发其他服务器通信数据的服务器 ,接收从客户端发来的请求时,它就像自己拥有资源的源服务器一样对请求做出处理。 优点:网关的工作机制与代理相似 ,而网关可以使通信线路上的服务器提供非HTTP协议服务 。利用网关可以提高通信的安全性 ,因此可以在客户端与网关之间的通信线路上加密以确保连接安全。
隧道
隧道是在相隔甚远的客户端和服务器两者之间进行中转 ,并保持双方通信连接 的应用程序。 优点:隧道的目的的确保客户端与服务器进行安全的通信 。
|