专栏首页浩CodingHTTP 方法:GET方法 对比 POST方法

HTTP 方法:GET方法 对比 POST方法

Http请求中的get方法和post方法的异同,算是我们Web开发时候常见的问题吧,这次还是老生常谈,新壶装旧酒,权当复习了。

这是大概的Http请求过程图:

面试题的“标准答案”:

1 :GET比POST相对来说更不安全,因为参数直接暴露在URL上,所以不能用来 传递敏感信息。 因为GET参数通过URL传递,POST放在Request body中

2 :GET请求在URL中传送的参数是有长度限制的,而POST没有。

3 :GET请求会被浏览器主动cache,而POST不会,除非手动设置。

4 :GET请求只能进行url编码,而POST支持多种编码方式。

5: GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。

6 :GET在浏览器回退时是无害的,而POST会再次提交请求。

7 :对参数的数据类型,GET只接受ASCII字符,而POST没有限制

8 :GET产生的URL地址可以被Bookmark,而POST不可以。

(本答案参考自w3schools)

比较 GET 与 POST的异同

下面的表格比较了两种 HTTP 方法:GET 和 POST。

GET

POST

后退按钮/刷新

无害

数据会被重新提交(浏览器应该告知用户数据会被重新提交)。

书签

可收藏为书签

不可收藏为书签

缓存

能被缓存

不能缓存

编码类型

application/x-www-form-urlencoded

application/x-www-form-urlencoded 或 multipart/form-data。为二进制数据使用多重编码。

历史

参数保留在浏览器历史中。

参数不会保存在浏览器历史中。

对数据长度的限制

是的。当发送数据时,GET 方法向 URL 添加数据;URL 的长度是受限制的(URL 的最大长度是 2048 个字符)。

无限制。

对数据类型的限制

只允许 ASCII 字符。

没有限制。也允许二进制数据。

安全性

与 POST 相比,GET 的安全性较差,因为所发送的数据是 URL 的一部分。在发送密码或其他敏感信息时绝不要使用 GET !

POST 比 GET 更安全,因为参数不会被保存在浏览器历史或 web 服务器日志中。

可见性

数据在 URL 中对所有人都是可见的。

数据不会显示在 URL 中。

从网上查找其他资料还发现了很多有趣的东西:

GET和POST都是HTTP协议中的两种发送请求的方法,HTTP的底层是TCP/IP所以GET和POST的底层也是TCP/IP也就是说,GET/POST都是TCP链接。GET和POST能做的事情是一样一样的。你要给GET加上request body,给POST带上url参数,技术上是完全行的通的。 HTTP只是个行为准则,而TCP才是GET和POST怎么实现的基本。

但是问题又来了,业界不成文的规定是,(大多数)浏览器通常都会限制url长度在2K个字节,而(大多数)服务器最多处理64K大小的url。超过的部分,恕不处理。所以,虽然GET可以带request body,也不能保证一定能被接收到哦。

所以:GET和POST本质上就是TCP链接,并无差别。但是由于HTTP的规定和浏览器/服务器的限制,导致他们在应用过程中体现出一些不同。

GET和POST还有一个重大区别,简单的说:

GET产生一个TCP数据包;POST产生两个TCP数据包。

对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据)。而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)

因为POST需要两步,时间上消耗的要多一点,看起来GET比POST更有效。因此Yahoo团队有推荐用GET替换POST来优化网站性能。但这是一个坑!跳入需谨慎。为什么?

1. GET与POST都有自己的语义,不能随便混用。

2. 据研究,在网络环境好的情况下,发一次包的时间和发两次包的时间差别基本可以无视。而在网络环境差的情况下,两次包的TCP在验证数据包完整性上,有非常大的优点。

3. 并不是所有浏览器都会在POST中发送两次包,Firefox就只发送一次。

参考文章:

http://www.w3school.com.cn/tags/html_ref_httpmethods.asp

https://www.cnblogs.com/logsharing/p/8448446.html

本文分享自微信公众号 - 浩Coding(gh_c4a2e63d2ca7),作者:浩

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-10-26

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 设置MySQL数据库不区分大小写

    我们大家可能都碰到过这种情况:在Linux下,MySQL的表名区分大小写,而在Windows下是不区分,从Windows下导出的数据脚本中使用的是小写,而Hib...

    浩Coding
  • 前端页面中的<meta name="renderer" content="webkit">意义

    由于众所周知的原因,国内的主流浏览器都是双核浏览器:基于Webkit的内核用于常用网站的高速浏览,基于IE的内核主要用于部分网银、政府、办公系统等网站的正常使用...

    浩Coding
  • 制作属于自己的域名邮箱

    现在已有免费的邮箱后缀名都是如@163.com、@qq.com、@gmail.com等等,不能更改的,这个时候如果有自己的域名,那就可以制作属于自己的域名邮箱了...

    浩Coding
  • 为什么有的机器学习应用公司必将失败?

    告诉大家一个秘密:当人们说起“ 机器学习 ”时,听起来好像只是在谈论一门学科,但其实是两门。如果企业不了解其中的差异,那么就可能招惹来满世界的麻烦。

    AI科技大本营
  • 为什么有的机器学习应用公司必将失败?

    用户1737318
  • HTTP|GET 和 POST 区别?网上多数答案都是错的!

    黄小怪
  • TensorFlow Bi-LSTM实现文本分词

    本节我们来尝试使用 TensorFlow 搭建一个双向 LSTM (Bi-LSTM) 深度学习模型来处理序列标注(分词)问题,主要目的是学习 Bi-LSTM 的...

    崔庆才
  • 【报告】2018年《中国大数据企业排行榜》V5.0发布

    本次《中国大数据企业排行榜》以及《中国大数据产业地图》于2018年5月26号在中国第四届数博会(贵阳)发布。本次新增15个垂直行业和领域,并更新了6个行业和领域...

    钱塘数据
  • 行业洞察:品牌营销中,大数据应用的正确姿势!

    【数据猿导读】在数据有效性的衡量上,大多数广告主选用的维度相对传统,仍是一些常规的曝光、点击、转化和留存等数据,但品牌资产的衡量不是单单通过这些指标来看的。

    数据猿
  • 关于 NIPS 2016 你应该知道的 50 件事情

    【新智元导读】Andreas Stuhlmüller 目前在斯坦福 Noah Goodman 教授 Computation & Cognition lab 当博...

    新智元

扫码关注云+社区

领取腾讯云代金券

玩转腾讯云 有奖征文活动