• 超详细的介绍 get 和 post 的区别,面试必备!


    比较详细的讨论一下get和post的区别:
    ● 关于浏览器回退
    get请求浏览器回退是无害的,具体指:get请求url资源会被浏览器缓存,回退时则会从缓存中获取该url的资源,而不会发起新的请求。
    post请求浏览器回退时会重新发起请求,创建新的资源。
    术语上说:get请求是幂等的,post请求是非幂等的。
    如何理解幂等呢,我的理解就是:对于同一种行为,无论执行多少次,它返回的结果都是与第一次没有差异。
    值得注意的是:幂等性指的是作用于结果本身,而并非资源是否相同,可能某个方法可能每次会得到不同的返回内容,但并不影响结果,这样的也满足幂等性,例如get服务器当前时间。
    由于get后续请求都是从浏览器缓存中获取,后续请求结果都与第一次相同,所以它是幂等的。
    而非幂等,则是返回的结果与执行次数有关,每次执行返回不同的结果,最简单的例子就是累加操作。
    由于前面说到,post请求每次都会创建新的资源(结果不同了),所以它是非幂等的。

    ● 关于浏览器对url资源的处理
    前面也说到了,get请求url地址会被浏览器主动缓存,而post不会(除非手动设置)

    ● get 请求的url地址可以被bookmark(存为书签),而post产生的url地址不可以保存为书签,同时get请求的url地址会被存入浏览器历史记录中,而post请求则不会。

    ● 关于参数长度不同的解释,这里我以前也是认为get参数是有长度限制的,post的参数则不限制长度。实际上,通过查阅相关文章,我发现:
    Http的get请求方法提交的数据大小长度并没有限制,Http协议规范没有对URL长度进行限制。目前说的get长度有限制,是特定的浏览器及服务器对它的限制。
    理论上讲,post是没有大小限制的。Http协议规范也没有进行大小限制,起限制作用的是服务器处理程序的处理能力。

    ● 安全性
    get请求参数会暴露在url中进行传输,而post请求参数是放在Request Body中,相对来说比get安全。

    ● get请求只支持url编码,而post支持多种编码方式。

    ● 针对数据的操作不同
    get主要是用来读取数据,而post主要对数据进行增删改。

    ● get比较常见的是通过url发起请求,而post的较为常见的是通过表单发起请求。

    ● get请求产生1个TCP数据包,post请求产生2个TCP数据包。
    对于get方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);而对于post,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。
    相当于post会向服务器发送一次预检请求,服务器会返回一些信息,通过这些信息可以判断该请求是否应该被发起。
    因为POST需要两步,时间上消耗的要多一点,看起来GET比POST更有效。因此Yahoo团队有推荐用GET替换POST来优化网站性能。但这是一个坑!跳入需谨慎。为什么?

    1. GET与POST都有自己的语义,不能随便混用。
    2. 据研究,在网络环境好的情况下,发一次包的时间和发两次包的时间差别基本可以无视。而在网络环境差的情况下,两次包的TCP在验证数据包完整性上,有非常大的优点。
    3. 并不是所有浏览器都会在POST中发送两次包,Firefox就只发送一次。
  • 相关阅读:
    1. CSS 选择器及其优先级?
    马斯克440亿美元收购Twitter一年后:全力“下云”,成本速降60%,功能代码从70万行减少至7万!...
    矩阵乘法的性质
    TBOX开发需求说明
    阿里最新丰碑:国内第一本凤凰架构,全面构建可靠大型分布式系统
    课题学习(八)----卡尔曼滤波动态求解倾角、方位角
    cmd和PyCharm如何调用电脑中有多个版本Python
    [第一章 web入门]粗心的小李
    学院打卡第十天
    每日简报 8月31日简报新鲜事 每天一分钟 了解新鲜事
  • 原文地址:https://blog.csdn.net/qq_43682422/article/details/126127496