Closed BetaSu closed 2 years ago
params
会拼接在url上,用?
分割,多个参数之间用&
连接; post请求会将参数/数据放在http请求中的body
里1、get是从服务器中获取数据,post是向服务器提交数据。 2、get请求具有幂等性,post不具有。 3、get的传参在url后面,post传参是在form表单中 4、get相对不安全,参数全部在url中,且可被浏览器记录在历史中。post相对较安全,浏览器不会保留。 5、get传输数据少(浏览器对url设置了长度上限)。 6、get有一个tcp请求,post有两个(100 continue,200 ok)
基于 http 协议进行请求, 其实 GET 和 POST 无区别,就像高速公路上不同车型的车,同样是运输信息,容量、方式有所区分; 请求时的方式不同, 都可以携带请求体, 也可以在 URL 带参数 区别来自于浏览器对 URL 长度的限制, 请求体大小来源于服务器的限制
GET 是获取, POST 是提交 Get 是用来从服务器上获得数据,而 post 是用来向服务器上传递数据
分类 🚀 | GET请求 | POST请求 |
---|---|---|
语义 | 用于从服务器获取数据 | 用于向服务器上传数据 |
回退 | 可回退、回退无害 | 会再次提交 |
编码 | URL编码 | 多种编码格式 |
参数 | 长度有限、只支持ASCII、(广义去讲:浏览器:2k个字节、服务器:64K)、附带在URL中 | 长度不限制,任意数据格式、放在body体 |
缓存 | 主动缓存、幂等 | 手动设置 、非幂等 |
书签 | 可以 | 不可以 |
场景 | 查询 | 新增、修改 |
协议 | TCP | TCP |
协议包个数 | 只有一个 | 两个(先发送header服务器响应100,然后在发送data) |
安全 | 不安全(参数都在URL上) | 相对安全 |
总结 | 本质都是 TCP 链接,并无区别。但是由于 HTTP 的规定以及浏览器/服务器的限制,导致它们在应用过程中有所不同 |
PS: 其实最有争议的问题是http请求包的问题,POST请求在不同的实现中请求包也是不同,只是大多数的实现中会发送两个包,而不是所有的,比如火狐、从标准上对比来讲的话POST发送两个请求包这个并不成立,只是实现的一种方式而已
最后这一点、卡哥可以展开给大家说说,这边我感觉理解的也是一直半解!
以下情况使用 GET:
以下情况下使用 POST:
get:
post:
对服务器资源的操作不同:
GET | POST | |
---|---|---|
后退按钮/刷新 | 无害 | 数据会被重新提交 |
书签 | 可收藏为书签 | 不可收藏为书签 |
缓存 | 能被缓存 | 不能缓存 |
编码类型 | application/x-www-form-urlencoded | application/x-www-form-urlencoded 或 multipart/form-data。 |
历史 | 参数保留在浏览器历史中 | 参数不会保存在浏览器历史中 |
对数据长度的限制 | URL 的最大长度是 2048 个字符 | 无限制 |
对数据类型的限制 | 只允许 ASCII 字符 | 没有限制。也允许二进制数据 |
安全性 | 安全性较差,因为所发送的数据是 URL 的一部分。 | 更安全,因为参数不会被保存在浏览器历史或 web 服务器日志中 |
可见性 | 数据在 URL 中对所有人都是可见的 | 更安全,因为参数不会被保存在浏览器历史或 web 服务器日志中 |
ps: RFC 中 100 Continue 并不是 POST Method 中的一个步骤,并且也不仅仅只能用于 POST method
要回答的问题
get
与post
都是常见的HTTP
请求方法,请从以下角度回答他们的区别:最佳答案评选标准
按如上所列角度全面、详细的回答
最佳答案
xiaxiangfeng的回答
答题同学须知
答题规范:请在
一次评论
中完成作答,后续修改也请编辑该评论,而不是追加新的评论评选标准:最佳答案由
围观同学
的 👍 和卡颂共同决定评选时间:一般是问题发布24小时后评选,如果问题发布当天回答数较少,问题悬赏金额可能增加,同时悬赏时间也会增加
围观同学须知
对于你满意的答案,请不要吝惜你的 👍,这是评选最佳答案的依据
非答题的评论
会被删除,问题相关讨论请在赏金猎人群中进行