HTTP协议关于方法
Posted 互联网测试QA
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HTTP协议关于方法相关的知识,希望对你有一定的参考价值。
HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法。
HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。
下面是各个方法的描述:
序号 |
方法 |
描述 |
1 |
GET |
请求指定的页面信息,并返回实体主体 |
2 |
HEAD |
类似于get请求,只不过返回的响应中没有具体的内容,只获取报头,作用如下: ● 在不获取资源的情况下了解资源的情况(比如:判断其类型) ● 通过查看响应的状态码,看看某个对象是否存在 ● 通过查看首部,判断测试资源是否被修改了 |
3 |
POST |
向指定资源提交数据进行处理请求(例如提交表单或者上传文件) 数据被包含在请求体中 POST请求可能会导致新的资源的建立或已有资源的修改 |
4 |
PUT |
从客户端向服务器传送的数据取代指定的文档的内容 PUT方法用来传输文件,就像FTP协议的文件上传一样,要求在请求报文的主体中包含文件内容,然后保存在请求URI指定的位置 但是HTTP/1.1的PUT方法自身不带验证机制,任何人都可以上传文件,存在安全问题,故一般不用 |
5 |
DELETE |
DELETE方法所做的事情就是请服务器删除请求URL所指定的资源 但客户端应用程序无法保证删除操作一定会被执行,因为HTTP规范允许服务器在不通知客户端的情况下撤销请求 |
6 |
CONNECT |
CONNECT方法要求在与代理服务器通信时建立隧道,实现用隧道协议进行TCP通信 主要使用SSL(安全套接层)和TLS(传输层安全)协议把通信内容加密后经网络隧道传输 |
7 |
OPTIONS |
OPTIONS方法请求Web服务器告知其支持的各种功能 可以询问服务器通常支持哪些方法,或者对某些特殊资源支撑哪些方法。(有些服务器可能只支持对一些特殊类型的对象使用特定的操作),这为客户端应用程序提供了一种手段,使其不用实际访问那些资源就能判定访问各种资源的最优方式 |
8 |
TRACE |
回显服务器收到的请求,主要用于测试或诊断 |
重点:::GET和POST的区别
对比项 |
GET |
POST |
Safe Methods |
是(查询) |
否(修改服务器上资源的请求) |
幂等性 |
是 |
否 |
对数据类型的限制 |
只允许 ASCII 字符 |
没有限制。也允许二进制数据 |
对数据长度的限制 |
是的。当发送数据时,GET 方法向 URL 添加数据;URL 的长度是受限制的(URL 的最大长度是 2048 个字符)。 |
理论无限制 |
安全性 |
与 POST 相比,GET 的安全性较差,因为所发送的数据是 URL 的一部分。 在发送密码或其他敏感信息时绝不要使用 GET |
传输数据可加密 |
可见性 |
数据在 URL 中对所有人都是可见的 |
数据不会显示在 URL 中,放在HTTP正文中的 |
缓存 |
能被缓存 |
不能缓存 |
编码类型 |
application/x-www-form-urlencoded |
application/x-www-form-urlencoded 或 multipart/form-data。为二进制数据使用多重编码。 |
历史 |
参数保留在浏览器历史中 |
参数不会保存在浏览器历史中 |
TCP |
产生一个TCP数据包 |
产生两个TCP数据包 |
请求过程 |
浏览器会把http header和data一并发送出去,服务器响应200(返回数据) |
浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据) |
另外需要有个概念,请求方法的属性:
1、安全的方法(Safe Methods)
一个安全的请求方法(safe method),指的是这个方法在语义上是只读的,期望获得一些信息,而不是去主动改变服务端上的数据,不应当对服务端产生有害的结果(可理解类似执行是select,而不是update或insert)
站在客户端的角度来看,一个安全的请求应当是只读的,无害的,然而这并不能保证它在服务端的实现就一定是只读的,一个安全的请求方法在实现上可能会对服务器数据进行一些修改,这类修改通常是为了满足一定的业务需求,但如果没有恰当的实现,就可能会产生一些有害的结果。例如,大部分的服务端程序都会将请求信息写入到日志文件中,即使是一个安全的请求方法,仍然会在日志文件中写入这条请求。
根据上述定义,GET,HEAD,OPTIONS和TRACE方法被认为是安全的方法,其他方法则被认为是不安全的。
2、幂等的方法(Idempotent Methods)
在数学和计算机科学中,一项操作被称为幂等的表示这项操作执行任意多次和执行一次的结果是完全一样的。例如求绝对值的运算就是幂等的abs(abs(x))≡ abs(x)。对一个HTTP请求来说,如果一个请求方法多次独立执行和只执行一次对服务器产生的预期效果完全相同,则称这个请求方法是幂等的;根据此定义,PUT,DELETE是幂等的方法,此外所有安全的请求方法也都是幂等的。
有两点需要注意。
(1) 这里的幂等操作涉及的执行结果指的是对服务端产生的预期结果,并不是客户端得到的报文内容。例如,GET请求是幂等的,执行任意多次都不会对服务器产生任何预期修改。但这并不是说客户端每次执行GET得到的报文内容是一样的。
(2) 和安全性一样,幂等性同样是一种从客户端角度来看请求方法的性质,它同样是一种语义上的性质。它并不代表服务端实现上一定是幂等的。例如,服务端可以自由的为每条GET请求记录日志,也可以为每条PUT请求记录修改时间,显然,这时每次幂等的操作在服务端都会产生不同的结果,但这些不同的结果并非是客户端请求时所预期的。
3、可缓存的方法(Cacheable Methods)
可缓存的请求方法指的是该方法对应的响应消息能够在客户端被存储,并在之后的请求中被直接使用,而不再需要从服务端重新获取。可缓存的方法有GET,HEAD和POST,但大部分的时候都只实现了GET和HEAD的缓存。
方法的可缓存性只是标记了哪些方法的结果是可以被缓存的,哪些方法的结果则不需要考虑缓存,但是具体的缓存策略和缓存实现则非常复杂
标准请求方法的属性
根据上述定义,可以得到如下HTTP协议标准请求方法的分类表格 :
以上是关于HTTP协议关于方法的主要内容,如果未能解决你的问题,请参考以下文章