HTTP协议请求信息详解

一般HTTP消息包括客户机向服务器的请求消息和服务器向客户机的响应消息。客户端向服务器发送一个请求,请求头包含请求的方法、URI、协议版本、以及包含请求修饰符、客户信息和内容的相似于MIME的消息结构。服务器以一个状态行做为响应,相应的内容包括消息协议的版本,成功或者错误编码加上包含服务器信息、实体元信息以及可能的实体内容。javascript

blob.png 看懂谷歌浏览器HTTP协议请求头信息 其余

Http协议定义了不少与服务器交互的方法,最基本的有4种,分别是GET、POST、PUT、DELETE。一个URL地址用于描述一个网络上的资源,而HTTP中的GET、POST、PUT、 DELETE就对应着对这个资源的查、改、增、删4个操做,咱们最多见的就是GET和POST了。GET通常用于获取/查询资源信息,而POST通常用于更新资源信息。html

1、HTTP头信息解读

  HTTP的头域包括通用头、请求头、响应头和实体头四个部分。每一个头域由一个域名,冒号(:)和域值三部分组成。前端

  通用头部:是客户端和服务器均可以使用的头部,能够在客户端、服务器和其余应用程序之间提供一些很是有用的通用功能,如Date头部。java

  请求头部:是请求报文特有的,它们为服务器提供了一些额外信息,好比客户端但愿接收什么类型的数据,如Accept头部。web

  响应头部:便于客户端提供信息,好比,客服端在与哪一种类型的服务器进行交互,如Server头部。apache

  实体头部:指的是用于应对实体主体部分的头部,好比,能够用实体头部来讲明实体主体部分的数据类型,如Content-Type头部。后端

     一、HTTP通用头

  通用头域包含请求和响应消息都支持的头域,通用头域包含缓存头部Cache-Control、Pragma及信息性头部Connection、Date、Transfer-Encoding、Update、Via。浏览器

  一、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:指示对于单个用户的整个或部分响应消息,不能被共享缓存处理,只能用缓存内容回应先前请求该内容的那个用户。

  二、Pragma

  Pragma头域用来包含实现特定的指令,最经常使用的是Pragma:no-cache。在HTTP/1.1协议中,它的含义和Cache- Control:no-cache相同。

  三、Connection

  Connection表示是否须要持久链接。若是Servlet看到这里的值为“Keep-Alive”,或者看到请求使用的是HTTP 1.1(HTTP 1.1默认进行持久链接),它就能够利用持久链接的优势,当页面包含多个元素时(例如Applet,图片),显著地减小下载所须要的时间。要实现这一点,Servlet须要在应答中发送一个Content-Length头,最简单的实现方法是:先把内容写入ByteArrayOutputStream,而后在正式写出内容以前计算它的大小。

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

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

  Keep-Alive:若是浏览器请求保持链接,则该头部代表但愿 WEB 服务器保持链接多长时间(秒),如Keep-Alive:300。

  四、Date

  Date头域表示消息发送的时间,服务器响应中要包含这个头部,由于缓存在评估响应的新鲜度时要用到,其时间的描述格式由RFC822定义。例如,Date:Mon, 31 Dec 2001 04:25:57 GMT。Date描述的时间表示世界标准时,换算成本地时间,须要知道用户所在的时区。

  五、Transfer-Encoding

  WEB 服务器代表本身对本响应消息体(不是消息体里面的对象)做了怎样的编码,好比是否分块(chunked),例如:Transfer-Encoding: chunked

  六、Upgrade

  它能够指定另外一种可能彻底不一样的协议,如HTTP/1.1客户端能够向服务器发送一条HTTP/1.0请求,其中包含值为“HTTP/1.1”的Update头部,这样客户端就能够测试一下服务器是否也使用HTTP/1.1了。

  七、Via

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

  当客户端请求到达第一个代理服务器时,该服务器会在本身发出的请求里面添加 Via 头部,并填上本身的相关信息,当下一个代理服务器 收到第一个代理服务器的请求时,会在本身发出的请求里面复制前一个代理服务器的请求的Via头部,并把本身的相关信息加到后面,以此类推,当 OCS 收到最后一个代理服务器的请求时,检查 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。对请求头域的扩展要求通信双方都支持,若是存在不支持的请求头域,通常将会做为实体头域处理。

  八、Accept

  告诉WEB服务器本身接受什么介质类型,*/* 表示任何类型,type/* 表示该类型下的全部子类型,type/sub-type。

  九、Accept-Charset

  浏览器告诉服务器本身能接收的字符集。

  十、Accept-Encoding

  浏览器申明本身接收的编码方法,一般指定压缩方法,是否支持压缩,支持什么压缩方法(gzip,deflate)。

  十一、Accept-Language

  浏览器申明本身接收的语言。语言跟字符集的区别:中文是语言,中文有多种字符集,好比big5,gb2312,gbk等等。

  十二、Authorization

  当客户端接收到来自WEB服务器的 WWW-Authenticate 响应时,用该头部来回应本身的身份验证信息给WEB服务器。

  1三、If-Match

  若是对象的 ETag 没有改变,其实也就意味著对象没有改变,才执行请求的动做,获取文档。

  1四、If-None-Match

  若是对象的 ETag 改变了,其实也就意味著对象也改变了,才执行请求的动做,获取文档。

  1五、If-Modified-Since

  若是请求的对象在该头部指定的时间以后修改了,才执行请求的动做(好比返回对象),不然返回代码304,告诉浏览器该对象没有修改。例如:If-Modified-Since:Thu, 10 Apr 2008 09:14:42 GMT

  1六、If-Unmodified-Since

  若是请求的对象在该头部指定的时间以后没修改过,才执行请求的动做(好比返回对象)。

  1七、If-Range

  浏览器告诉 WEB 服务器,若是我请求的对象没有改变,就把我缺乏的部分给我,若是对象改变了,就把整个对象给我。浏览器经过发送请求对象的ETag 或者本身所知道的最后修改时间给 WEB 服务器,让其判断对象是否改变了。老是跟 Range 头部一块儿使用。

  1八、Range

  浏览器(好比 Flashget 多线程下载时)告诉 WEB 服务器本身想取对象的哪部分。例如:Range: bytes=1173546

  1九、Proxy-Authenticate

  代理服务器响应浏览器,要求其提供代理身份验证信息。

  20、Proxy-Authorization

  浏览器响应代理服务器的身份验证请求,提供本身的身份信息。

  2一、Host

  客户端指定本身想访问的WEB服务器的域名/IP 地址和端口号。如Host:rss.sina.com.cn

  2二、Referer

  浏览器向WEB 服务器代表本身是从哪一个网页URL得到点击当前请求中的网址/URL,例如:Referer:http://www.ecdoer.com/

  2三、User-Agent

  浏览器代表本身的身份(是哪一种浏览器)。例如:User-Agent:Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN;rv:1.8.1.14) Gecko/20080404 Firefox/2.0.0.14

  三、HTTP响应头

  响应头向客户端提供一些额外信息,好比谁在发送响应、响应者的功能,甚至与响应相关的一些特殊指令。这些头部有助于客户端处理响应,并在未来发起更好的请求。响应头域包含Age、Location、Proxy-Authenticate、Public、Retry- After、Server、Vary、Warning、WWW-Authenticate。对响应头域的扩展要求通信双方都支持,若是存在不支持的响应头域,通常将会做为实体头域处理。

  2四、Age

  当代理服务器用本身缓存的实体去响应请求时,用该头部代表该实体从产生到如今通过多长时间了。

  2五、Server

  WEB 服务器代表本身是什么软件及版本等信息。例如:Server:Apache/2.0.61 (Unix)

  2六、Accept-Ranges

  WEB服务器代表本身是否接受获取其某个实体的一部分(好比文件的一部分)的请求。bytes:表示接受,none:表示不接受。

  2七、Vary

  WEB服务器用该头部的内容告诉 Cache 服务器,在什么条件下才能用本响应所返回的对象响应后续的请求。假如源WEB服务器在接到第一个请求消息时,其响应消息的头部为:Content-Encoding: gzip; Vary: Content-Encoding,那么Cache服务器会分析后续请求消息的头部,检查其Accept-Encoding,是否跟先前响应的Vary头部值一致,便是否使用相同的内容编码方法,这样就能够防止Cache服务器用本身Cache 里面压缩后的实体响应给不具有解压能力的浏览器。例如:Vary:Accept-Encoding。

     四、HTTP实体头

  实体头部提供了有关实体及其内容的大量信息,从有关对象类型的信息,到可以对资源使用的各类有效的请求方法。总之,实体头部能够告知接收者它在对什么进行处理。请求消息和响应消息均可以包含实体信息,实体信息通常由实体头域和实体组成。实体头域包含关于实体的原信息,实体头包括信息性头部Allow、Location,内容头部Content-Base、Content-Encoding、Content-Language、Content-Length、Content-Location、Content-MD五、Content-Range、Content-Type,缓存头部Etag、Expires、Last-Modified、extension-header。

  2八、Allow

  服务器支持哪些请求方法(如GET、POST等)。

  2九、Location

  表示客户应当到哪里去提取文档,用于将接收端定位到资源的位置(URL)上。Location一般不是直接设置的,而是经过HttpServletResponse的sendRedirect方法,该方法同时设置状态代码为302。

  30、Content-Base

  解析主体中的相对URL时使用的基础URL。

  3一、Content-Encoding

  WEB服务器代表本身使用了什么压缩方法(gzip,deflate)压缩响应中的对象。例如:Content-Encoding:gzip

  3二、Content-Language

  WEB 服务器告诉浏览器理解主体时最适宜使用的天然语言。

  3三、Content-Length

  WEB服务器告诉浏览器本身响应的对象的长度或尺寸,例如:Content-Length: 26012

  3四、Content-Location

  资源实际所处的位置。

  3五、Content-MD5

  主体的MD5校验和。

  3六、Content-Range

  实体头用于指定整个实体中的一部分的插入位置,他也指示了整个实体的长度。在服务器向客户返回一个部分响应,它必须描述响应覆盖的范围和整个实体长度。通常格式: Content-Range:bytes-unitSPfirst-byte-pos-last-byte-pos/entity-legth。例如,传送头500个字节次字段的形式:Content-Range:bytes0- 499/1234若是一个http消息包含此节(例如,对范围请求的响应或对一系列范围的重叠请求),Content-Range表示传送的范围,Content-Length表示实际传送的字节数。

  3七、Content-Type

  WEB 服务器告诉浏览器本身响应的对象的类型。例如:Content-Type:application/xml

  3八、Etag

  就是一个对象(好比URL)的标志值,就一个对象而言,好比一个html文件,若是被修改了,其Etag也会别修改,因此,ETag的做用跟Last-Modified的做用差很少,主要供WEB服务器判断一个对象是否改变了。好比前一次请求某个html文件时,得到了其 ETag,当此次又请求这个文件时,浏览器就会把先前得到ETag值发送给WEB服务器,而后WEB服务器会把这个ETag跟该文件的当前ETag进行对比,而后就知道这个文件有没有改变了。

  3九、Expires

  WEB服务器代表该实体将在何时过时,对于过时了的对象,只有在跟WEB服务器验证了其有效性后,才能用来响应客户请求。是 HTTP/1.0 的头部。例如:Expires:Sat, 23 May 2009 10:02:12 GMT

  40、Last-Modified

  WEB服务器认为对象的最后修改时间,好比文件的最后修改时间,动态页面的最后产生时间等等。例如:Last-Modified:Tue, 06 May 2008 02:42:43 GMT

2、HTTP Request的Header信息

 

 一、HTTP请求方式

 

说明:主要使用到“GET”和“POST”。

  实例: POST /test/tupian/cm HTTP/1.1

  分红三部分:

  (1)POST:HTTP请求方式

  (2)/test/tupian/cm:请求Web服务器的目录地址(或者指令)

  (3)HTTP/1.1: URI(Uniform Resource Identifier,统一资源标识符)及其版本

  备注:在Ajax中,对应method属性设置。

  二、Host

  说明:请求的web服务器域名地址

  三、User-Agent

  说明:HTTP客户端运行的浏览器类型的详细信息。经过该头部信息,web服务器能够判断到当前HTTP请求的客户端浏览器类别。

  实例: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

  备注:在Prototyp(1.5)的Ajax代码封装中,将Accept默认设置为“text/javascript, text/html, application/xml, text/xml, */*”。这是由于Ajax默认获取服务器返回的Json数据模式。在Ajax代码中,可使用XMLHttpRequest 对象中setRequestHeader函数方法来动态设置这些Header信息。

  五、Accept-Language

  说明:指定HTTP客户端浏览器用来展现返回信息所优先选择的语言。

  实例:Accept-Language: zh-cn,zh;q=0.5 这里默认为中文。

  六、Accept-Encoding

  说明:指定客户端浏览器能够支持的web服务器返回内容压缩编码类型。表示容许服务器在将输出内容发送到客户端之前进行压缩,以节约带宽。而这里设置的就是客户端浏览器所可以支持的返回压缩格式。

  实例:Accept-Encoding: gzip,deflate

  备注:其实在百度不少产品线中,apache在给客户端返回页面数据以前,将数据以gzip格式进行压缩。

  七、Accept-Charset

  说明:浏览器能够接受的字符编码集。

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

  八、Content-Type

  说明:显示此HTTP请求提交的内容类型。通常只有post提交时才须要设置该属性。

  实例:Content-type: application/x-www-form-urlencoded;charset:UTF-8

  备注:有关Content-Type属性值能够以下两种编码类型:

  (1)“application/x-www-form-urlencoded”: 表单数据向服务器提交时所采用的编码类型,默认的缺省值就是“application/x-www-form-urlencoded”。 然而,在向服务器发送大量的文本、包含非ASCII字符的文本或二进制数据时这种编码方式效率很低。

  (2)“multipart/form-data”: 在文件上载时,所使用的编码类型应当是“multipart/form-data”,它既能够发送文本数据,也支持二进制数据上载。

  当提交为单单数据时,可使用“application/x-www-form-urlencoded”;当提交的是文件时,就须要使用“multipart/form-data”编码类型。

  在Content-Type属性当中仍是指定提交内容的charset字符编码。通常不进行设置,它只是告诉web服务器post提交的数据采用的何种字符编码。

  通常在开发过程,是由前端工程与后端UI工程师商量好使用什么字符编码格式来post提交的,而后后端ui工程师按照固定的字符编码来解析提交的数据。因此这里设置的charset没有多大做用。

  九、Connection

  说明:表示是否须要持久链接。若是web服务器端看到这里的值为“Keep-Alive”,或者看到请求使用的是HTTP 1.1(HTTP 1.1默认进行持久链接),它就能够利用持久链接的优势,当页面包含多个元素时(例如Applet,图片),显著地减小下载所须要的时间。要实现这一点, web服务器须要在返回给客户端HTTP头信息中发送一个Content-Length(返回信息正文的长度)头,最简单的实现方法是:先把内容写入ByteArrayOutputStream,然 后在正式写出内容以前计算它的大小。

  实例:Connection: keep-alive

  十、Keep-Alive

  说明:显示此HTTP链接的Keep-Alive时间。使客户端到服务器端的链接持续有效,当出现对服务器的后继请求时,Keep-Alive功能避免了创建或者从新创建链接。之前HTTP请求是一站式链接,从HTTP/1.1协议以后,就有了长链接,即在规定的Keep-Alive时间内,链接是不会断开的。

  实例:Keep-Alive: 300

  十一、cookie

  说明:HTTP请求发送时,会把保存在该请求域名下的全部cookie值一块儿发送给web服务器。

  十二、Referer

  说明:包含一个URL,用户从该URL表明的页面出发访问当前请求的页面

        1三、HTTP Response的Header信息

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

 

        1四、http返回错误码

  HTTP响应码响应码由三位十进制数字组成,它们出如今由HTTP服务器发送的响应的第一行。响应码分五种类型,由它们的第一位数字表示:

  1xx:信息,请求收到,继续处理

  2xx:成功,行为被成功地接受、理解和采纳

  3xx:重定向,为了完成请求,必须进一步执行的动做

  4xx:客户端错误,请求包含语法错误或者请求没法实现

  5xx:服务器错误,服务器不能实现一种明显无效的请求

  下表显示每一个响应码及其含义:

100 继续  101 分组交换协 200 OK 201 被建立  202 被采纳
203 非受权信息  204 无内容 205 重置内容 206 部份内容 300 多选项
301 永久地传送 302 找到  303 参见其余 304 未改动  305 使用代理
307 暂时重定向 400 错误请求 401 未受权 402 要求付费 403 禁止
404 未找到 405 不容许的方法 406 不被采纳 407 要求代理受权 408 请求超时
409 冲突 410 过时的 411 要求的长度 412 前提不成立 413 请求实例太大
414 请求URI太大  415 不支持的媒体类型 416 没法知足的请求范围 417 失败的预期 500 内部服务器错误
501 未被使用 502 网关错误 503 不可用的服务 504 网关超时 505 HTTP版本未被支持
相关文章
相关标签/搜索