Http 方法总结
一、GET
GET 方法通常用于获取资源。在 GET 请求中一般不会包含呈现数据(如 HTML 文本、图片、视频等)。
使用中发现:
- postman 和浏览器均无法携带 请求体
- es 查询可以
二、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 请求支持标准字符集。
四、PUT
一般用于上传文件,由于 PUT 方法本身不带验证机制,任何人都可以上传文件,因此存在安全问题,一般我们不使用此方法。
PUT 和 POST 的最大区别是一个是幂等性的一个不是幂等性的。
五、PATCH
对资源进行部分修改,虽然 PUT 也可以用于修改资源,但是它只能完全替代原始资源,而 PATCH 可以允许对资源进行部分修改。
六、DELETE
删除文件,它与 PUT 的功能相反,一般用于删除文件,不带验证机制。不安全。
七、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,跨站追踪)
其他概念
安全
安全的 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 会一起发送。
- 原文作者:战神西红柿
- 原文链接:https://tomatoares.github.io/posts/web/http-%E6%96%B9%E6%B3%95%E6%80%BB%E7%BB%93/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。