GET和POST最详细的总结
两种 HTTP 请求方法:
GET
和POST
GET
- 从指定的资源请求数据。
POST
- 向指定的资源提交要被处理的数据
GET 方法
请注意,查询字符串(名称/值对)是在 GET 请求的 URL 中发送的:
/test/demo_form.asp?name1=value1&name2=value2
有关 GET 请求的其他一些注释:
- GET 请求可被缓存
- GET 请求保留在浏览器历史记录中
- GET 请求可被收藏为书签
- GET 请求不应在处理敏感数据时使用
- GET 请求有长度限制
- GET 请求只应当用于取回数据
POST 方法
请注意,查询字符串(名称/值对)是在 POST 请求的 HTTP 消息主体中发送的:
POST /test/demo_form.asp HTTP/1.1
Host: w3schools.com
name1=value1&name2=value2
有关 POST 请求的其他一些注释:
- POST 请求不会被缓存
- POST 请求不会保留在浏览器历史记录中
- POST 不能被收藏为书签
- POST 请求对数据长度没有要求
GET 与 POST的比较 :
-
GET参数通过URL传递,POST放在Request body(消息主体)中。
-
GET在浏览器回退时是无害的,而POST会再次提交请求(数据会被重新提交)。
-
GET产生的URL地址可以被收藏为书签,而POST不可以。
-
GET请求能被缓存,而POST不会。
-
GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。
-
GET请求只能进行url编码,而POST支持多种编码方式。
-
GET请求在URL中传送的参数是有长度限制的(大概9000+个字符,超过了限制服务端则返回414标识),而POST没有有。
-
对参数的数据类型,GET只接受ASCII字符,而POST没有限制。
-
GET没有POST安全,因为参数直接暴露在URL上(所发送的数据是 URL 的一部分),所以不能用来传递密码等敏感信息。POST 比 GET 更安全,因为参数不会被保存在浏览器历史或 web 服务器日志中。
-
GET请求数据在 URL 中对所有人都是可见的,而数据不会显示在 URL 中。
GET和POST还有一个重大区别
GET产生一个TCP数据包;POST产生两个TCP数据包。
对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);
而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。
也就是说,GET只需要汽车跑一趟就把货送到了,而POST得跑两趟,第一趟,先去和服务器打个招呼“嗨,我等下要送一批货来,你们打开门迎接我”,然后再回头把货送过去。
因为POST需要两步,时间上消耗的要多一点,看起来GET比POST更有效,但不能一味将GET替代POST:
- GET与POST都有自己的语义,不能随便混用。
- 据研究,在网络环境好的情况下,发一次包的时间和发两次包的时间差别基本可以无视。而在网络环境差的情况下,两次包的TCP在验证数据包完整性上,有非常大的优点。
- 并不是所有浏览器都会在POST中发送两次包,Firefox就只发送一次。
其他 HTTP 请求方法
HEAD: 与 GET 相同,但只返回 HTTP 报头,不返回文档主体。
PUT: 上传指定的 URI 表示。
DELETE: 删除指定资源。
OPTIONS: 返回服务器支持的 HTTP 方法。
CONNECT: 把请求连接转换到透明的 TCP/IP 通道。
本文作者:猫老板的豆
本文链接:https://www.cnblogs.com/bingcola/p/16499246.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战