Http首部的字段及相应的取值内容

最近在写OkHttp3的相关博客,里面会涉及HTTP的基础知识,由于本人对HTTP没怎么接触过,所以在学习OkHttp3的同时对Http了解一下,通过博客的方式整理记录下来。
今天整理记录的内容是Http首部字段的含义及相应的取值内容,了解它是为了对OkHttp3中Header类有更深的理解。
由于Http的头部字段很多,在这里我只记录比较常见的字段,如果想了解更多的字段请参见Web 技术文档

Http的首部字段可以大致分为如下几类:
1、通用首部
2、请求首部
3、响应首部
4、实体首部
今天我们也会按照这种分类方式去记录。

1、通用首部
(1.1)通用的信息性首部

Connection —— 允许客户端和服务器指定与请求/响应连接有关的选项。
取值内容有:
keep-alive >>> 一直保持连接
close>>> 连接完成后,自动关闭。
keep-alive:timeout=30 >>> 连接保持30秒后自动关闭。

.
Date—— 提供日期和时间标志,说明报文是什么时间创建的。
取值内容有:
Tue,03 Jul 2012 04:40:59 GTM >>> 这是Http/1.1的取值方式
Tue,03-Jul-2012 04:40:59 GTM >>> 这是Http/1.1之前的取值方式
.
MIME-Version —— 给出了客户端/服务器使用的MIME版本。
取值内容有:
<基本数值 实例:MIME-Version:1.1>
.
Transfer-Encoding —— 发送端对报文采用的编码方式;这是在发送端发送的数据太多,或长度难以计算时使用,目的对数据采用分块传输。
取值内容有:
chunked >>> 唯一的取值内容
.
Via —— 显示了报文经过的中间节点(代理、网关)。
对Via的解释:当发送端将报文发送到A代理,A代理配置自己的报文,并将Via的值加上自己的相关信息,然后将报文发送给B代理,B代理做与A代理相同的事情,依次发送至最终接收端。这样Via就显示了报文经过的中间节点。
取值内容有:
<描述当前接收端的相关信息,如名称、版本、型号等。>

(1.2)通用的缓存信息首部 : 客户端使用缓存的意思是从缓存服务器中直接拿走缓存资源;服务器使用缓存的意思是,将资源在缓存服务器中保留一份,后期供客户端直接从缓存服务器中获取。

Cache-Control —— 配置缓存选项,随报文一起发送到接受端。
请求头部的缓存取值:
no-cache >>> 不使用代理服务器缓存的结果,直接去源服务器去取。如果源服务器有缓存资源则在返回前要进行有效性验证。
no-store >>>不使用任何服务器的缓存,直接去服务器获取最新资源。
max-age= >>> 告知服务器客户端只接受Age值小于n秒的缓存资源。
max-stale= >>> 告知服务器客户端接受过期时长小于n秒的缓存资源,
min-fresh= >>> 告知服务器客户端只接受还能活的最少时间为n秒的响应结果。
no-transform >>> 告知代理服务器不可更改媒体类型。
only-if-cached >>> 直接从缓存服务器中获取缓存资源。
响应头部的缓存取值
public >>> 告知缓存服务器,缓存可以共供任何客户端使用。
private >>> 告知缓存服务器,缓存只能供特定的客户端使用。
no-cache >>>禁止“中间”服务器对资源进行缓存。并告知缓存服务器,缓存该资源前再次向服务器进行资源有效性验证。
no-store >>> 告知缓存服务器,禁止缓存该资源。
must-revalidate >>> 同no-cache
proxy-revalidate >>> 要求代理服务器对缓存的响应有效性再进行确认。
max-age= >>> 告知缓存服务器,响应的最大age值为n秒。
s-mexage= >>> 告知公共缓存服务器,响应的最大age值为n秒。

2、请求首部:用户告知服务器谁或什么在发送请求、请求源自何处,或者客户端的喜好及能力。服务器可以根据请求首部给出的客户端信息,试着为客户端提供更好的响应。
(2.1)信息性首部

Client-IP —— 提供了运行着客户端的机器的IP地址。
取值内容有:
<地址IP 示例:192.168.0.1>
.
From —— 提供了客户端用户的E-mail地址。
取值内容有:
<邮箱地址 示例:527672827@qq.com>
.
Host —— 提供了客户端请求服务器的主机名(或域名)和端口号。
取值内容有:
<示例:www.baidu.com>
.
Referer —– 提供了当前请求的URL来自哪(这个来自哪也是URL)
取值内容有:
<地址URL 示例:https://mp.csdn.net/mdeditor>
.
User-Agent —— 提供了发送请求的应用程序的相关相信。
取值内容有:
<应用程序的相关信息 示例: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)>
.
以下内容不常见,知道他们是干什么的就行
UA- Color —– 提供了与客户端显示器的显示颜色有关的信息。
UA-CPU —— 提供了客户端CPU的相关信息。
UA-Disp —— 提供了与客户端显示器能力有关的信息。
UA-os —— 提供了运行着客户端的机器的操作系统的相关信息。
UA-Pixels —— 提供了客户端显示器的像素的相关信息。

(2.2)Accept首部:为客户端提供了一种将其喜好和能力告知服务器的方式。

Accept —— 客户端告知服务器想要哪些媒体类型。
取值内容有:
参考http://www.w3school.com.cn/media/media_mimeref.asp
.
Accept-Charset —— 客户端告知服务器想要哪些字符集。
取值内容有:
<字符编码集,如UTF-8、UTF-16、ASCII、GBK、UNICODE>
.
Accept-Encoding —— 客户端告知服务器想要哪些编码类型。
取值内容有:
compress、gzip、默认是identity
.
Accpet-Language —— 客户端告知服务器想要哪些语言。
取值内容有:
<语言码 示例:fr-ch,fr;q=0.9,en;q=0.8,de;q=0.7,*;q=0.6>
解释:定义支持多种语言,多种语言之间用逗号隔开,第一种语言为最新好的语言,其它语言按照q的等级分出喜好等级, q取值 0-1,q值越大越喜好。

(2.3)条件请求首部

Expect —— 包含一个期望条件, 表示服务器只有在满足此期望条件的情况下才能妥善地处理请求。
取值内容有:
100-continue >>>通知接受方客户端要发送一个体积可能很大的消息体,期望收到状态码为100的回复。目前常用的就这一个值。
.
If-Match —— 如果实体标记与当前文档的实体标记相匹配,就执行这个请求。
取值:
<实体标签 实例 If-Match:”2345treew3456y7hgftdsew”>
.
If-Modified-Since —— 如果在指定的日期之后资源被修改过,就执行这个请求。
取值内容有:
<星期的名字>, <日> <月> <年> <时>:<分>:<秒> GMT
示例:Wed, 21 Oct 2015 07:28:00 GMT
.
If-None-Match —— 如果提供的实体标记与当前文档的实体标记不相符,就执行这个请求。
取值内容有:
<实体标签 实例 If-Match:”2345treew3456y7hgftdsew”>
.
If-Range —— HTTP 请求头字段用来使得 Range 头字段在一定条件下起作用:当字段值中的条件得到满足时,Range 头字段才会起作用,同时服务器回复206 部分内容状态码,以及Range 头字段请求的相应部分;如果字段值中的条件没有得到满足,服务器将会返回 200 OK 状态码,并返回完整的请求资源。 字段值中既可以用 Last-Modified 时间值用作验证,也可以用ETag标记作为验证,但不能将两者同时使用
取值内容有:
<星期>, <日> <月> <年> <时>:<分>:<秒> GMT 或 <实体标签> 两者二选一
.
Range —— 如果服务器支持范围请求,就请求资源的指定范围,否则返回资源全部。
取值内容有:
bytes = -100 >>>资源最后的一百个字节。
bytes = 200 - 300 >>>资源的第200个字节到第300个字节
bytes = 100- >>> 资源的前100个字节。
bytes = -100, 300-500,100- >>>返回三个资源文件,每个资源文件中存放相应的字节数量和内容。
.
If-Unmodified-Since —— 如果在指定的时间之后资源没有被修改,就执行这个请求。
取值内容有:
<星期>, <日> <月> <年> <时>:<分>:<秒> GMT GMT
示例:Wed, 21 Oct 2015 07:28:00 GMT

(2.4)安全请求首部

Authorization —— 包含了客户端提供给服务器的数据,以便对其自身进行认证。
Cookie —— 客户端用它想服务器传送一个令牌(它并不是真正的安全首部,但确实隐含了安全功能)。
Cookie2 —— 用来说明请求端支持的cookie版本。

(2.5)代理请求首部

Max-Forward —— 在通往源端服务器的路径上,将请求转发给其他代理或网关的最大次数。
Proxy-Authorization ——-与Authorization首部相同,但这个首部是在与代理进行认证时使用的。
Proxy-Connection —— 与Connection首部相同,但这个首部是在与代理进行连接时使用的。

3、响应首部:为客户端提供了一些额外信息,比如谁在发送响应、响应者的功能、甚至与响应相关的一些特殊指令。这些首部有助于客户端处理响应,并在将来发起更好的请求。
(3.1)响应的信息性首部

Age —— 响应持续时间。
取值的内容有:
age = >>>响应持续到现在已经有n秒
.
Retry-After —— 如果资源不可用的话,在此日期或时间重试。
取值的内容有:
<日期:http-date>或<秒:seconds>
.
Server —— 服务器应用程序软件的名称和版本。
取值的内容有:
<服务器的相关信息 示例:Apache/2.4.1(Unix)>
.
Warning —— 警告信息。
取值的内容有:
<警告码:warn-code> <警告代理:warn-agent> <警告内容:warn-text> [<警告日期:warn-date>]
解释:
<警告码:warn-code>
三位数字警告码 对应的具体内容请参见http://www.iana.org/assignments/http-warn-codes/http-warn-codes.xhtml
<警告代理:warn-agent>
添加到 Warning 首部的服务器或者软件的名称或者伪名称(当代理不可知的时候可以用 “-” 代替)。
<警告内容:warn-text>
用来描述错误信息的警告文本。
[<警告日期:warn-date>]
可选。假如多个 Warning 被发送,那么需包含一个与 Date 首部相对应的日期字段。
示例:
Warning: 110 anderson/1.3.37 “Response is stale”Date: Wed, 21 Oct 2015 07:28:00 GMT
Warning: 112 - “cache down” “Wed, 21 Oct 2015 07:28:00 GMT”

(3.2)协商首部:如果资源有多种表示方法,比如,服务器上有某文档的法语和德语译稿,Http/1.1可以为服务器和客户端提供对资源进行协商的能力。

Accept-Range —— 对此资源来说,服务器可接受的范围类型。
.
Vary —— 这是个首部列表,服务器会根据这些首部的内容挑选出最适合的资源版本发送给客户端

(3.3)安全相应首部

Proxy-Authenticate —— 来自代理服务器对客户端的质询列表。
.
Set-Cookie —— 不是真正的安全首部,但隐含有安全功能,可以在客户端设置一个令牌,以便服务器对客户端进行标识。
.
WWW-Authenticate —— 来自服务器的对客户端的质询列表。

4、实体首部 :由于在请求和响应报文中都可能包含实体部分,所以在这两种类型的报文中都可能出现这些首部。
(4.1)实体的信息性首部

Allow ——列出了获得实体的请求方法
取值的内容有:
<请求方法 示例:allow:get,post,head>
.
Location —— 实体的实际位置(URL)。
取值的内容有:
<地址URL 示例:www.baidu.com>

(4.2)实体的内容首部:以下部分未表明取值的,可对应参考Accept系列取值。

Content-Encoding —— 对实体采用的编码类型。
Content-Language —— 实体采用的语言。
Content-Length —— 实体的内容长度。
Content-Location —— 实体实际所处的位置。
Content-Range —— 在整个资源中此实体表示的字节范围。取值参考 Range首部
Content-Type ——实体类型。

(4.3)实体缓存首部:通用的缓存首部说明了如何或什么时候进行缓存。实体的缓存首部提供了被缓存实体有关的信息。

ETag —— 与此实体相关的实体标记。
取值的内容有:
<唯一标识符 示例:ETag: “33a64df551425fcc55e4d42a148795d9f25f89d4”>
.
Expires —— 实体过时日期。
取值内容有:
<星期>, <日> <月> <年> <时>:<分>:<秒> GMT GMT
示例:Wed, 21 Oct 2015 07:28:00 GMT
.
Last-Modified —— 这个实体最后一次被修改的日期和时间。
取值内容有:
<星期>, <日> <月> <年> <时>:<分>:<秒> GMT GMT
示例:Wed, 21 Oct 2015 07:28:00 GMT

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值