HTTP headers

551 阅读6分钟

这是我参与8月更文挑战的第1天,活动详情查看:8月更文挑战

请求方式

方式场景
GET向Web服务器请求一个文件
POST向Web服务器发送数据让Web服务器进行处理
PUT向Web服务器发送数据并存储在Web服务器内部
HEAD检查一个对象是否存在
DELETE从Web服务器上删除一个文件
CONNECT对通道提供支持
TRACE跟踪到服务器的路径
OPTIONS查询Web服务器的性能

Host

指明了请求将要发送到的服务器主机名和端口号

User-Agent

User-Agent中文名为用户代理,简称 UA,它是一个特殊字符串头,使得服务器能够识别客户使用的操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等。一些网站常常通过判断 UA 来给不同的操作系统、不同的浏览器发送不同的页面,因此可能造成某些页面无法在某个浏览器中正常显示,但通过伪装 UA 可以绕过检测。

操作系统标识: FreeBSD  

X11; FreeBSD (version no.) i386  X11; FreeBSD (version no.) AMD64  


Linux  


X11; Linux ppc  X11; Linux ppc64  X11; Linux i686  X11; Linux x86_64  


Mac


Macintosh; PPC Mac OS X  Macintosh; Intel Mac OS X  


Solaris  


X11; SunOS i86pc  X11; SunOS sun4u  


Windows:  


Windows NT 6.1 对应操作系统 windows 7  Windows NT 6.0 对应操作系统 windows vista  Windows NT 5.2 对应操作系统 windows 2003  Windows NT 5.1 对应操作系统 windows xp  Windows NT 5.0 对应操作系统 windows 2000  Windows ME   Windows 98


加密等级标识


N: 表示无安全加密  I: 表示弱安全加密  U: 表示强安全加密

实例: User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11

Accept

指定客户端能够接收的内容类型,内容类型中的先后次序表示客户端接收的先后次序。

例如:

Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,/;q=0.5

Accept-Language

Accept-Language 请求头允许客户端声明它可以理解的自然语言,以及优先选择的区域方言。借助内容协商机制,服务器可以从诸多备选项中选择一项进行应用, 并使用 Content-Language 应答头通知客户端它的选择。

*:任意语言;"*" 表示通配符(wildcard)

;q= (q-factor weighting): 此值代表优先顺序,用相对质量价值表示,又称为权重

示例:

Accept-Language: de


Accept-Language: de-CH


Accept-Language: en-US,en;q=0.5


Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2

Accept-Charset

请求头用来告知(服务器)客户端可以处理的字符集类型。 借助内容协商机制,服务器可以从诸多备选项中选择一项进行应用, 并使用Content-Type 应答头通知客户端它的选择。浏览器通常不会设置此项值,因为每种内容类型的默认值通常都是正确的,但是发送它会更有利于识别。

实例:

Accept-Charset: gb2312,utf-8;q=0.7,*;q=0.7

Content-Type

用于指示资源的MIME类型 media type

在响应中,Content-Type标头告诉客户端实际返回的内容的内容类型。浏览器会在某些情况下进行MIME查找,并不一定遵循此标题的值;

一般只有post提交时才需要设置该属性

实例:

Content-Type: text/html; charset=utf-8
Content-Type: multipart/form-data; boundary=something

常见的三种编码方式:

1.application/x-www-form-urlencoded

1.1: 最常见的POST提交数据方式。
1.2:原生form默认的提交方式(可以使用enctype指定提交数据类型)。
1.3:在向服务器发送大量的文本、包含非ASCII字符的文本或二进制数据时这种编码方式效率很低

image.png

application/x-www-form-urlencoded 是最常用的一种请求编码方式,支持GET/POST等方法,所有数据变成键值对的形式 key1=value1&key2=value2的形式,并且特殊字符需要转义成utf-8编号,如空格会变成 %20;

默认的提交方式是 application/x-www-form-urlencoded 编码提交数据的,在chrome的network面板下,默认的请求体是被解析的。展示成formData的形式;

如上默认提交的 contentType为 application/x-www-form-urlencoded,此时提交的数据将会格式化成:
fname=kongzhi&age=30;

如果请求类型type是GET的话,那么格式化的字符串将直接拼接在url后发送到服务端; 如果请求类型是POST, 那么格式化的字符串将放在http body的Form Data中发送。

2.multipart/form-data

使用表单上传文件时,必须指定表单的 enctype属性值为 multipart/form-data. 请求体被分割成多部分,每部分使用 --boundary分割;

image.png

3.application/json

在http请求中,ContentType都是默认的值 application/x-www-form-urlencoded, 这种编码格式的特点是:name/value值对,
每组之间使用&连接,而name与value之间是使用 = 连接,比如 key=xxx&name=111&password=123456; 键值对一般的情况下是没有什么问题的,但是如果参数是复杂的对象,继续用这种编码形式就不太合适,这个时候,用application/json将数据通过json的形式发送给服务器就比较合适,json的形式的优点是它可以传递结构复杂的数据形式

image.png

Connection

表示是否需要持久连接,http1.1默认为持久连接

实例:

Connection: keep-alive

Keep-Alive

显示此HTTP连接的Keep-Alive时间。使客户端到服务器端的连接持续有效,当出现对服务器的后继请求时,Keep-Alive功能避免了建立或者重新建立连接。

以前HTTP请求是一站式连接,从HTTP/1.1协议之后,就有了长连接,即在规定的Keep-Alive时间内,连接是不会断开的。

实例:

Keep-Alive: 300

cookie

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

Referer

HTTP Referer是[header]的一部分,当[浏览器]向web[服务器]发送请求的时候,一般会带上Referer,告诉服务器该网页是从哪个页面链接过来的,服务器因此可以获得一些信息用于处理

Responses 部分

Header解释示例
Accept-Ranges表明服务器是否支持指定范围请求及哪种类型的分段请求Accept-Ranges: bytes
Age从原始服务器到代理缓存形成的估算时间(以秒计,非负)Age: 12
Allow对某网络资源的有效的请求行为,不允许则返回405Allow: GET, HEAD
Cache-Control告诉所有的缓存机制是否可以缓存及哪种类型Cache-Control: no-cache(不缓存)
Content-Encodingweb服务器支持的返回内容压缩编码类型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请求变量的实体标签的当前值 (Last-Modified和ETags请求的http报头一起使用,用于判断页面是否已经被修改,是否需要返回