get和post区别

get和post区别,是面试中很常见的问题,但是在我遇到的回答中,却总是不尽人意。在这里我记录一下我的理解

  1. get和post的语义不同

    在《http权威指南》p51中介绍了常用的http方法:

    其他的一些方法介绍如下

    HEAD,PUT,TRACE,OPTIONS,DELETE这几个方法服务器不一定会实现,除了这几种方法,服务器还可以自己扩展一些方法,所谓主体:就是http要传输的内容

  2. 从上面的定义可以看出:在规范中,get方法一般用来获取资源数据,具有幂等性, 不会改变资源的状态,不论调用一次还是N次都没有副作用。

    post则一般是用来更新数据的,不具有幂等性,POST所对应的URI并非创建的资源本身,而是资源的接收者,

  3. 承接定义,get方法带的参数是附在header里的。直观上也就是在url?a=1&b=2这样子,在ajax中这个url是写在open方法的第二个参数里

    而post则是把发送的数据附在主体里,数据放在ajax的send方法里

  4. 据上:则可以发现他们还有区别,get的方法的url?a=1&b=2会被浏览器记住:浏览器会有缓存,浏览器历史记录里会存下这个url?a=1&b=2 这里会有一点点安全性问题。。。

    post请求则没有这些烦恼

  5. 据上:get请求在地址栏可见则引出下一个大家公认的区别:部分背黑锅浏览器会对地址栏url有限制。。额大家认为IE是2083字节,而post因为数据是在主体发出,则一般认为无限大,其实这个大小是服务器设置的。。。 额,我也懒得测试了。。。get请求可能超出url限制长度这种情况。。。一般在收集log的情况下发生,var img=new Image();img.src="xxx";额解决办法就是计算一下长度。。超出了就分批发出把。。

  6. get只能用ASCII字符类型数据,而post则可以发送任意数据类型,比如:文件,图片以及字符串

  7. 最后一点区别,浏览器UI交互上的区别:get方法请求的资源。按F5或者刷新按钮重新载入链接的时候浏览器无任何提示。是的,因为它的幂等性

    而post方法,按F5或者刷新按钮重新载入链接的时候浏览器会有confirm提示信息....如果你不明白我说的什么。。点击这里post请求然后按一下刷新F5按钮就明白了

最后留下个问题:大家有没有在实际项目中遇到过某些RD说:你能不能发个请求既有get也有post。。。。

本文标题:get和post区别
本文链接:https://56way.com/p/63.html
作者授权:除特别说明外,本文由 无路 原创编译并授权 小无路 刊载发布。
版权声明:本文不使用任何协议授权,您可以任何形式自由转载或使用。

发表评论

必填

选填

选填

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。