使⽤场景
GET ⽤于获取资源,⽽ POST ⽤于传输实体主体。
参数
GET 和 POST 的请求都能使⽤额外的参数,但是 GET 的参数是以查询字符串出现在 URL 中,⽽ POST 的参数存储 在实体主体中。不能因为 POST 参数存储在实体主体中就认为它的安全性更⾼,因为照样可以通过⼀些抓包⼯具 (Fiddler)查看。
因为 URL 只⽀持 ASCII 码,因此 GET 的参数中如果存在中⽂等字符就需要先进⾏编码。例如 中⽂ 会转换为 %E4%B8%AD%E6%96%87 ,⽽空格会转换为 %20 。POST 参数⽀持标准字符集。
GET /test/demo_form.asp?name1=value1&name2=value2 HTTP/1.1Copy to clipboardErrorCopied
POST /test/demo_form.asp HTTP/1.1
Host: w3schools.com
name1=value1&name2=value2Copy to clipboardErrorCopied
安全性
安全的 HTTP ⽅法不会改变服务器状态,也就是说它只是可读的。
GET ⽅法是安全的,⽽ POST 却不是,因为 POST 的⽬的是传送实体主体内容,这个内容可能是⽤户上传的表单数 据,上传成功之后,服务器可能把这个数据存储到数据库中,因此状态也就发⽣了改变。
安全的⽅法除了 GET 之外还有:HEAD、OPTIONS。
不安全的⽅法除了 POST 之外还有 PUT、DELETE。
幂等性
幂等的 HTTP ⽅法,同样的请求被执⾏⼀次与连续执⾏多次的效果是⼀样的,服务器的状态也是⼀样的。换句话说 就是,幂等⽅法不应该具有副作⽤(统计⽤途除外)。
所有的安全⽅法也都是幂等的。
在正确实现的条件下,GET,HEAD,PUT 和 DELETE 等⽅法都是幂等的,⽽ 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.1Copy to clipboardErrorCopied
POST /add_row HTTP/1.1 不是幂等的,如果调⽤多次,就会增加多⾏记录:
POST /add_row HTTP/1.1 -> Adds a 1nd row
POST /add_row HTTP/1.1 -> Adds a 2nd row
POST /add_row HTTP/1.1 -> Adds a 3rd rowCopy to clipboardErrorCopied
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 404Copy to clipboardErrorCopied
可缓存
如果要对响应进⾏缓存,需要满⾜以下条件:
请求报⽂的 HTTP ⽅法本身是可缓存的,包括 GET 和 HEAD,但是 PUT 和 DELETE 不可缓存,POST 在多数 情况下不可缓存的。
响应报⽂的状态码是可缓存的,包括:200, 203, 204, 206, 300, 301, 404, 405, 410, 414, and 501。
响应报⽂的 Cache-Control ⾸部字段没有指定不进⾏缓存。
XMLHttpRequest
为了阐述 POST 和 GET 的另⼀个区别,需要先了解 XMLHttpRequest:
XMLHttpRequest 是⼀个 API,它为客户端提供了在客户端和服务器之间传输数据的功能。它提供了⼀个通 过 URL 来获取数据的简单⽅式,并且不会使整个⻚⾯刷新。这使得⽹⻚只更新⼀部分⻚⾯⽽不会打扰到用户。XMLHttpRequest 在 AJAX 中被⼤量使⽤。
在使⽤ XMLHttpRequest 的 POST ⽅法时,浏览器会先发送 Header 再发送 Data。但并不是所有浏览器会这 么做,例如⽕狐就不会。
⽽ GET ⽅法 Header 和 Data 会⼀起发送
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/73569.html