Chinaunix首页 | 论坛 | 博客
  • 博客访问: 611270
  • 博文数量: 244
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 130
  • 用 户 组: 普通用户
  • 注册时间: 2016-06-27 09:53
个人简介

记录学习,记录成长

文章分类

全部博文(244)

我的朋友

分类: LINUX

2015-08-08 22:00:24

HTTP报文有请求报文和响应报文两类
1.请求报文
一个请求报文由请求行,请求首部,空行和报文主体组成
格式:
<method>空格<request-URL>空格 <version>回车符换行符       #请求行,
<headers> 回车符换行符                                                         #请求首部
回车符换行符                                                                           #空行
<entity-body>                                                                         #报文主体
其中:
1.1  请求行中包括请求方式,URL和协议版本(常用的有HTTP/1.0和HTTP/1.1)
常见的请求方式和说明:

GET: 请求指定的页面信息,并返回实体主体。

HEAD: 只请求页面的首部。

POST:请求服务器接受所指定的文档作为对所标识的URL的新的从属实体。

PUT: 从客户端向服务器传送的数据取代指定的文档的内容。

DELETE: 请求服务器删除指定的页面。

OPTIONS: 允许客户端查看服务器的性能。

1.2  请求首部内容格式为name:value
常见的请求首部和说明:
HOST:接收请求的服务器地址可以是IP和端口,也可以是域名;
Connection:指定连接的属性;
Accept:客户端可识别的媒体类型;
User-Agent:发送请求的应用程序信息;
Referer:致命被连接的目标的URL;
Accept-Encoding:通知服务端可以发送的数据压缩格式或者可接受的数据压缩方式;
Accept-Language:通知服务端可以发送的语言或者能够接受的语言;
Accept-Charset:通知服务端可以发送的编码格式;
1.3  空行会发送回车符(/r)和换行符(/n),表示请求首部结束,以下不再有请求首部;
1.4  报文主体在POST方式中使用,而不在GET方式中使用
请求报文例子
GET请求报文:
GET方法要求服务器将URL定位的资源放在响应报文的数据部分,回送给客户端。使用GET方法时,请求参数和对应的值附加在URL后面,利用一个问号(“?”)代表URL的结尾与请求参数的开始,传递参数长度受限制。
POST请求报文:
POST方法将请求参数封装在HTTP请求数据中,以名称:值的形式出现,可以传输大量数据,这样POST方式对传送的数据大小没有限制,而且也不会显示在URL中

2.  HTTP响应报文
 一个响应报文由状态行,响应首部和响应报文主体组成
格式:
<vesion>空格<status>空格<reason-phrase>回车符换行符        #状态行
<headers>回车符换行符                                                        #响应首部
回车符换行符                                                                        #空行    
<entity-body>                                                                      #响应报文主体
其中:
2.1  状态行包括协议版本,状态码和状态码描述
状态码由三位数组成分为5类:

1xx: 纯信息,表示接收到请求,继续处理;

2xx:请求成功,表示请求已被成功接受;

3xx:重定向,表示要完成请求,必须采取进一步措施;

4xx:客户端出错,请求有错或不能完成;

5xx:服务器出错 ,服务器无法完成请求;
常见的状态码及其含义:

100 : Continue 继续;

101 : witching Protocols 转换协议;

200 : OK 成功;

201 : Created 创建;

202 : Accepted 接受;

203 : Non-Authoritative Information 非权威信息;

204 : No Content 无内容;

205 : Reset Content 重置内容;

206 : Partial Content 局部内容;

300 : Multiple Choices 多样选择;

301 : Moved Permanently 永久移动;

302 : Found 创立;

303 : See Other 观察别的部分;

304 : Not Modified 只读;

305 :Use Proxy 用户代理;

307 : Temporary Redirect 临时重发;

400 : Bad Request 坏请求;

401 : Unauthorized 未授权的;

402 : Payment Required 必要的支付;

403 : Forbidden 禁用;

404 : Not Found 没找到;

405 : Method Not Allowed 不允许的方式;

406 : Not Acceptable 不接受;

407 : Proxy Authentication Required 需要代理验证;

408 : Request Time-out 请求超时;

409 : Conflict 冲突;

410 : Gone 以往的;

411 : Length Required 需要的长度;

412 : Precondition Failed 预处理失败;

413 : Request Entity Too Large 请求实体太大;

414 : Request-URL Too Large 请求URL太大;

415 : Unsupported Media Type 不支持的媒体类型;

416 : Requested range not satisfiable 请求的范围不足;

417 : Expectation Failed 期望失败;

500 : Internal Server Error 服务器内部出错;

501 : Not Implemented 不能实现;

502 : Bad Gateway 坏网关;

503 : Service Unavailable 服务器不能实现;

504 : Gateway Time-out 网关超时;

505 : HTTP Version not supported HTTP版本不支持。


2.2  响应首部,为响应报文添加一些附加信息,这些信息不能放在状态行里.这些报头域给出有关服务器的信息以及请求URL指定的资源的下一步的通路
常见的响应首部:

Server

服务器应用程序软件的名称和版本

Content-Type

响应正文的类型(图片类型还是二进制字符串类型)

Content-Length

响应正文长度

Content-Charset

响应正文使用的编码

Content-Encoding

响应正文使用的数据压缩格式

Content-Language

响应正文使用的语言

2.3  响应报文例子:


3.关于HTTP中GET和POST的区别:

1.GET提交:请求的数据会附在URL之后(就是把数据放置在HTTP协议头请求行中),以?分割URL和传输数据,多个参数用&连接;例如:login.action?name=hyddd&password=idontknow&verify=%E4%BD%A0 %E5%A5%BD。如果数据是英文字母/数字,原样发送,如果是空格,转换为+,如果是中文/其他字符,则直接把字符串用BASE64加密,得出如: %E4%BD%A0%E5%A5%BD,其中%XX中的XX为该符号以16进制表示的ASCII。

POST提交:把提交的数据放置在是HTTP包的包体中。

因此,GET提交的数据会在地址栏中显示出来,而POST提交,地址栏不会改变;

2.传输数据的大小:

   首先声明,HTTP协议没有对传输的数据大小进行限制,HTTP协议规范也没有对URL长度进行限制。 而在实际开发中存在的限制主要有:

GET:特定浏览器和服务器对URL长度有限制,例如IE对URL长度的限制是2083字节(2K+35)。对于其他浏览器,如Netscape、FireFox等,理论上没有长度限制,其限制取决于操作系统的支持。

       因此对于GET提交时,传输数据就会受到URL长度的限制。
POST:由于不是通过URL传值,理论上数据不受限。但实际各个WEB服务器会规定对post提交数据大小进行限制,Apache、IIS6都有各自的配置

3.安全性:

POST的安全性要比GET的安全性高。注意:这里所说的安全性和上面GET提到的“安全”不是同个概念。上面“安全”的含义仅仅是不作数据修改,而这里安全的含义是真正的Security的含义;
比如:通过GET提交数据,用户名和密码将明文出现在URL上,因为
(1)登录页面有可能被浏览器缓存; 
(2)其他人查看浏览器的历史纪录,那么别人就可以拿到你的账号和密码了;


阅读(1531) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~