post提交参数的大值(请求参数长度的大值)
一、http post参数值字符过长,PHP服务端接收数据为空
Windows环境下的修改方法
第一步:修改在php下POST文件大小的限制
1.用编辑器打开php.ini
找到:max_execution_time=30,这个是每个脚本运行的长时间,单位秒,修改为:
max_execution_time= 150
找到:max_input_time= 60,这是每个脚本可以消耗的时间,单位也是秒,修改为:
max_input_time= 300
找到:memory_limit= 128M,这个是脚本运行大消耗的内存,根据你的需求更改数值,这里修改为:
memory_limit= 256M
找到:post_max_size= 8M,表单提交大数据为8M,此项不是限制上**个文件的大小,而是针对整个表单的提交数据进行限制的。限制范围包括表单提交的所有内容.例如:发表贴子时,贴子标题,内容,附件等…这里修改为:
post_max_size= 20M
找到:upload_max_filesize= 2M,上载文件的大许可大小,修改为:
upload_max_filesize= 10M
第二步: Apache环境中的档案上传大小控制
修改位于Apahce目录下的httpd.conf
添加下面内容
LimitRequestBody10485760
即10M=10*1024*1024,有的文章中提到应改为 600000000
重新启动apache,就可以在设置里看到你要的大小
Linux环境下的修改方法
vim/etc/php.ini
找到 File Uploadsh区域修改以下几个参数: file_uploads= on;是否允许通过HTTP上传文件的开关。默认为ON即是开 upload_tmp_dir;文件上传至服务器上存储临时文件的地方,如果没指定就会用系统默认的临时文件夹(moodle可以不改)
upload_max_filesize= 8m;允许上传文件大小的大值.
找到 Data Handling区域,修改 post_max_size= 8m;指通过表单POST给PHP的所能接收的大值,包括表单里的所有值。默认为8M
设上述四个参数后,上传小于8M的文件一般不成问题。但如果上传大于8M的文件,只还得设置以下参数:
在Resource Limits区域: max_execution_time= 600;每个PHP页面运行的大时间值(秒),默认30秒 max_input_time= 600;每个PHP页面接收数据所需的大时间,默认60秒 memory_limit= 8m;每个PHP页面所吃掉的大内存,默认8M
二、GET***POST***请求参数长度的大值
1. Get方法长度限制
Http Get方法提交的数据大小长度并没有限制,HTTP协议规范没有对URL长度进行限制。这个限制是特定的浏览器及服务器对它的限制。下面就是对各种浏览器和服务器的大处理能力做一些说明.
浏览器/服务器说明
Microsoft Internet Explorer IE浏览器对URL的大限制为2083个字符,如果超过这个数字,提交按钮没有任何反应。
Firefox对于Firefox浏览器URL的长度限制为65,536个字符
Safari URL大长度限制为 80,000个字符
Opera URL大长度限制为190,000个字符
Google chrome URL大长度限制为8182个字符
Apache Server能接受大url长度为8,192个字符
IIS能接受大url的长度为16,384个字符
通过上面的数据可知,为了让所有的用户都能正常浏览, URL好不要超过IE的大长度限制(2083个字符),当然,如果URL不直接提供给用户,而是提供给程序调用,这时的长度就只受Web服务器影响了。
注:对于中文的传递,终会为urlencode后的编码形式进行传递,如果浏览器的编码为UTF8的话,一个汉字终编码后的字符长度为9个字符。
因此如果使用的 GET方法,大长度等于URL大长度减去实际路径中的字符数。
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的大小限制)
刚看到群里又有同学在说 HTTP协议下的 Get请求参数长度是有大小限制的,大不能超过XX,而 Post是无限制的,看到这里,我想他们定是看多了一些以讹传讹的博客或者书籍,导致一种理解上的误区:
1、首先即使有长度限制,也是限制的是整个 URI长度,而不仅仅是你的参数值数据长度。
2、HTTP协议从未规定 GET/POST的请求长度限制是多少。
The HTTP protocol does not place any a priori limit on the length of a URI. Servers MUST be able to handle the URI of any resource they serve, and SHOULD be able to handle URIs of unbounded length if they provide GET-based forms that could generate such URIs. A server SHOULD return 414(Request-URI Too Long) status if a URI is longer than the server can handle(see section 10.4.15).
Note: Servers ought to be cautious about depending on URI lengths above 255 bytes, because some older client or proxy implementations might not properly support these lengths.
3、所谓的请求长度限制是由浏览器和 web服务器决定和设置的,各种浏览器和 web服务器的设定均不一样,这依赖于各个浏览器厂家的规定或者可以根据 web服务器的处理能力来设定。
The limit is in MSIE and Safari about 2KB, in Opera about 4KB and in Firefox about 8KB,(255 bytes if we count very old browsers). We may thus assume that 8KB is the maximum possible length and that 2KB is a more affordable length to rely on at the server side and that 255 bytes is the safest length to assume that the entire URL will come in.
If the limit is exceeded in either the browser or the server, most will just truncate the characters outside the limit without any warning. Some servers however may send a HTTP 414 error. If you need to send large data, then better use POST instead of GET. Its limit is much higher, but more dependent on the server used than the client. Usually up to around 2GB is allowed by the average webserver. This is also configureable somewhere in the server settings. The average server will display a server-specific error/exception when the POST limit is exceeded, usually as HTTP 500 error.
HTTP 1.1 defines Status Code 414 Request-URI Too Long for the cases where a server-defined limit is reached. You can see further details on RFC 2616. For the case of client-defined limits, there is no sense on the server returning something, because the server won't receive the request at all.
The server is refusing to service the request because the Request-URI is longer than the server is willing to interpret. This rare condition is only likely to occur when a client has improperly converted a POST request to a GET request with long query information, when the client has descended into a URI"black hole" of redirection(e.g., a redirected URI prefix that points to a suffix of itself), or when the server is under attack by a client attempting to exploit security holes present in some servers using fixed-length buffers for reading or manipulating the Request-URI.
附 GET VS POST:
1、多数浏览器对于POST采用两阶段发送数据的,先发送请求头,再发送请求体,即使参数再少再短,也会被分成两个步骤来发送(相对于GET),也就是第一步发送header数据,第二步再发送body部分。HTTP是应用层的协议,而在传输层有些情况TCP会出现两次连结的过程,HTTP协议本身不保存状态信息,一次请求一次响应。对于TCP而言,通信次数越多反而靠性越低,能在一次连结中传输完需要的消息是可靠的,尽量使用GET请求来减少网络耗时。如果通信时间增加,这段时间客户端与服务器端一直保持连接状态,在服务器侧负载可能会增加,可靠性会下降。
Tips:关于
三、post参数超长了怎么办
出现这个错误的原因是因为参数的大小超过了限制,设置为post请求,修改tomcat的server.xml文件
代码如下:
<Connector port="8081" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" maxPostSize="-1" maxHttpHeaderSize="102400"/>
注意:
1、maxPostSize=0’在tomcat-7.0.63之前的版本为不限制请求大小。
2、在tomcat-7.0.63之后为post请求的大值为0,值为-1时才是不受大小限制。
表单提交中get和post方式的区别有5点
3、get是从服务器上获取数据,post是向服务器传送数据。
4、get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到。post是通过HTTPpost机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址。用户看不到这个过程。
5、对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Request.Form获取提交的数据。