HTTP 头信息解读

时间:2022-12-18 14:00:42

Http协议定义了很多与服务器交互的方法,最基本的有4种:

分别是:GET、POST、PUT和DELETE

一个URL地和于描述一个网络上的资源,而HTTP中的GET、POST、PUT和DELETE对应着对这个资源的查、改、增、删4个操作,常见的就是 GET/POST 了。

GET 一般用于获取/查询资源信息;

POST 一般用于更新资源信息;


HTTP头信息解读

HTTP的头域包括通用头请求头响应头实体头四个部分;

每个头域由一个域名,冒号(:)和域值三部分组成。如:​Connection: keep-alive

通用头部:是客户端和服务器都可以使用的头部,可以在客户端、服务器和其他应用程序之间提供一些通用功能。

比如:Date头部。

Date: Sun, 18 Dec 2022 04:19:05 GMT

请头头部:是请求报文特有的,它们为服务器提供了一些额外信息。

比如:Accept头部,客户端希望接收什么类型的数据。

Accept: */*

响应头部:便于给客户端提供信息。

比如:Server头部,客户端在与哪种类型的服务器交互。

Server:Apache/2.0.61 (Unix)

实体头部:指的是用于应对实体主体部分的头部。

比如:Content-Type头部,可以用实体头部来说明实体主体部分的数据类型。

Content-Type: application/json;charset:utf-8;


HTTP通用头

通用头域包含请求和响应消息都支持的头域。

通用头域包含缓存头部 Cache-Control、Pragma以及信息性头部 Connection、Date、Transfer-Encoding、Update、Via。

1、Cache-Control

Cache-Control指定请求和响应遵循的缓存机制。在请求消息或响应消息中设置 Cache-Control 并不会修改另一个消息处理过程中的缓存处理过程。

请求时的缓存指令包括no-cache、no-store、max-age、 max-stale、min-fresh、only-if-cached;

响应消息中的指令包括public、private、no-cache、no- store、no-transform、must-revalidate、proxy-revalidate、max-age。

各个消息中的指令含义如下:

no-cache:指示请求或响应消息不能缓存,实际上是可以存储在本地缓存区中的,只是在与原始服务器进行新鲜度验证之前,缓存不能将其提供给客户端使用。

no-store:缓存应该尽快从存储器中删除文档的所有痕迹,因为其中可能会包含敏感信息。

max-age:缓存无法返回缓存时间长于max-age规定秒的文档,若不超规定秒浏览器将不会发送对应的请求到服务器,数据由缓存直接返回;超过这一时间段才进一步由服务器决定是返回新数据还是仍由缓存提供。若同时还发送了max-stale指令,则使用期可能会超过其过期时间。

min-fresh:至少在未来规定秒内文档要保持新鲜,接受其新鲜生命期大于其当前 Age 跟 min-fresh 值之和的缓存对象。

max-stale:指示客户端可以接收过期响应消息,如果指定max-stale消息的值,那么客户端可以接收过期但在指定值之内的响应消息。

only-if-cached:只有当缓存中有副本存在时,客户端才会获得一份副本。

Public:指示响应可被任何缓存区缓存,可以用缓存内容回应任何用户。

Private:指示对于单个用户的整个或部分响应消息,不能被共享缓存处理,只能用缓存内容回应先前请求该内容的那个用户。

2、Pragma

Pragma头域用来包含实现特定的指令,最常用的是 ​Pragma:no-cache​;

在HTTP/1.1协议中,它的含义和​ Cache-Control:no-cache​ 相同。

3、Connection

Connection 表示是否需要持久连接。

如果 Servlet 看到这里的值为 “Keep-Alive”,或者看到请求使用的是 HTTP1.1(HTTP1.1默认进行持久连接),它就可以利用持久连接的优点,当页面包含多个元素时,显著地减少下载所需要的时间。

Close:告诉Web服务器或者代理服务器,在完成本次请求的响应后,断开连接,不要等待本次连接的后续请求了。

Keepalive:告诉Web服务器或代理服务器,在完成本次请求的响应后,保持连接,等待本次连的后续请求。

Keep-Alive:如果浏览器请求保持连接,则该头部表明希望 WEB 服务器保持连接多长时间(单位:秒),如 Keep-Alive:300。

4、Date

Date头域表示消息发送的时间,服务器响应中要包含这个头部,因为缓存在评估响应的新鲜度时要用到,其时间的描述格式由RFC822定义。

例如:Date描述的时间表示世界标准时,换算成本地的时间,需要知道用户所在的时区。

Date:Mon, 31 Dec 2001 04:25:57 GMT

5、Transfer-Encoding

WEB 服务器表明自己对本响应消息体(不是消息体里面的对象)作了怎样的编码,比如是否分块(chunked),例如:​Transfer-Encoding:chunked​ 。

6、Upgrade

它可以指定另一种可能完全不同的协议。

如HTTP/1.1客户端可以向服务器发送一条HTTP/1.0的请求,其中包含值为“HTTP/1.1”的Update头部,这样客户端就可以测试一下服务器是否也使用HTTP/1.1了。

7、Via

列出从客户端到 OCS(开放缓存服务器) 或者相反方向的响应经过了哪些代理服务器,他们用什么协议(和版本)发送的请求。

当客户端请求到达第一个代理服务器时,该服务器会在自己发出的请求里面添加 Via 头部,并填上自己的相关信息,当下一个代理服务器收到第一个代理服务器的请求时,会在自己发出的请求里面复制前一个代理服务器的请求的 Via 头部,就知道该请求所经过的路由。例如:

Via:1.0 236-81.D07071953.sina.com.cn:80 (squid/2.6.STABLE13)


HTTP请求头

请求头用于说明是谁或什么在发送请求、请求源于何处,或者客户端的喜好和能力。服务器可以根据请求头部给出客户端信息,试着为客户端提供更好的响应。

请求头域可能包含下列字段:

Accept、Accept-Charset、Accept- Encoding、Accept-Language、Authorization、From、Host、If-Modified-Since、If-Match、If-None-Match、If-Range、If-Range、If-Unmodified-Since、Max-Forwards、Proxy-Authorization、Range、Referer、User-Agent。

对请求头域的扩展要求通讯双方都支持,如果存在不支持的请求头域,一般将会作为实体头域处理。

8、Accept

告诉WEB服务器自己接受什么介质类型。格式: type/sub-type;

*/*​ 表示任何类型,​type/*​ 表示该类型下的所有子类型;