HTTP报文学习(一)

不想你离开。 提交于 2020-04-01 01:29:00

报文(message)
是 HTTP 通信中的基本单位,由 8 位组字节流(octet sequence,
其中 octet 为 8 个比特)组成,通过 HTTP 通信传输。
实体(entity)
作为请求或响应的有效载荷数据(补充项)被传输,其内容由实
体首部和实体主体组成。
HTTP 报文的主体用于传输请求或响应的实体主体。
通常,报文主体等于实体主体。只有当传输中进行编码操作时,实体
主体的内容发生变化,才导致它和报文主体产生差异。
303该状态码表示由于请求对应的资源存在着另一个 URI,应使用 GET
方法定向获取请求的资源。
303 状态码和 302 Found 状态码有着相同的功能,但 303 状态码明确
表示客户端应当采用 GET 方法获取资源,这点与 302 状态码有区
别。
304 服务器端允许请求访问资源,但未满足条件的情况下。
307类似302,但是不允许从post方法变成get方法。
代理
每次通过代理服务器转发请求或响应时,会追加写入 Via 首
部信息。
使用代理服务器的理由有:利用缓存技术(稍后讲解)减少网络带宽
的流量,组织内部针对特定网站的访问控制,以获取访问日志为主要
目的。
缓存代理和透明代理
透明代理的意思是客户端根本不需要知道有代理服务器的存在,会改变你的request fields(报文),并会传送真实IP。
缓存代理是代理服务器上会将真实服务器的信息缓存一段时间,在缓存的时间范围内,当下一次客户端访问代理服务器的时候,直接访问的是代理服务器上面的缓存信息。这样就会加速访问速度。

HTTP首部
当 HTTP 报文首部中出现了两个或两个以上具有相同首部字段名时
会怎么样?这种情况在规范内尚未明确,根据浏览器内部处理逻辑
的不同,结果可能并不一致。有些浏览器会优先处理第一次出现的
首部字段,而有些则会优先处理最后出现的首部字段。

主要分为下面几个部分:通用首部,请求首部,响应首部和实体首部。

首部字段DNT属于HTTP请求首部,其中DNT是Do Not Track的简称,意为拒绝个人信息被收集,是表示拒绝被精准广告追踪的一种方法,0为同意被追踪,1为拒绝被追踪

通用首部字段
1.Cache-control
!!事实上 no-cache 代表不缓存过期的资源,缓存会向源服务器进行有效期确认后处理资源,也许称为 do-notserve-from-cache-without-revalidation 更合适。no-store 才是真正地不进行缓存,请
读者注意区别理解。
!!s-maxage 指令的功能和 max-age 指令的相同,它们的不同点是 smaxage
指令只适用于供多位用户使用的公共缓存服务器 2。也就是
说,对于向同一用户重复返回响应的服务器来说,这个指令没有任何作用。
2.Connection 首部字段具备如下两个作用。
控制不再转发给代理的首部字段
管理持久连接
3.Date 表明创建 HTTP 报文的日期和时间
4.Pragma 客户端明确表示不接受缓存资源,针对的是所有的中间服务器(结合np-cache一起使用)
5.Trailer 会事先说明在报文主体后记录了哪些首部字段。该
首部字段可应用在 HTTP/1.1 版本分块传输编码时。
6.Transfer-Encoding 仅仅对于分块传输编码有效。
7.Upgrade是否使用更高的版本进行通信。同时需要指定connection:Upgrade Upgrade:TLS1.1
8.Via首部字段 Via 不仅用于追踪报文的转发,还可避免请求回环的发生。
所以必须在经过代理时附加该首部字段内容。trace方法一起使用。
9.Warning 告知用户一些与缓存相关的问题的警告

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!