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

本文探讨了GET和POST在URL参数、安全性、幂等性和缓存方面的区别,以及XMLHttpRequest如何体现它们的不同。GET用于安全的数据获取,POST用于数据传输,而幂等的HTTP方法如GET和HEAD可用于缓存优化。
摘要由CSDN通过智能技术生成

使⽤场景

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 会⼀起发送

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值