【HTTP】GET传参最大长度的理解误区

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了【HTTP】GET传参最大长度的理解误区相关的知识,希望对你有一定的参考价值。

参考技术A

大家都知道http 中 存在 GET 和 POST 这两种最常用的请求方式。(PUT,DELETE不在本文讨论范围之内)

误解:HTTP 协议下的 Get 请求参数长度是有大小限制的,最大不能超过XX,而 Post 是无限制的。

1、首先即使有长度限制,也是限制的是 整个 URI 长度 而不仅仅是你的参数值数据长度

2、HTTP 协议从未规定 GET/POST 的请求长度限制是多少。

**以下内容摘自 《关于 HTTP GET/POST 请求参数长度最大值的一个理解误区》 , 文章时间为 2013年的。可能以当前最新的浏览器有出入 **

3、所谓的请求长度限制是由 浏览器 web 服务器 决定和设置的,各种浏览器和 web 服务器的设定
均不一样,这依赖于各个浏览器厂家的规定或者可以根据 web 服务器的处理能力来设定。

IE 和 Safari 浏览器 限制 2k
Opera 限制4k
Firefox 限制 8k(非常老的版本 256byte)

如果超出了最大长度,大部分的服务器直接截断,也有一些服务器会报414错误。

** 以下内容摘自 《GET请求中URL的最大长度限制总结》 , 文章内容是 2016年9月,相对比较符合当前的最新现状。 **

在网上查询之后,浏览器和服务器对url长度都有限制,现总结如下。

1、IE

IE浏览器(Microsoft Internet Explorer) 对url长度限制是2083(2K+53),超过这个限制,则自动截断(若是form提交则提交按钮不起作用)。

2、firefox

firefox(火狐浏览器)的url长度限制为 65 536字符,但实际上有效的URL最大长度不少于100,000个字符。

3、chrome

chrome(谷歌)的url长度限制超过8182个字符返回本文开头时列出的错误。

4、Safari

Safari的url长度限制至少为 80 000 字符。

5、Opera

Opera 浏览器的url长度限制为190 000 字符。Opera 9 地址栏中输入190 000字符时依然能正常编辑。

1、Apache

Apache能接受url长度限制为8 192 字符

2、IIS

Microsoft Internet Information Server(IIS)能接受url长度限制为16 384个字符。
这个是可以通过修改的(IIS7)
configuration/system.webServer/security/requestFiltering/requestLimits@maxQueryStringsetting.<requestLimits maxQueryString="length"/>

3、Perl HTTP::Daemon

Perl HTTP::Daemon 至少可以接受url长度限制为8000字符。Perl HTTP::Daemon中限制HTTP request headers的总长度不超过16 384字节(不包括post,file uploads等)。但当url超过8000字符时会返回413错误。
这个限制可以被修改,在Daemon.pm查找16×1024并更改成更大的值。

4、ngnix

可以通过修改配置来改变url请求串的url长度限制。

client_header_buffer_size 默认值:client_header_buffer_size 1k

large_client_header_buffers默认值 :large_client_header_buffers 4 4k/8k

关于get和post请求的一些小理解。

  最近在学PHP,然后就突然想琢磨一下前端get和post请求的差异。

  发现了几个以前的误区,比如:GET的URL会有长度上的限制,则POST的数据则可以非常大。但事实是 HTTP协议对GET和POST都没有对长度的限制。

  get请求将请求参数包装在header里面而目前的游览器的url只支持一定的长度,所以造成了get请求参数长度需要规范,但是正是这个原因恰恰让我们觉得get请求是有固定参数长度的。当然还有可能是因为url过长导致服务端响应缓慢。举个最简单的例子,

      IE6.0  :  url最大长度2083个字符,超过最大长度后无法提交。
      IE7.0  :  url最大长度2083个字符,超过最大长度后仍然能提交,但是只能传过去2083个字符。

      IE8.0  :  url最大长度4076个字符,超过该长度会自动忽略后面的内容.

      firefox 3.0.3   :  url最大长度7764个字符,超过最大长度后无法提交。
      Opera 9.52     :  url最大长度7648个字符,超过最大长度后无法提交。
      Google Chrome 2.0.168   :  url最大长度7713个字符,超过最大长度后无法提交。

技术分享图片

如图,这是我自己访问我自己的PHP接口,参数大小接近7k这已经轻松打破了网上的一些1024字节长度的谣言了。




以上是关于【HTTP】GET传参最大长度的理解误区的主要内容,如果未能解决你的问题,请参考以下文章

前端面试:基础javascript篇

前端面试的面试经验

get与post区别

HTTP Get请求URL最大长度

HTTP GET 请求的最大长度

GET/POST 请求参数长度的最大值