zoukankan      html  css  js  c++  java
  • Get请求携带数据量的各种限制及解决办法、Post请求说明

     1.   Get请求携带数据量的各种限制及解决办法

    Http Get方法提交的数据大小长度并没有限制,HTTP协议规范没有对URL长度进行限制。这个限制是特定的浏览器及服务器对它的限制。

    到新公司处理的第一个线上问题是某个商品页,在某个人机器上访问失败,nginx返回400错误,但其它人机器上没有问题,即使用虚拟机重建了出问题机器的软硬件环境也不会出问题。

    经过对出问题机器的http请求进行抓包,发现URL超长,cookie也很大,然后问题就很清楚了,因为大部分人用的是IE浏览器,IE浏览器限 制了URL长度,做了自动截断处理,所以总的http header不会超出nginx的限制,可以正常返回,而使用同样浏览器,不限制URL长度,但cookie长度较短,没超过nginx的header缓 冲区限制,也不会造成400错误。


    解决办法就是修改nginx、tomcat等使用到的应用服务器,让他们支持更大的header缓冲区。当然从兼容性等方面的考虑,根本解决办法是不要通过GET方式传递超长的参数。


    ==================下边列出了各个浏览器的限制和处理办法=========================

    附:各浏览器对URL的长度限制(单位:字符个数)
    IE : 2083
    Firefox:65536
    Chrome:8182
    Safari:80000
    Opera:190000

    附:各Web服务器对URL的长度限制(单位:字符个数)

    Apache (Server)

    能接受最大url长度为8,192个字符。

    Microsoft Internet Information Server(IIS)

    能接受最大url的长度为16,384个字符。

    通过上面的数据可知,为了让所有的用户都能正常浏览, URL最好不要超过IE的最大长度限制(2083个字符),当然,如果URL不直接提供给用户,而是提供给程序调用,这时的长度就只受Web服务器影响了。

    注:对于中文的传递,最终会为urlencode后的编码形式进行传递,如果浏览器的编码为UTF8的话,一个汉字最终编码后的字符长度为9个字符。

    因此如果使用的 GET 方法,最大长度等于URL最大长度减去实际路径中的字符数。



    附:各浏览器允许域下的最大cookie数目
    IE :原先为20个,后来升级为50个
    Firefox: 50个
    Opera:30个
    Chrome:180个
    Safari:无限制


    附:浏览器所允许的每个Cookie的最大长度
     
    Firefox和Safari:4079字节
    Opera:4096字节
    IE:4095字节


    附:各应用服务器设置header头部的参数

    nginx:client_header_buffer_size和large_client_header_buffers
    tomcat:maxHttpHeaderSize
     
    Tomcat之get请求长度设置:
    <Connector port="8080" maxHttpHeaderSize="65536"
     
     

    2.    POST请求长度限制

    理论上讲,POST是没有大小限制的。HTTP协议规范也没有进行大小限制,起限制作用的是服务器的处理程序的处理能力。

    如:在Tomcat下取消POST大小的限制(Tomcat默认2M);

    打开tomcat目录下的conf目录,打开server.xml 文件,修改

    <Connector

    debug="0"

    acceptCount="100"

    connectionTimeout="20000"

    disableUploadTimeout="true"

    port="8080"

    redirectPort="8443"

    enableLookups="false"

    minSpareThreads="25"

    maxSpareThreads="75"

    maxThreads="150"

    maxPostSize="0"

    URIEncoding="GBK"

    </Connector>

    增加红色字体部分 maxPostSize="0" (设为0是取消POST的大小限制)

     
     
  • 相关阅读:
    【转载】在Linux中使用VS Code编译调试C++项目
    【转载】Visual Studio 2015 for Linux更好地支持Linux下的开发
    【转载】ODBC, OLEDB, ADO, ADO.Net的演化简史
    【转载】OLE DB, ADO, ODBC关系与区别
    【转载】ADO,OLEDB,ODBC,DAO的区别
    【转载】Linux系统启动流程
    91. Decode Ways
    90. Subsets II
    89. Gray Code
    88. Merge Sorted Array
  • 原文地址:https://www.cnblogs.com/wenlj/p/4537978.html
Copyright © 2011-2022 走看看