HTTP协议关于Header

Posted 互联网测试QA

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HTTP协议关于Header相关的知识,希望对你有一定的参考价值。

        HTTP header中包含了很多协议的信息,其分为请求头和响应头两类

一、HTTP请求

        HTTP请求是客户端往服务端发送请求动作,告知服务器自己的要求。

        HTTP请求由状态行、请求头、请求正文三部分组成:

1、状态行:包括请求方式Method、资源路径URL、协议版本Version;

2、请求头:包括一些访问的域名、用户代理、Cookie等信息;

3、请求正文:就是HTTP请求的数据

        请求方式Method一般有GET、POST、PUT、DELETE,含义分别是获取、修改、上传、删除(后续文章详细介绍)

        下面以GET请求头为例,详细介绍下各个信息的含义:

1、Cache :指定请求和响应遵循的缓存机制,可填写Cache-Control: no-cache

2、Accept:指定客户端能够接收的内容类型

        Encoding:指定浏览器可以支持的web服务器返回内容压缩编码类型

        Language:浏览器可接受的语言

        User-Agent:包含发出请求的用户信息

3、Cookie

4、Upgrade-Insecure-Requests:如果在https的页面需要加载http的资源,那么浏览器就会报错或者提示,为了促进用户升级协议,同时不需要网站开发者劳师动众地把整个网站的http资源改成https资源,chrome增加一个Upgrade-Insecure-Requests: 1 ,告诉服务器,浏览器可以处理https协议,然后服务器返回Content-Security-Policy: upgrade-insecure-requests头,或者通过meta头设置,告诉浏览器,对于页面的http资源,请求时可以自动升级到https

5、Connection 表示是否需要持久连接。(HTTP 1.1默认进行持久连接)

        Host:域名


POST请求样例如下:

与GET比较,可能会多两个信息:

1、X-Requested-With:用来判断一个请求是传统的HTTP请求,还是Ajax请求

2、EntityContent):请求的与实体对应的MIME信息,json数据  UTF-8编码


二、HTTP响应

        服务器收到了客户端发来的HTTP请求后,根据HTTP请求中的动作要求,服务端做出具体的动作,将结果回应给客户端,称为HTTP响应。

        HTTP响应由三部分组成:状态行、响应头、响应正文;

状态行:包括协议版本Version、状态码Status Code、回应短语;

响应头:包括搭建服务器的软件,发送响应的时间,回应数据的格式等信息;

响应正文:就是响应的具体数据。

        备注:我们主要关心并且能够在客户端浏览器看得到的是三位数的状态码,不同的状态码代表不同的含义,这在之前的文章已经有详细的说明。

        下面就GET接口响应为例:

1、Cache-Control :告诉所有的缓存机制是否可以缓存及哪种类型

2、Date:原始服务器消息发出的时间

3、Vary:告诉下游代理是使用缓存响应还是从原始服务器请求

4、ETag:请求变量的实体标签的当前值

5、Cache-Status: BYPASS:跟NG有关 $upstream_cache_status在响应头中添加缓存命中的状态

        HIT:缓存命中,直接返回缓存中内容,不回源到后端。

        MISS:缓存未命中,回源到后端获取最新的内容。

        EXPIRED:缓存命中但过期了,回源到后端获取最新的内容。

        UPDATING:缓存已过期但正在被别的nginx Worker进程更新,配置了proxy_cache_use_stale updating指令时会存在该状态。

        STALE:缓存已过期,但因后端服务出现了问题(比如后端服务挂了)返回过期的响应,配置了如proxy_cache_use_stale error timeout指令后会出现该状态。

        REVALIDATED:启用proxy_cache_revalidate指令后,当缓存内容过期时,Nginx通过一次if-modified-since的请求头去验证缓存内容是否过期,此时会返回该状态。

        BYPASS:proxy_cache_bypass指令有效时,强制回源到后端获取内容,即使已经缓存了。

6、Server:web服务器软件名称

7、X-Powered-By:如果你用的node.js express框架,那么X-Powered-By就会显示Express

8、Transfer-Encoding :文件传输编码




附:详细信息解析

Requests部分

Header

解释

示例

Accept

指定客户端能够接收的内容类型

Accept: text/plain, text/html

Accept-Charset

浏览器可以接受的字符编码集。

Accept-Charset: iso-8859-5

Accept-Encoding

指定浏览器可以支持的web服务器返回内容压缩编码类型。

Accept-Encoding: compress, gzip

Accept-Language

浏览器可接受的语言

Accept-Language: en,zh

Accept-Ranges

可以请求网页实体的一个或者多个子范围字段

Accept-Ranges: bytes

Authorization

HTTP授权的授权证书

Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==

Cache-Control

指定请求和响应遵循的缓存机制

Cache-Control: no-cache

Connection

表示是否需要持久连接。(HTTP 1.1默认进行持久连接)

Connection: close

Cookie

HTTP请求发送时,会把保存在该请求域名下的所有cookie值一起发送给web服务器。

Cookie: $Version=1; Skin=new;

Content-Length

请求的内容长度

Content-Length: 348

Content-Type

请求的与实体对应的MIME信息

Content-Type: application/x-www-form-urlencoded

Date

请求发送的日期和时间

Date: Tue, 15 Nov 2010 08:12:31 GMT

Expect

请求的特定的服务器行为

Expect: 100-continue

From

From: user@email.com

Host

指定请求的服务器的域名和端口号

Host: www.zcmhi.com

If-Match

只有请求内容与实体相匹配才有效

If-Match: “737060cd8c284d8af7ad3082f209582d”

If-Modified-Since

如果请求的部分在指定时间之后被修改则请求成功,未被修改则返回304代码

If-Modified-Since: Sat, 29 Oct 2010 19:43:31 GMT

If-None-Match

如果内容未改变返回304代码,参数为服务器先前发送的Etag,与服务器回应的Etag比较判断是否改变

If-None-Match: “737060cd8c284d8af7ad3082f209582d”

If-Range

如果实体未改变,服务器发送客户端丢失的部分,否则发送整个实体。参数也为Etag

If-Range: “737060cd8c284d8af7ad3082f209582d”

If-Unmodified-Since

只在实体在指定时间之后未被修改才请求成功

If-Unmodified-Since: Sat, 29 Oct 2010 19:43:31 GMT

Max-Forwards

限制信息通过代理和网关传送的时间

Max-Forwards: 10

Pragma

用来包含实现特定的指令

Pragma: no-cache

Proxy-Authorization

连接到代理的授权证书

Proxy-Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==

Range

只请求实体的一部分,指定范围

Range: bytes=500-999

Referer

Referer: http://www.zcmhi.com/archives/71.html

TE

客户端愿意接受的传输编码,并通知服务器接受接受尾加头信息

TE: trailers,deflate;q=0.5

Upgrade

向服务器指定某种传输协议以便服务器进行转换(如果支持)

Upgrade: HTTP/2.0, SHTTP/1.3, IRC/6.9, RTA/x11

User-Agent

User-Agent的内容包含发出请求的用户信息

User-Agent: Mozilla/5.0 (Linux; X11)

Via

Via: 1.0 fred, 1.1 nowhere.com (Apache/1.1)

Warning

关于消息实体的警告信息

Warn: 199 Miscellaneous warning

Responses 部分 

Header

解释

示例

Accept-Ranges

表明服务器是否支持指定范围请求及哪种类型的分段请求

Accept-Ranges: bytes

Age

从原始服务器到代理缓存形成的估算时间(以秒计,非负)

Age: 12

Allow

对某网络资源的有效的请求行为,不允许则返回405

Allow: GET, HEAD

Cache-Control

告诉所有的缓存机制是否可以缓存及哪种类型

Cache-Control: no-cache

Content-Encoding

web服务器支持的返回内容压缩编码类型。

Content-Encoding: gzip

Content-Language

响应体的语言

Content-Language: en,zh

Content-Length

响应体的长度

Content-Length: 348

Content-Location

Content-Location: /index.htm

Content-MD5

返回资源的MD5校验值

Content-MD5: Q2hlY2sgSW50ZWdyaXR5IQ==

Content-Range

在整个返回体中本部分的字节位置

Content-Range: bytes 21010-47021/47022

Content-Type

返回内容的MIME类型

Content-Type: text/html; charset=utf-8

Date

原始服务器消息发出的时间

Date: Tue, 15 Nov 2010 08:12:31 GMT

ETag

请求变量的实体标签的当前值

ETag: “737060cd8c284d8af7ad3082f209582d”

Expires

响应过期的日期和时间

Expires: Thu, 01 Dec 2010 16:00:00 GMT

Last-Modified

请求资源的最后修改时间

Last-Modified: Tue, 15 Nov 2010 12:45:26 GMT

Location

用来重定向接收方到非请求URL的位置来完成请求或标识新的资源

Location: http://www.zcmhi.com/archives/94.html

Pragma

包括实现特定的指令,它可应用到响应链上的任何接收方

Pragma: no-cache

Proxy-Authenticate

它指出认证方案和可应用到代理的该URL上的参数

Proxy-Authenticate: Basic

refresh

应用于重定向或一个新的资源被创造,在5秒之后重定向(由网景提出,被大部分浏览器支持)

 

 Refresh: 5; url=

http://www.zcmhi.com/archives/94.html

Retry-After

如果实体暂时不可取,通知客户端在指定时间之后再次尝试

Retry-After: 120

Server

web服务器软件名称

Server: Apache/1.3.27 (Unix) (Red-Hat/Linux)

Set-Cookie

设置Http Cookie

Set-Cookie: UserID=JohnDoe; Max-Age=3600; Version=1

Trailer

指出头域在分块传输编码的尾部存在

Trailer: Max-Forwards

Transfer-Encoding

文件传输编码

Transfer-Encoding:chunked

Vary

告诉下游代理是使用缓存响应还是从原始服务器请求

Vary: *

Via

告知代理客户端响应是通过哪里发送的

Via: 1.0 fred, 1.1 nowhere.com (Apache/1.1)

Warning

警告实体可能存在的问题

Warning: 199 Miscellaneous warning

WWW-Authenticate

表明客户端请求实体应该使用的授权方案

WWW-Authenticate: Basic


以上是关于HTTP协议关于Header的主要内容,如果未能解决你的问题,请参考以下文章

关于HTTP协议

关于HTTP协议

关于http协议

关于http协议

关于HTTP协议 (转)

关于HTTP协议(转)