GET 对比 POST

http中最长用的两个方法GET和POST,面试中最长问道的一个问题,今天好好唠唠。什么是http,除此get和post之外还有什么不长用的方法,get和post有什么区别。

什么是 HTTP?

超文本传输协议(HTTP),是基于TCP/IP 协议保证客户端和服务器之间的通信。
HTTP的工作方式是客户机与服务器之前的请求 - 应答协议。

其他 HTTP 请求方法

HEAD 与GET相同,但只返回 HTTP 报头,不返回文档主体。
PUT 上传指定的 URI 表示。
DELETE 删除指定资源
OPTIONS 返回服务器支持的 HTTP 方法。
CONNECT 把请求连接转换到透明的 TCP/IP 通道。

GET 方法

查询字符串(名称/值对)是在 GET 请求的 URL 中发送的:

/test/demo_from.asp?name1=value1&name2=value2

有关GET请求的其他一些注释:

  • GET请求可被缓存
  • GET请求保留在浏览器历史记录中
  • GET 请求可被收藏为书签
  • GET 请求不应在处理敏感数据时使用
  • GET 请求有长度限制(最大2048个字符)
  • GET 请求只应当用于取回数据

POST方法

查询字符串(名称/值对) 是在POST 请求的 HTTP 消息主题中发送的:

POST /text/demo_from.asp HTTP/1.1
Host: w3schools.com
name1=value1&name2=value2

有关POST请求的其他一些注释:

  • POST请求不会被缓存
  • POST 请求不会保留在浏览器历史记录中
  • POST 不能被收藏为书签
  • POST 请求对数据长度没有要求
当我们被问到的时候,心中窃喜,这个道题已经被我刷过无数次了,so easy
  • GET在浏览器回退是无害的,而POST会再次提交请求。

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

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

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

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

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

  • 对参数的数据类型,GET只接受ASCLL字符,而POST没有限制。

  • GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。

  • GET参数通过URL传递,POST放在Request body中

  • GET和POST还有一个重大的区别,GET产生一个TCP数据包,POST产生两个TCP数据包。
    对于GET方式的请求,浏览器会把http header 和 data 一并发送出去,服务器响应200(返回数据);
    对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据);
    据研究,在网络环境好的情况下,发一次包的时间和发两次包的时间差别基本可以无视。而在网络环境差的情况下,两次包的TCP在验证数据包完整性上,有非常大的优点。
    并不是所有浏览器都会在POST中发送两次包,Firefox就只发送一次。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容