16
2012-12

http网络协议中的长度限制有哪些?

  刚才无事网上瞎逛的时候看到有一起培训的同学自己最近去面试时被问到的面试题,看到有人被问到URL的最大长度、Cookie的最大长度之类的问题,如果平时不是很注意http细节的话这些问题还真是不好回答,另外除了面试,知道这些长度限制,有时候开发时碰到问题心里也能有个数,想到自己对这些问题也不是特别熟悉,于是就在这里总结下——Http协议当中的各种长度限制。
  1. Post数据的长度限制
  Post数据的长度限制与url长度限制类似,也是在Http协议中没有规定长度限制,长度限制可以在服务器端配置最大http请求头长度的方式来实现。
  2. 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,都是可以自己去进行设置。
  浏览器的限制:每种浏览器也会对url的长度有所限制,下面是几种常见浏览器的url长度限制:(单位:字符)
  IE : 2803
  Firefox:65536
  Chrome:8182
  Safari:80000
  Opera:190000
  对于get请求,在url的长度限制范围之内,请求的参数个数没有限制。
  3.Html5 LocalStorage
  Html5提供了本地存储机制来供Web应用在客户端存储数据,尽管这个并不属于Http协议的一部分,但是随着Html5的流行,我们可能需要越来越多使用LocalStorage,甚至当它普及的时候跟它打交道就会同今天我们跟Cookie打交道一样多。
  对于LocalStorage的长度限制,同Cookie的限制类似,也是浏览器针对域来限制,只不过cookie限制的是个数,LocalStorage限制的是长度:
  Firefox\Chrome\Opera都是允许每个域的最大长度为5MB
  但是这次IE比较大方,允许的最大长度是10MB
  4. 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://www.shiyayong.cn/post/http.html

评论列表:

发表评论:

(设置个性头像)

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

无觅相关文章插件,快速提升流量