http协议的get和post方法的区别

http协议的get和post方法的区别http协议的get和post方法的区别

大家好,又见面了,我是你们的朋友全栈君。

http协议的get和post方法的区别

一、常见说法

      相信许多人都或多或少知道get和post区别,大家最常说的几个区别无非是一下几个:

1. 请求报文格式不同,即Get使用Url或cookie传参数,而post使用body传参数:

     a. POST请求格式
           // 请求方法 请求url 协议/版本
          POST /lance/query HTTP/1.1
           // 请求头
          Accept:image/gif.image/jpeg,*/*
          Accept-Language:zh-cn 
          Content-Length: 28
          // 请求的body,与请求头之前有一个空行
         username=lance&password=abcd
     b. get请求格式
             // 请求方法 请求url 协议/版本
        POST /lance/query?username=lance&password=abcd HTTP/1.1
             // 请求头
         Accept:image/gif.image/jpeg,*/*
         Accept-Language:zh-cn 

2. get的url会有长度限制,而Post数据则可以不受url的限制,可以很大
3. post比get安全,因为传递参数在url中不可见

     如果是一个刚毕业的本科生述说这些还可以理解,如果你是已经工作N年后的老司机,你在说这些就实在是没法理解了。

二、事实真相

1. get和post与传递参数的方式没有关系

    get和post是http协议定义的方法,方法、url、body和headers之间的组合使用,不受任何限制,即使用哪个方法与和使用什么传参方式没有任何限制(post也可以使用url传参,get也可以使用body传参)。但是HTML标准为了规范使用,确实做了get和post的使用说明,故大家会产生get和post传参方式的误解。但是现代许多服务器不仅支持使用浏览器访问,还支持浏览器之外的其他客户端使用,就没有考虑html标准的约定。

2. URL长度的限制

     http协议并没有对url,body和headers做长度的限制,但是不同的浏览器和服务器在实现http协议时,为了不对服务造成影响,提高服务的可用性,一般都做了限制,不同的浏览器和服务器具体长度限制不同,许多服务可以通过配置设置最大数据请求长度:
浏览器:最大URL长度(转自:http://www.cnblogs.com/henryhappier/archive/2010/10/09/1846554.html,仅供参考)
IE:2083个字符
Firefox:65,536个字符
Safari:80,000
Opera:190,000
Google chrome :8182

3. 安全问题

       因为get和post与传递参数的方式没有关系,那也就不存在get比post更安全的问题了。但是针对html标准约定的get和post,一个用于获取数据,一个用于修改数据,带来的安全问题如下:

Web服务器客户端浏览器提交的数据时,首先将数据保存到内存接收缓存区中,然后在做以后的处理动作。由于post方法有Content-Length长度标记(Content-Length如果存在,则必须和消息内容的传输长度相等,如果过短则会截断,过长则会导致超时),Web服务器根据Content-Length大小创建一个等于或稍大的存储空间;对于get方法,因为不知道提交的数据大小,只能估计缓冲区长度,如果估计的很大而接收数据很小会造成内存浪费,而如果估计大小小于接收数据,就可能造成缓冲区溢出。


参考资料:
1.http://blog.sina.com.cn/s/blog_9f6de58301018axo.html

2.http://www.cnblogs.com/henryhappier/archive/2010/10/09/1846554.html



版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/149541.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 如何在Pycharm上安装PyQt5[通俗易懂]

    如何在Pycharm上安装PyQt5[通俗易懂]这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好!这是你第一次使用Markdown编辑器所展示的欢迎页。如果你想学习如何使用Mar

  • 盘点值得互联网创业者学习的十大做事风格

    盘点值得互联网创业者学习的十大做事风格中国互联网通过第19次互联网报告得出很多数据,综合成一句话就是:“发展速度惊人。”面对如此庞大的市场,国外网络巨头虎视眈眈,总想找机会跨进国门,却因为不了解中国互联网运营规范及网民的习惯,或是犹豫不决或是屡遭搁浅。  而与此同时,国内众多网站正在疯狂抢夺这块蛋糕。在这些网站的背后出谋划策的人都是大众较熟悉的,他们的思路以及做事风格,值得现在的互联网创业者学习、借荐,有相似者可对号入座。

  • python–随机生成汉字、数字「建议收藏」

    python–随机生成汉字、数字「建议收藏」一、随机生成汉字:第一种方法:Unicode码在unicode码中,汉字的范围是(0x4E00,9FBF)这个方法比较简单,但是有个小问题,unicode码中收录了2万多个汉字,包含很多生僻的

  • PyTorch安装最全流程

    PyTorch安装最全流程本文介绍基于Anaconda环境以及PyCharm软件结合,安装PyTorch深度学习框架。1.Anaconda安装下载链接:https://www.anaconda.com/1.1点击Next1.2点击同意1.3点击Next1.4选择目标文件夹,点击下一步1.5将Anaconda加入到系统变量安装成功后,在CMD中检查Anaconda时候加入到环境变量中。1.6单击启动AnacondaPrompt创建虚拟“房间”通过conda创建一个名为:pytorch.

  • WebService使用实例

    WebService使用实例

  • 黑苹果完整安装教程,内含后续系统优化「建议收藏」

    黑苹果完整安装教程,内含后续系统优化「建议收藏」第一种安装:VM虚拟机这类主讲装双系统,VM虚拟机参考博客https://blog.csdn.net/doudou19930614/article/details/81407446虚拟机下载:http://www.epinv.com/post/10434.html第二种安装:双系统准备工具:1.镜像https://osx.cx/tag/原版镜像/或者度盘链接:https://p…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号