HTTP方法总结

HTTP中的方法

客户端发送的请求报文的第一行是请求行,里面包含了请求的方法字段。

一、GET

GET方法通常用于获取资源。在GET请求中一般不会包含呈现数据(如HTML文本、图片、视频等)。

二、HEAD

获取报文的首部。和GET方法是一样的,但是他不反悔报文实体的主体部分。主要用于确认URL的有效性以及资源更新的日期时间等。

三、POST

一般用于传输实体主体,主要用来传输数据。

GET和POST的区别

作用

GET主要用来获取资源、POST主要用来传输实体主体(数据)。

参数

GET和POST的请求都能使用额外参数,但是GET的参数是以查询字符串出现在URL中,而POST的参数存储在实体主体中。

/**GET方式**/
GET /test/demo_form.asp?name1=value1&name2=value2 HTTP/1.1

/**POST方式**/
POST /test/demo_form.asp HTTP/1.1
Host: w3schools.com
name1=value1&name2=value2

但是不能因为POST参数存储在实体主体中就认为它的安全性高,因为照样可以通过一些抓包工具(如:Fiddler)查看。

因为URL只支持ASCII码,因此GET中的参数如果存在中文等字符就需要先进行编码,在服务器进行解码。POST请求支持标准字符集。

安全

安全的HTTP方法不会改变服务器的状态,也就是它只是可读的。

GET方法是安全的(因为大部分情况下只用来获取数据),而POST方法不是的,因为POST的作用是传送实体主体的内容(用于增减删除修改数据库等),也就是服务器的状态发生了改变。

安全的方法除了 GET 之外还有:HEAD、OPTIONS(下面会说到)。

不安全的方法除了POST之外还有:PUT、DELETE。

幂等性

幂等性的HTTP方法,同样的请求被执行一次与连续执行多次的结果是一样的,服务器的状态也是一样的。通常情况先 GET、HEAD、PUT和DELETE、OPTIONS等方法都是幂等性的,而POST方法却不是。所有的安全方法都是幂等性的。

GET /pageX HTTP/1.1 是幂等的。连续调用多次,客户端接收到的结果都是一样的:

GET /pageX HTTP/1.1
GET /pageX HTTP/1.1
GET /pageX HTTP/1.1
GET /pageX HTTP/1.1

POST /add_row HTTP/1.1 不是幂等的。如果调用多次,就会增加多行记录:

POST /add_row HTTP/1.1
POST /add_row HTTP/1.1   -> Adds a 2nd row
POST /add_row HTTP/1.1   -> Adds a 3rd row

DELETE /idX/delete HTTP/1.1 是幂等的,即便是不同请求之间接收到的状态码不一样:

DELETE /idX/delete HTTP/1.1   -> Returns 200 if idX exists
DELETE /idX/delete HTTP/1.1   -> Returns 404 as it just got deleted
DELETE /idX/delete HTTP/1.1   -> Returns 404

可缓存

请求报文的 HTTP 方法本身是可缓存的,包括 GET 和 HEAD,但是 PUT 和 DELETE 不可缓存,POST 在多数情况下不可缓存的。

补充:
响应报文的状态码是可缓存的,包括:200, 203, 204, 206, 300, 301, 404, 405, 410, 414, and 501。

响应报文的 Cache-Control 首部字段可以指定是否进行缓存。

XMLHttpRequest

XMLHttpRequest 是一个 API,它为客户端提供了在客户端和服务器之间传输数据的功能。它提供了一个通过 URL 来获取数据的简单方式,并且不会使整个页面刷新。这使得网页只更新一部分页面而不会打扰到用户。XMLHttpRequest 在 AJAX 中被大量使用。

在使用 XMLHttpRequest 的 POST 方法时,浏览器会先发送 Header 再发送 Data。但并不是所有浏览器会这么做,例如火狐就不会。而 GET 方法 Header 和 Data 会一起发送

四、PUT

一般用于上传文件,由于PUT方法本身不带验证机制,任何人都可以上传文件,因此存在安全问题,一般我们不使用此方法。

PUT /new.html HTTP/1.1
Host: example.com
Content-type: text/html
Content-length: 16

<p>New File</p>

PUT和POST的最大区别是一个是幂等性的一个不是幂等性的。(幂等性见上面GET和POTS区别分析部分)

五、PATCH

对资源进行部分修改,虽然PUT也可以用于修改资源,但是它只能完全替代原始资源,而PATCH可以允许对资源进行部分修改。

PATCH /file.txt HTTP/1.1
Host: www.example.com
Content-Type: application/example
If-Match: "e0023aa4e"
Content-Length: 100

[description of changes]

六、DELETE

删除文件,它与PUT的功能相反,一般用于删除文件,不带验证机制。不安全。

DELETE /file.html HTTP/1.1

七、OPTIONS

查询指定URL能够支持的方法。
会返回Allow:GET、POST、HEAD、OPTIONS这样的内容。

八、CONNECT

要求使用隧道连接技术,要求在与代理服务器通信时建立隧道,使用SSL(Secure Sockets Layer,安全套接层)和TLS(Transport Layer Security,传输层安全)协议把通信内容加密后经网络隧道传输。

CONNECT cnn.com:443 HTTP/1.1

九、TRACE

路径追踪

服务器会将通信路径返回给客户端。发送请求时,在 Max-Forwards 首部字段中填入数值,每经过一个服务器就会减1,当数值为0时就会停止传输。通常不会使用TRACE,并且它容易受到 XST 攻击(Cross-Site Tracing,跨站追踪)。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值