面试官:说⼀说POST与GET有哪些区别

导读:本篇文章讲解 面试官:说⼀说POST与GET有哪些区别,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

使⽤场景

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

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!