HTTP深入学习总结(2)——报文

分类: 开发技术 | 作者: 尼莫船长 | 发表于 2013/09/25 没有评论


1,基本概念:
a,报文按照事务(transaction)处理的方向描述,分为流入(inbound)和流出(outbound)报文。
b,按照在网络间流动的状态,分为流向下游(upstream)的报文 clinet->server 一般为request;流向下游(downstream)的报文Server->Client 一般为response
c,报文的格式分成三部分:
起始行(start line)
首部(headers)
主体(entity body)

d,request报文的格式

<method><request-url><version>
<headers>
	
<entity-body>

eg:

GET /index.html HTTP/1.1
Accept: *
Host:www.abc.com

e,response报文格式

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

eg:

HTTP/1.1 200 ok
content-type:text/pain
content-length:19
		
HI!I'm good boy!

2,常用HTTP的方法
GET:从服务器获取一份文档,无主体
HEAD:从服务器获取文档的首部,无主体
a,在不获取资源的情况下了解资源情况
b,通过查看status code 检查某个资源是否存在。一般返回 200 ok
c,通过查看header检查资源是否改变
eg response:

HTTP/1.1 200 ok
Content-type:text/html
Content-length:2001
(NO Entity body)

POST:向服务器发送 需要处理的数据,有主体
PUT:将请求的主体部分存储在服务器上,有主体
其语义是用请求的主体部分创建一个由请求头命名的文档,如果服务器端有同名文件则替换掉。成功一般返回201
eg request:

PUT /sampleList.txt HTTP/1.1
Host:www.abc.com
Content-type: txt/plain
Context-lenght: 12

Here is a new msg!!

eg response:

HTTP/1.1 201 Created
Location:www.abc.com/smaolList.txt
Content-type:txt/plain
Content-length: 24

http://www.abc.com/sampleList.txt

TRACE:对可能经过proxy服务器传输到服务器的报文进行追踪,无主体
为了防止网关、防火墙等等修改http请求,可以用TRACE方法验证。在行程的最后一站,返回TRACE response会在响应主体中携带原始请求报文。

假设: Client<--->Proxy<--->Firewall<--->Server

eg Clinet发出的request:

TRACE /sampleList.txt HTTP/1.1
Host:www.abc.com
Accept:*

那么最后Proxy返回给Client的 response:

HTTP/1.1 200 ok
Content-type:txt/plain
Content-length: 64
via:1.1 proxy1.public.com

TRACE /sampleList.txt HTTP/1.1
Host:www.abc.com
Accept:*

OPTIONS:决定可以在服务器上执行哪些方法,无主体
请求服务器告知可以支持的方法.
eg req:

OPTIONS * HTTP/1.1
Host:www.abc.com
Accept:*

eg response:

HTTP/1.1 200 ok
Allow:POST, GET,PUT,OPTIONS
Content-length:0

DELETE:从服务器上删除一个文档,无主体
注意:客户端无法保证执行的删除操作一定会成功
eg req:

DELETE /sampleList.txt HTTP/1.1
Host:www.abc.com

eg response:

HTTP/1.1 200 ok
Content-type:txt/plain
Content-length: 20

U delete the sampleList.txt

扩展方法在WebDAV HTTP中定义,如
LOCK:运行用户锁定某个资源,防止在自己修改时其他人操作。
MKCOL:允许用户创建资源
COPY:在服务器上复制资源
MOVE:在服务器移动资源

3,状态码(status code)
HTTP状态码总分为五大类
100~199 信息型状态码
100~101已经定义
200~299 成功状态码
200~206已经定义
300~399 重定向状态码
300~307已经定义
400~499 客户端错误状态码
400~417已经定义
500~599服务器端错误状态码
500~505已经定义

4,首部(headers)
headers和mathod配合工作,它们决定了clinet和server能做的所有事情。可以分成五类:
a,通用首部: client和server共有的
b,请求首部: 只有请求才有的
c,响应首部: 只有响应才有的
d,实体首部: 用于应对实体主体部分的
e,扩展首部: 非标准的,一般由开发者创建的

关于状态码和首部的具体信息参考官方手册。太多了。。。不写了。。。

移动设备快速阅读本文:
  请扫描二维码  -->

"There are two ways of constructing a software design; one way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult."-C. A. R. Hoare

» 本文链接地址:http://www.wanghaoyan.com/?p=161 » 英雄不问来路,转载请注明出处,谢谢。
» 您也可以订阅本站:RSS 2.0

« »