程序员人生 网站导航

HTTP报文

栏目:互联网时间:2016-07-14 08:09:22

1.报文流

http报文是在http利用程序之间发送的数据块。

报文活动方向:

#1:报文流入源端服务器报文流入源服务器,工作完成以后,会流回用户的Agent代理中。

#2:报文向下游活动:不论是要求报文还是响应报文,所有报文都会向下游活动。

2.报文组成部份


3部份组成报文:

#1:起始行:报文描写。ASCII文本。

#2:首部:属性描写。ASCII文本。与起始行分隔符为CRLF(ASCII码13 、ASCII码10)

#3:主体:可选,数据主体。包括文本或2进制数据,也能够为空。

2.1.报文语法

http报文可以分为俩类:要求报文、响应报文。


#1:要求报文的格式:

<method> <request-URL> <version> <headers> <entity-body>
#2:响应报文的格式:

<version> <status> <reason-phrase> <headers> <entity-body>

#方法(method):

客户端希望服务器对资源履行的动作。如:GET、HEAD、POST...

GET:经常使用,通经常使用于要求服务器发送某个资源。


HEAD:服务器只返回首部,不会返回实体的主体部份。使用HEAD可以:1.在不获得资源的情况下了解资源;2.查看响应的状态码,看看对象是不是存在;3.测试资源是不是被修改了


PUT:服务器写入文档。让服务器用要求的主体部份来创建或替换1个由所要求的URL命名的新文档。


POST:服务器发送数据,通常支持html的表单。


TRACE:要求报文不能带有实体的主体部份。TRACE要求会在目的服务器端发起1个“环回”诊断。要求可能要穿过防火墙、代理、网关或其他1些利用程序。目的服务器会弹回1条TRACE响应,并在响应主体上携带收到的原始要求报文。目的是查看所有中间http利用程序组成的要求/响应链上,原始报文是不是被修改或损坏。


OPTION:要求服务器告知其支持的各种功能。


DELETE:要求服务器删除指定URL所指定的资源。



#要求(equest-URL):

命名了所要求资源,或URL路径组件的完善URL

#版本(version):

报文所使用的HTTP版本。

格式:HTTP/<major>.<minor>

note:主要版本号(major)和次要版本号(minor)都是整数。

#状态码(status):

3位数,描写要求进程所产生的情况。

100~199:信息性状态码

200~299:成功状态码

300~399:重定向状态码

400~499:客户端毛病状态码

500~599:服务端毛病状态码

状态码
状态码 缘由短语 含义
100 Continue 收到要求的起始部份,客户端应当继续要求
101 Switching Protocols 服务器正根据客户真个唆使将协议切换成Update首部列出的协议
200 OK 服务器已成功处理要求
201 Created 对需要服务器创建对象的要求来讲,资源已创建终了
202 Accepted 要求已接收,但服务器还没有处理
203 Non-Acthoritative Information 服务器已将事务成功处理,只是实体首部包括的信息不是来自原始服务器,而是来自资源的副本
204 No Content 响应报文包括1些首部和1个状态行,但不包括实体的主体内容。
205 Reset Content 阅读器应当充值当前页面上的html表单
206 Partial Content 部份要求成功
300 Multiple Choices 客户端要求了实际指向多个资源的URL。这个代码合适1个选项类表1起返回的,然后用户就能够选择他希望使用的选项。
301 Moved Permanently 要求的URL已移走。响应中应当包括1个Location URL,说明资源现在所处的位置。
302 Found 类似于301
303 See Other 告知客户端应当用另外一个URL获得资源。这个新的URL位于响应报文的Location首部
304 Not Modified 客户端可以通过它们所包括的要求首部发起条件要求。这个代码说明资源未产生变化。
305 Use Proxy 必须通过代理访问资源,代理的位置是在Location首部中给出的。
306 (未用) 这个状态码当前并未使用
307 Temporary Redirect 类似于301
400 Bad request 告知客户端它发送了1条异常要求
401 Unauthorized 与适当的首部1起返回,在客户端取得资源访问权之前,请它进行身份认证。
402 Payment Required 未使用
403 Forbidden 服务器谢绝了要求
404 Not Found 服务器没法找到所要求的URL
405 Method Not Allow 要求中有1个所要求的URI不支持的方法。响应中应当包括1个Allow首部,以告知客户端所要求的资源支持哪些方法。
406 Not Acceptable 客户端可以指定1些参数来讲明希望接受哪些类型的实体。服务器没有资源与客户端可接受的URL匹配时可以使用此代码
407 Proxy Authentication Required 类似于401,但用于需要进行资源认证的代理服务器
408 Request Timeout 如果客户端完成其要求时花费的时间太长,服务器可以回送这个状态码并关闭连接
409 Confict 发出的要求在资源上造成了1些冲突
410 Gone 服务器曾持有这些资源以外,与404类似
411 Lengh Required 服务器要求要求报文中包括Content-Lengh首部时会使用这个代码。发起的要求中若没有,服务器是不会接受此资源要求的。
412 Precondition Failed 如果客户端发起了1个条件要求,如果服务器没法满足其中的某个条件,就返回这个响应码。
413 Request Entity Too Large 客户端发送的实体主体部份比服务器能够或希望处理的要大
414 Request URI Too Long 客户端发送的要求所携带的要求URL超过了服务器能够或希望处理的长度
415 Unsupported Media Type 服务器没法理解或不支持客户端所发送的实体的内容类型
416 Request Range Not Statisfiable 要求报文要求的是某范围内的指定资源,但这个范围无效,或未得到满足
417 Expectation Fail 要求的Expect首部所包括了1个预期内容,但服务器没法满足
500 Internet Server Error 服务器遇到了1个毛病,使其没法为要求提供服务
501 Not Implement 服务器没法满足客户端要求的某个功能
502 Bad Gateway 作为代理或网管使用的服务器遇到了来自响应链中上游的没法响应
503 Service Unavailable 服务器目前没法为要求提供服务,但过1段时间就能够恢复服务
504 Gateway Timeout 类似于408,但响应来自网关或代理,此网关或代理在等待另外一台服务器的响应时出现了超时
505 HTTP Version Not Support 服务器收到的要求是以它不支持或不愿支持的协议版本表示的

#缘由短语(reson-phrase):

数字状态码的可读版本,包括行终止序列之前的所有文本。

缘由短语只对人类成心义。(HTTP/1.0 200 NOT OK) 和 (HTTP/1.0 200 OK)中缘由短语不1样,但都当作成功唆使处理。

#首部(headers):

0个或多个。

格式:{首部名}{:}{可选空格}{值}{CRLF}

通用首部:要求、响应报文都可使用的。

要求首部:要求报文特有。

响应首部:响应报文特有。

实体首部:用于应对实体的主体部份。

扩大首部:非标准的首部,由程序开发者创建。

首部名 类型 基本语法 例子 注释
Accept 要求首部   Accept: text/*, image/*
Accept: text/*, image/gif, image/jpeg; q=1
用于通知服务器可以接受哪些媒体类型。为了避免服务器有多重版本的媒体类型,还可以在首部字段中包括1个质量值(q值)列表,用于告知服务器它优选哪一种媒体类型。
”*“是用于通配媒体类型,比如”*/*“表示所有类型,”image/*“表示所有图片类型
Accept-Charset 要求首部 Accept-Charset:(charset | *) [";" "q" "= " qvalue] Accept-Charset: iso-latin⑴ 通知服务器它可以接受哪些字符集或哪些事优选字符集。当有多种字符集是,可以通过质量值告知服务器哪一个字符集是优选的。
如果没有"*",那末值字段中没有设置的所有字符集的q值都默许为0,这不包括指定的字符,它的默许值为1。
Accept-Encoding 要求首部 Accept-Encoding: (content-coding | "*") [";" "q" "=" qvalue] Accept-Encoding: gzip
Accept-Encoding: compress; q=0.5, gzip; q=1
客户端告知服务器它可以接受哪些编码方式。
Accept-Language 要求首部 Accept-Language: (((1*8ALPHA["-"1*8ALPHA] | "*")) [";" "q" "=" qvalue]) Accept-Language: en
Accept-Language: en;q=0.7, en-gb;q=0.5
通知服务器可接受或优选哪些语言。
Authorization 要求首部 Authorization: Authorization-scheme #Authorization-param Authorization: Basic YnJpYW4tdG90dHk6T3ch 由客户端发送的,用于向服务器回应自己的身份验证信息。收到401状态码,要求在要求中包括这个首部。
From 要求首部 From: mailbos From: dawn@163.com 说明要求来自何方。
Host 要求首部 Host: host [":" port] Host: www.dawn.com:80 提供客户端想要访问的哪台机器的因特网主机名和端口号。
If-Modified-Since 要求首部 If-Modified-Since: HTTP-date If-Modified-Since: Thu, 03 Oct 1997 17:15:00 GMT 用于发起条件要求。客户端可以GET方法去要求服务器上的资源,而响应则取决于客户端上次要求此资源以后,该资源是不是被修改过。如果没有被修改过,服务器会回送1条304状态码,则不会回送此资源。
If-Unmodified-Since 要求首部 If-Unmodified-Since: HTTP-date If-Unmodified-Since: Thu, 03 Oct 1997 17:15:00 GMT 用于发起条件要求。客户端可以GET方法去要求服务器上的资源,而响应则取决于客户端上次要求此资源以后,该资源是不是被修改过。如果没有被修改过,才会回送此资源。
Expect 要求首部 Expect: ("100-continue" | expectation-extension) Expect: 100-continue 告知服务器他们需求某种行动。与状态码100密切相干
If-Match 要求首部 If-Match: ("*" | entity-tag) If-Match: "11e92a⑷57b⑶1345aa" 服务器将对照If-Match首部的实体标记与资源当前的实体标记,如果匹配,就将对象返回。
If-None-Match 要求首部 If-None-Match: ("*" | entity-tag) If-None-Match: "11e92a⑷57b⑶1345aa" 服务器将对照If-Match首部的实体标记与资源当前的实体标记,如果不匹配,就将对象返
If-Range 要求首部 If-Range: (HTTP-date | entity-tag) If-Range: "11e92a⑷57b⑶1345aa"
If-Range: Thu, 03 Oct 1997 17:15:00 GMT
利用程序具有某范围内资源的副本,它对范围进行再校验,如果范围无效,要获得新的资源,在这类情况下使用这个首部。
Max-Forwards 要求首部 Max-Forwards: 1*DIGIT Max-Forwards: 5 与TRACE1并使用,以指定要求所经过的代理或其他中间节点的最大数目。
Pragma 要求首部 Pragma: pragma-directive Pragma: no-cache Pragma首部用于随报文传送1些指令,这些指令几近可以包括任何内容,但通常会用这些指令来控制缓存的行动。
Proxy-Authorization 要求首部 Proxy-Authorization: credentials Proxy-Authorization: Basic YnJpYW4tdG90dHk6T3ch 客户端用于响应Proxy-Authenticate质询。
Referer 要求首部 Referer: (absoluteURL | relativeURL) Referer: http://www.dawn.com/index.html 客户端要求中加入此首部,可使服务器知道客户端是从哪里取得其要求的URL。阅读器所做的工作相当简单。如果在主页A上点击1个链接,进入主页B,阅读器就会在要求中插入1个带有值A的Refer首部。只有你点击链接的时候阅读器才会插入Refer首部,自己输入的URL中不会包括此首部。
TE 要求首部 TE: ("trailers" | (transfer-extension[accept-params])) TE:
TE: chunked
用于说明客户端能否处理位于分块编码的响应拖挂中的首部。如果这个值为空,就只接受分块传输比啊那末。特定标记"trailers"说明分块响应中可以接受Trailer首部。
User-Agent 要求首部 User-Agent: (product | comment) User-Agent: Mozilla/4.0 (Compatible; MSIE 5.5; Windows NT 5.0) 值是利用程序的名称,可能还会有1个描写性注释。
Client-ip 扩大要求首部 Client-ip: ip-address Client-ip: 209.1.33.49 是1些比较老的客户端和代理使用的扩大首部,用于传输运行客户端程序的计算机IP地址。不安全。
Cookie 扩大要求首部   Cookie: ink=IUOKy59BC708378908CFF
89OE5573998A115
用于客户端辨认和跟踪的扩大首部。
Cookie2 扩大要求首部   Cookie2: $version="1" 用于客户端辨认和跟踪的扩大首部。Cookie2用于辨认要求发起者能够理解哪一种类型的Cookie。
UA-(CPU, Disp, OS, Color, Pixels) 扩大要求首部 "UA" "-" ("CPU" | "Disp" | "OS" | "Color" | "Pixels") ":" (cpu | screensize | os-name | display-color-depth) UA-CPU: X86
UA-Disp: 640, 480, 8
UA-OS: windows 95
UA-Color: color8
UA-Pixels: 640 X 480
提供了客户端机器的相干信息,以燕服务器更好地进行内容选择。
UA-CPU(客户真个CPU)、UA-Disp(客户端显示器的尺寸和色采深度)、UA-OS(客户端机器的操作系统)、UA-Color(客户端显示器的色采深度)、UA-Pixels(客户端显示器的尺寸)
X-Forwarded-for 扩大要求首部 X-Forwarded-for: addr X-Forwarded-for: 64.95.76.161 很多代理服务器(如Squid)会用这个首部来讲明某条要求都被转发了给谁。
         
Accept-Range 响应首部 Accept-Range: range-unit | none Accept-Range: none
Accept-Range: bytes
告知客户端是不是接受要求资源的某个范围。
Age 响应首部 Age: delta-seconds Age: 60 告知接受端响应已产生了多少时间,HTTP/1.1缓存必须发送的每条响应中都包括1个Age首部
Allow 响应首部 Allow: #Method Allow: GET, HEAD 通知客户端可以对特定资源使用那些HTTP方法,发送405响应,服务器必须包括Allow首部
Location 响应首部 Location: absoluteURL Location: http://www.dawn.com/ 服务器通过此首部将客户端导向某个资源的地址,这个资源可能在客户端最后1次要求后被移动过,也多是在对要求的响应中创建的。
Proxy-Authenticate 响应首部 Proxy-Authenticate: challenge Proxy-Authenticate: Basic realm="Super Scret Corporate FinancialDocument" 代理通过这个首部来质询发送要求的客户端,要求其对本身进行认证。如果1台HTTP/1.1代理服务器发送1条407响应,就必须包括此首部。
Public 响应首部 Public: HTTP-method Public: OPTIONS, GET, HEAD, TRACE, POST 服务器告知客户端它支持哪些方法。
Retry-After 响应首部 Retry-After: (HTTP-date | delta-seconds) Retry-After: Thu, 03 Oct 1997 17:15:00 GMT
Retry-After: 120
告知客户端甚么时候重新发送某资源的要求。此首部可以与503状态码配合使用,给出客户端可以重试其要求的具体日期。服务器还可以在将客户端重定向到资源时,通过这个首部通知客户端在对重定向的资源发送要求之前需要等待的时间。对创建动态资源的服务器来讲,这个首部非常有用。
Server 响应首部 Server: (product | comment) Server: Microsoft-Internet-Information-Server/1.0
Server: Websitepro/1.1f (s/n wpo-07d0)
Server: apache/1.2b6 via proxy gateway CERN-HTTPD/3.0 libwww/2.13
它为服务器提供了1种向客户端标识自己的方式。它的值就是服务器名字和1个可U型那的服务器注释。
Title 响应首部 Title: document-title Title: CNN Interactive 主要用于HTML页面,这些HTML页面有着服务器可使用的明确的标题标记。
Vary 响应首部 Vary: ("*" | field-name) Vary: User-Agent 通知客户端,在服务器真个协商中会使用那些来自客户端要求的首部。值是1个首部列表。
Warning 响应首部 Warning: warning-value Warning: 113 给出更多与要求进程中所产生情况相干的信息。HTTP/1.1规范中定义了几种正告代码:
101-响应过时了-响应报文已过期;
111-再验证失败-缓存没法抵达原始服务器造成了再验证失败;
112-断开连接操作-缓存到网络的连接被删除;
113-摸索性过期-新鲜性摸索过期时间大于24小时,就返回;
199-杂项正告-报文中可能包括为用户提供的额外信息,系统不能自动响应;
214-使用了转换-中间利用程序履行了任何会改变响应内容编码的转换;
299-持久杂项正告-毛病中可能包括1个主体部份,为用户提供了更多的信息,系统不能进行任何自动回应。
WWW-Authenticate 响应首部 WWW-Authenticate: chanllenge WWW-Authenticate: Basic realm="Your Private Travel Profile" 用于401响应,向客户端发布1个质询认证方案。
Set-Cookie 扩大响应首部 Set-Cookie: command Set-Cookie: lastorder=00183; path=/orders
Set-Cookie: private_id=519; secure
是Cookie首部的搭档
Set-Cookie2 扩大响应首部 Set-Cookie2: command Set-Cookie2: ID="29046"; Domain=".joes-hardware.com"
Set-Cookie2: color=blue
对Set-Cookie首部的扩大。
X-Cache 扩大响应首部   X-Cache: HIT Squid(代理服务器)用此首部通知客户端某个资源是不是可用。
         
Content-Base 实体首部 Content-Base: absoluteURL Content-Base: http://www.dawn.com/ 响应主体中解析的URL指定的基础URL。
Content-Encoding 实体首部 Content-Encoding: content-coding Content-Encoding: gzip
Content-Encoding: compress, gzip
告知客户端,服务器对内容履行过哪一种或哪些类型的编码,编码可使内容在发送响应前进行紧缩,有了这个信息,客户端就能够对报文进行解码。
Content-Language 实体首部 Content-Language: language-tag Content-Language: en
Content-Language: en, fr
告知客户端,应当理解哪一种自然语言。
Content-Length 实体首部 Content-Length: 1*DIGIT Content-Length: 2417 实体主体部份的长度。
Content-Location 实体首部 Content-Location: (absoluteURL | relativeURL) Content-Location: http://www.dawn.com/index.html 与报文的实体部份相对应的URL。
Content-MD5 实体首部 Content-MD5: md5-digest Content-MD5: Q2h1Y2sgSW51ZwDIAXR5IQ== 报文主体的MD5摘要。通过这个值可以端到端地检查数据,在检查传输进程中是不是对数据进行了无意的修改时非常有用。
Content-Range 实体首部   Content-Range: bytes 500⑼99 / 5400 要求传输某范围内的文档时,产生的结果有此首部给出。提供要求实体的原始实体内的范围,还给出了全部实体的长度。”*“代表未知。
Content-Type 实体首部 Content-Type: media-type Content-Type: text/html; charset=ios-latin⑴ 报文中的对象的媒体类型。
ETag 实体首部 ETag: entity-tag ETag: "11e92a⑷57b⑶1345aa"
ETag: W/"11e92a⑷57b⑶134b5aa"
为报文中包括的实体提供实体标记。
Expires 实体首部 Expires: HTTP-date Expires: Thu, 03 Oct 1997 17:15:00 GMT 响应失效的日期时间。客户端可以缓存1份副本,在这个时间到期之前,不用去询问服务器它是不是有效。
Last-Modified 实体首部 Last-Modified: HTTP-date Last-Modified: Thu, 03 Oct 1997 17:15:00 GMT 提供这个实体最后1次被修改的相干信息。Last-Modified不应当是未来的时间,如果它比Date首部中发送的值还迟,HTTP/1.1服务器就会将Last-Modified时间重置。
Range
实体首部
Range: bytes=500⑴500
说明报文所包括实体的范围。
         
Cache-Control 通用首部   Cache-Control: no-cache 用于传输对象的缓存信息。
Connection 通用首部 Connection: connection-token Connection:close 用于扩大keep-alive连接的HTTP/1.1客户端,keep-alive连接用于控制信息。close意味着响应结束后,连接会被关闭。
Date 通用首部 Date: HTTP-date Date: Tue, 3 Oct 1997 02:15:31 GMT 报文创建的日期时间。缓存可使用这个首部来判断相应的新鲜度。
Proxy-Connection 通用首部 Proxy-Connection: (connection-token) Proxy-Connection: close 在客户端和代理之间可以用它来指定与连接(主要是keep-alive连接)有关的选项。它其实不是标准的首部,标准委员会把他当作1个临时首部,但它得到了阅读器和代理的广泛使用。
Trailer 通用首部 Trailer: field-name Trailer: Content-Length 用于说明报文拖挂中提供了哪些首部。
Transfer-Encoding 通用首部 Transfer-Encoding: transfer-coding Transfer-Encoding: chunked 如果需要通过某些编码来安全地传送HTTP报文主体,报文中就要包括Transfer-Encoding首部。它的值是1个对报文主体履行过的编码的列表。
Upgrade 通用首部 Upgrade; protocol Upgrade: HTTP/1.1 此首部为报文发送者提供了1种手段,使其指定另外一种可能完全不同协议并将此意愿向外广播。服务器发送101状态码响应时,必须包括此首部。
Via 通用首部 Via: (received-protocol received-by [comment]) Via: 1.1 joes-hard-ware.com ( Joes-Server/1.0) 用于在报文经过代理和网关时对其进行跟踪。如果报文是通过量个中间利用程序传输的,那末每一个利用程序都会向其Via字符串中附加1些内容,必须通过HTTP/1.1代理和网关来插入Via首部。
MIME-Version 扩大通用首部 MIME-Version: DIGIT "." DIGIT MIME-Version: 1 . 0 MIME是HTTP的近亲。虽然俩者存在根本区分,但有些HTTP服务器确切构造了1些在MIME规范下一样有效的报文,这类情况下,就需要提供此首部
X-Pad 扩大通用首部 X-Pad: pad-text X-Pad: bogosity 用于解决某些阅读器中与响应首部长度相干的bug。
X-Serial-Number 扩大通用首部 X-Serial-Number: serialno X-Serial-Number: 010014056 扩大首部,较老的HTTP利用程序会向报文中插入许可软件的序列号。

#实体的主体部份(entity-body):

包括1个由任意数据组成的数据块。是http报文的负荷,可以承载很多类型的数字数据:图片、视频、HTML文档、软件利用程序、信誉卡事务、电子邮件等。

------分隔线----------------------------
------分隔线----------------------------

最新技术推荐