HTTP方法总结
2016-01-19 09:46
411 查看
注:本文资料来自《HTTP权威指南》及网上资料,针对HTTP1.1版本
根据HTTP规范,GET用于信息获取,而且应该是安全的和幂等的。
(1) 所谓安全的意味着该操作用于获取信息而非修改信息。换句话说,GET 请求一般不应产生副作用。就是说,它仅仅是获取资源信息,就像数据库查询一样,不会修改,增加数据,不会影响资源的状态。
* 注意:这里安全的含义仅仅是指是非修改信息。
(2) 幂等的意味着对同一URL的多个请求应该返回同样的结果。
请求报文示例:
响应报文示例:
在不获取资源的情况下了解资源的情况(例如判断其类型);
通过查看相应中的状态码,看看某个对象是否存在;
通过查看头部,测试资源是否被修改了。
请求报文示例:
响应报文示例:
PUT
与GET从服务器读取资源相反,PUT方法会向服务器写入资源。这个方法比较少见。HTML表单也不支持这个。本质上来讲, PUT和POST极为相似,都是向服务器发送数据,但它们之间有一个重要区别,PUT通常指定了资源的存放位置,而POST则没有,POST的数据存放位置由服务器自己决定。有些发布系统允许用户创建web页面并用PUT直接将其放到Web服务器上。
PUT方法是让服务器用请求的主体来创建一个由所请求的URL命名的新文档。如果那个URL已经存在,则会用这个主体来替代。
因为PUT允许用户对内容进行修改,所以一般来说在执行PUT之前都会要求用户进行登录。
请求报文示例:
响应报文:
常用的扩展方法
GET
GET是最常用的方法,通常用于请求服务器发送某个资源。资源通过一组HTTP头和呈现数据(如HTML文本,或者图片或者视频等)返回给客户端。GET请求不包含实体。根据HTTP规范,GET用于信息获取,而且应该是安全的和幂等的。
(1) 所谓安全的意味着该操作用于获取信息而非修改信息。换句话说,GET 请求一般不应产生副作用。就是说,它仅仅是获取资源信息,就像数据库查询一样,不会修改,增加数据,不会影响资源的状态。
* 注意:这里安全的含义仅仅是指是非修改信息。
(2) 幂等的意味着对同一URL的多个请求应该返回同样的结果。
请求报文示例:
GET /example/test.html HTTP/1.1 Host: www.test.com Accept: *
响应报文示例:
HTTP/1.1 200 OK Content-Type: text/html Context-Length: 600 <HTML> ...
HEAD
HEAD方法与GET方法极其类似,唯一不同的是服务器只会返回头部不会返回实体。这就允许客户端在未获取实际资源的情况下,对资源的头部进行检查。在不获取资源的情况下了解资源的情况(例如判断其类型);
通过查看相应中的状态码,看看某个对象是否存在;
通过查看头部,测试资源是否被修改了。
请求报文示例:
HEAD /example/test.html HTTP/1.1 Host: www.test.com Accept: *
响应报文示例:
HTTP/1.1 200 OK Content-Type: text/html Context-Length: 600
PUT
与GET从服务器读取资源相反,PUT方法会向服务器写入资源。这个方法比较少见。HTML表单也不支持这个。本质上来讲, PUT和POST极为相似,都是向服务器发送数据,但它们之间有一个重要区别,PUT通常指定了资源的存放位置,而POST则没有,POST的数据存放位置由服务器自己决定。有些发布系统允许用户创建web页面并用PUT直接将其放到Web服务器上。
PUT方法是让服务器用请求的主体来创建一个由所请求的URL命名的新文档。如果那个URL已经存在,则会用这个主体来替代。
因为PUT允许用户对内容进行修改,所以一般来说在执行PUT之前都会要求用户进行登录。
请求报文示例:
PUT /test.txt HTTP/1.1 Host: www.test.com Content-type: text/plain Content-length: 4 test
响应报文:
HTTP/1.1 201 Created Location: http://www.test.com/test.txt Content-Type: 30 http://www.test.com/test.txt[/code]POST
向服务器提交数据。通常用于表单操作。
POST和GET的区别
get是从服务器上获取数据,post是向服务器传送数据。
get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到。post是通过HTTP post机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址。用户看不到这个过程。
get传送的数据量较小,不能大于2KB。post传送的数据量较大,一般被默认为不受限制。但理论上,IIS4中最大量为80KB,IIS5中为100KB。
get安全性非常低,post安全性较高。但是执行效率却比Post方法好。
请求报文:POST /test.php HTTP/1.1 Host: www.test.com Content-type: text/plain Content-length: 10 name=test
响应报文:HTTP/1.1 200 OK Content-Type: text/plain Context-Length: 26 The name has been stored.TRACE
客户端发起一个请求时,这个请求可能要穿过防火墙、代理、网关或其他一些应用程序。每个中间节点都可能会修改原始的HTTP请求。TRACE方法允许客户端了解请求最终到达服务器时变成什么样。
TRACE方法的响应报文主体是服务器最终收到的请求报文的头部,实际上,TRACE请求报文不会有实体,而服务器一般返回200。
TRACE方法主要用于诊断,判断请求经过的路径是不是预料中的,也可以用来查看代理和其他应用程序是如何处理用户请求的。
但TRACE方法也有缺点,它假定中间应用程序对不同类型的请求(GET、POST等等)的处理是一样的,但很多HTTP应用程序会根据方法的不同做不同的处理,例如可能将POST请求直接发给服务器而将GET请求发给另一个HTTP应用程序(例如缓存)。
服务器开启TRACE方法可能遭受攻击,详见TRACE Method 网站漏洞,你关闭了吗
请求报文:TRACE /test.txt HTTP/1.1 Accept: * Host: www.test.com
经过代理后的请求报文:TRACE /test.txt HTTP/1.1 Host: www.test.com Accept: * Via: 1.1 proxy.test.com
服务器响应报文:HTTP/1.1 200 OK
Content-type: text/plain
Content-length: 76
TRACE /test.txt HTTP/1.1 Host: www.test.com Accept: * Via: 1.1 proxy.test.com
客户端最终收到的响应报文:HTTP/1.1 200 OK
Content-type: text/plain
Content-length: 76
Via: 1.1 proxy.test.com
TRACE /test.txt HTTP/1.1 Host: www.test.com Accept: * Via: 1.1 proxy.test.comOPTIONS
OPTIONS方法请求服务器告知其支持的各种功能,或者对某些特殊资源支持哪些方法。
这为客户端应用程序提供了一种手段,使其不用实际访问就能判断访问各种资源的最优方式。
请求报文:TRACE * HTTP/1.1 Accept: * Host: www.test.com
响应报文:(由于请求的是可为所有资源使用的选项,所以服务器仅返回它所支持的可通用于所有资源的方法)HTTP/1.1 200 OK Allow: GET, POST, PUT, OPTIONS Context-length: 0DELETE
DELETE方法是请求服务器删除请求URL所指定的资源,但是客户端无法保证该资源一定会被执行,因为HTTP规范允许服务器在不通知客户端的情况下撤销请求。
请求报文:DELETE /test.txt HTTP/1.1 Host: www.test.com
响应报文:HTTP/1.1 200 OK Content-Type: text/plain Content-Length: 9 Success!扩展方法
HTTP被设计成字段可扩展的,扩展方法指的就是没有在HTTP/1.1规范里定义的方法。这些方法可能有些HTTP应用程序不会识别。
方法 | 描述 |
---|---|
LOCK | 允许用户“锁定”资源——例如可以在编辑某个资源的时候将其锁定,以防别人同时对其进行修改 |
MKCOL | 允许用户创建资源 |
COPY | 便于在服务器上复制资源 |
MOVE | 在服务器上移动资源 |
相关文章推荐
- Mininet模拟不同数据中心的网络拓扑
- 检查网络(并查集)
- 使用chrome浏览器查看当前网页的http头
- HttpWatch工具简介及使用技巧
- Win7下添加网络适配器
- android 检查网络连接状态实现步骤
- 缓存网络数据--Rx和数据库
- 爬虫 - 开发网络爬虫应该怎样选择爬虫框架
- Android编程获取网络时间实例分析
- Java的Socket网络编程基础知识入门教程
- Xcode7 使用NSURLRequest进行HTTP请求出错解决方案
- http servlet服务器和android客户端(二)第一个android客户端
- 使用常见的网络命令查看当前网络状态——Mac OS X篇
- iOS网络-AFNetworking检测网络状态
- Atitit. servlet 与 IHttpHandler ashx listen 和HttpModule的区别与联系 原理理论 架构设计 实现机制 java php c#.net js javascript c++ python
- Atitit. servlet 与 IHttpHandler ashx listen 和HttpModule的区别与联系 原理理论 架构设计 实现机制 java php c#.net j
- Atitit. servlet 与 IHttpHandler ashx listen 和HttpModule的区别与联系 原理理论 架构设计 实现机制 java php c#.net j
- 安装mysql时出现HTTP 500 内部服务…
- 厦门巨游网络科技有限公司(HOTPOWER)承接游戏UI外包
- GCD group在多个网络请求的响应之前就已经执行