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



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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 为什么领导不喜欢提拔老实人?退休的领导说出了实话

    为什么领导不喜欢提拔老实人?退休的领导说出了实话

    2022年2月14日
    51
  • VS中新建Qt项目工程后显示无法打开源文件“QtWidgets/QApplication”的解决方案「建议收藏」

    VS中新建Qt项目工程后显示无法打开源文件“QtWidgets/QApplication”的解决方案「建议收藏」环境:VS2015+Qt5.6在vs中新建工程后一般都会显示无法打开源文件“QtWidgets/QApplication”,就像这样:这是什么原因呢?这是因为,新建Qt项目时VC++包含目录没有自动包含Qt所需要的头文件路径,需要手动添加,具体操作步骤如下:1.在工程中右击项目,点击属性。2.选择VC++目录->包含目录,按图所示步骤操作。3.选择Q…

    2022年6月29日
    430
  • VB学习记录[通俗易懂]

    VB学习记录[通俗易懂]一、什么是VBVB程序设计是要干什么?1.添加、设置对象;2.对对象添加功能。编程的基本要素-对象object-类class-属性property-方法method-事件event事件过程的一般格式:privatesub对象名称_事件名称()……事件响应程序代码……En…

    2022年6月21日
    25
  • kubernetes教程入门_centos7搭建k8s集群

    kubernetes教程入门_centos7搭建k8s集群文章目录第一章 kubernetes简介01 部署方式的演变容器部署的编排问题:解决以上问题的容器编排管理工具:02 k8s简介主要功能:03 k8s组件04 k8s概念第二章 k8s集群环境搭建05 环境规划**集群类型:**安装方式:主机规划:06 环境搭建 主机安装07 环境初始化1.检查centos版本2.主机名解析3.时间同步4.禁用防火墙服务iptables和firewalld5.禁用linux的安全服务selinux6.禁用swap分区7.修改linux内核参数8.配置ipvs功能9.重启系统

    2022年8月11日
    9
  • SQL文件导入Oracle数据库

    SQL文件导入Oracle数据库直接复制SQL文件至pl/sql中执行,若sql文件过大会直接导致数据库卡死,未避免数据库卡死,可直接使用pl/sql工具提供的导入表功能将sql文件直接导入数据库表中1.如下图所示:链接数据库,选择工具–》导入表2.如下图示:选择SQL导入—使用命令窗口–》选择要导入的sql文件–》点击导入按钮3.如下图所示:若提示Done,则表示导入成功,导入成功后需要点击com…

    2022年10月2日
    2
  • 牛顿法和梯度下降法_最优化次梯度法例题

    牛顿法和梯度下降法_最优化次梯度法例题我们每个人都会在我们的生活或者工作中遇到各种各样的最优化问题,比如每个企业和个人都要考虑的一个问题“在一定成本下,如何使利润最大化”等。最优化方法是一种数学方法,它是研究在给定约束之下如何寻求某些因素

    2022年8月5日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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