使用场景
- GET请求一般用于向服务器请求数据
- POST请求一般用于向服务器提交数据
请求参数的位置
- GET请求通常将参数放在URL的 query 中。
- POST 请求通常会将数据放在请求体(body)中。
GET请求通常将参数放在URL的 query 中。查询字符串位于URL的问号(?)后面,由一系列的"键=值"对组成,每对之间由&符号分隔。例如:
https://codereasy.com/search?query=puppies&sort=popularity
在上述例子中,"query"和"sort"是查询参数的键,"puppies"和"popularity"是它们的值。
POST 请求通常会将数据放在请求体(body)中。
POST /login HTTP/1.1
Host: example.com
Content-Type: application/json
Content-Length: 42
{
"username": "testuser",
"password": "testpass"
}
安全性
- get请求的参数一般不安全,因为参数是拼接在url后面,暴露在地址栏中
- post请求的参数一般比较安全,因为post请求的参数放在请求体中
这里的安全性主要是指,在传输过程中,get 请求的参数是暴露在 url 中,显得不安全;实际上,如果在传输过程中某个节点被劫持,post 请求参数也一样会暴露。
能否被缓存
就是GET请求可以被缓存,而POST请求通常不会被缓存。
GET请求用于获取信息,它们是幂等的,也就是说,无论你发送多少次相同的GET请求,结果应该是一样的。
举个例子,如果你正在浏览一个网页,你可能会多次请求同一张图片。如果浏览器可以缓存这张图片(基于GET请求的结果),那么在后续请求中就不需要再次从服务器获取图片,从而节省了带宽,加快了网页的加载速度。
POST请求可能更改服务器上的状态。比如,当你在一个网页上填写表单并提交时,浏览器可能会使用POST请求将表单数据发送到服务器。因为这种请求可能会改变服务器上的数据(例如,可能会在服务器上创建一个新的用户账户),所以缓存POST请求的响应通常是没有意义的。再比如,如果你提交一个订单,你不希望这个请求被缓存,因为你不希望再次提交同样的订单。