浏览器和服务器 对http请求(post get) url长度限制

摘要:
浏览器所允许的每个Cookie的最大长度Firefox和Safari:4079字节Opera:4096字节IE:4095字节服务器中Http请求头长度的限制。Cookie会被附在每次http请求头中传递给服务器,因此还会受到服务器请求头长度的影响。

1. GET URL长度限制

在Http1.1协议中并没有提出针对URL的长度进行限制,RFC协议里面是这样描述的,HTTP协议并不对URI的长度做任何的限制,服务器端 必须能够处理任何它们所提供服务多能接受的URI,并且能够处理无限长度的URI,如果服务器不能处理过长的URI,那么应该返回414状态码。

虽然Http协议规定了,但是Web服务器浏览器对URI都有自己的长度限制。

服务器的限制:我接触的最多的服务器类型就是Nginx和Tomcat,对于url的长度限制,它们都是通过控制http请求头的长度来进行限制 的,nginx的配置参数为large_client_header_buffers,tomcat的请求配置参数为 maxHttpHeaderSize,都是可以自己去进行设置。

  client_header_buffer_size 512k;
  large_client_header_buffers 7 512k;

浏览器的限制:每种浏览器也会对url的长度有所限制,下面是几种常见浏览器的url长度限制:(单位:字符)

  • IE : 2803

  • Firefox:65536

  • Chrome:8182

  • Safari:80000

  • Opera:190000

对于get请求,在url的长度限制范围之内,请求的参数个数没有限制。

2. Post数据的长度限制

Post数据的长度限制与url长度限制类似,也是在Http协议中没有规定长度限制,长度限制可以在服务器端配置最大http请求头长度的方式来实现。 nginix默认限制1M

可以选择在http{ }中设置:client_max_body_size   20m;
 也可以选择在server{ }中设置:client_max_body_size   20m;
还可以选择在location{ }中设置:client_max_body_size   20m;
三者到区别是:http{} 中控制着所有nginx收到的请求。而报文大小限制设置在server{}中,则控制该server收到的请求报文大小,同理,如果配置在location中,则报文大小限制,只对匹配了location 路由规则的请求生效。
     http{
#控制全局nginx所有请求报文大小
#client_max_body_size   20m;
                server{
#控制该server的所有请求报文大小
#client_max_body_size   20m;
                        location a {
                        }
                        location b{
#控制满足该路由规则的请求报文大小
#client_max_body_size   20m;
                        }
                }
                server {
                }
     }

3. Cookie的长度限制

Cookie的长度限制分这么几个方面来总结。

(1) 浏览器所允许的每个域下的最大cookie数目,没有去自己测试,从网上找到的资料大概是这么个情况

  • IE :原先为20个,后来升级为50个

  • Firefox: 50个

  • Opera:30个

  • Chrome:180个

  • Safari:无限制

当Cookie数超过限制数时浏览器的行为:IE和Opera会采用LRU算法将老的不常使用的Cookie清除掉,Firefox的行为是随机踢出某些Cookie的值。当然无论怎样的策略,还是尽量不要让Cookie数目超过浏览器所允许的范围。

(2) 浏览器所允许的每个Cookie的最大长度

  • Firefox和Safari:4079字节

  • Opera:4096字节

  • IE:4095字节

(3) 服务器中Http请求头长度的限制。Cookie会被附在每次http请求头中传递给服务器,因此还会受到服务器请求头长度的影响。

免责声明:文章转载自《浏览器和服务器 对http请求(post get) url长度限制》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇使用SQLAlchemy操作已存在的数据库的表Ubuntu 搭建ELK下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

jsp------实现MD5加密

index.jsp <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()...

HttpClient 教程 (A)

前言 超文本传输协议(HTTP)也许是当今互联网上使用的最重要的协议了。Web服务,有网络功能的设备和网络计算的发展,都持续扩展了HTTP协议的角色,超越了用户使用的Web浏览器范畴,同时,也增加了需要HTTP协议支持的应用程序的数量。 尽管java.net包提供了基本通过HTTP访问资源的功能,但它没有提供全面的灵活性和其它很多应用程序需要的功能。Ht...

uni-app v-bind绑定属性

mustache表达式不能在标签中使用,那么标签中想要动态绑定变量怎么办? 使用v-bind 比如: data() { return { url:"../HelloWord/HelloWord", } }, 页面上...

electron用默认浏览器打开链接的3种实现方式

在使用electron开发桌面程序的过程中,我们可能经常需要让electron程序中包含的链接在被点击后直接调用系统的默认浏览器打开,仔细看了文档的都知道其核心原理就是通过electron的shell模块中的openExternal方法来调用系统默认浏览器打开链接,但是对于其实现又有不同的方法,彻底的接管,选择性的接管,瞎 main介绍3中行之有效的方法。...

Axja(2) post()和get()方法

  load()方法是局部方法,因为他需要一个包含元素的jQuery 对象作为前缀。而$.get()和$.post()是全局方法,无须指定某个元素。对于用途而言,.load()适合做静态文件的异步获取,而对于需要传递参数到服务器页面的,$.get()和$.post()更加合适。 jQuery.post(url, [data], [callback], [t...

jsp弹出新窗口代码

1、最基本的弹出窗口代码其实代码非常简单:  <SCRIPT LANGUAGE="javascript">   <!--   window.open (page.html); --> </SCRIPT>     因为这是一段javascripts代码,所以它们应该放在<SCRIPT LANGUAGE="j...