HTTP协议不对URI的长度作事先的限制,服务器必须能够处理任何他们提供资源的URI,并且应该能够处理无限长度的URIs,这种无效长度的URL可能会在客户端以基于GET方式的请求时产生。如果服务器不能处理太长的URI的时候,服务器应该返回414状态码(此状态码代表Request-URI太长)。 具体参见协议   ietf.org/rfc/rfc2616.txt 虽然协议中未明确对url进行长度限制,但在真正实现中,url的长度还是受到限制的: 一是服务器端的限制; 二就是游览器端的限制

url长度限制

1,浏览器

浏览器

最大长度(字符)

备注

Internet Explorer

2083

Firefox

65,536

chrome

8182

curl(linux下指令

8167

2,服务端

即使客户端同意发送无限长度的URI,但是服务器一方一般都是有长度限制的。一般服务是没有专门针对URI的参数限制的,但是由于URI是会包含在request header中的,所以对header的大小限制是会对URI起作用的

ps:URI在HTTP协议中是叫做request-Line的,如果具体看协议,是会发现request-Line和request-header是两个不一样的,就是说request的请求其实该分为request-line, request-header, request-body三个部分的但是好像使用的时候都默认将header中理解为包含了request-line。

Header

header中存放的信息非常多,比如request-line,cookie,还有各种key-value的特定header字段和值。有点时候,我们也会往header中添加一些自定义的属性。header的长度和URI的情况是一样的。协议中并没有显示限制header的大小。理论上在header中放多少属性都是可以的。但是......

2.1 nginx

large_client_header_buffers 7 512k; //该参数对nginx服务器接受客户端请求的头信息时所分配的最大缓冲区的大小做了限制,也就是nginx服务器一次接受一个客户端请求可就收的最大都信息大小。这个头不仅包含 request-line,还包括通用信息头、请求头域、响应头域的长度总和。这也相当程度的限制了url的长度。nginx服务器默认的限制是4K或者8K,这是根据服务器的硬件配置有关的,一般为内存一页的大小,目前大部分为4K,即4096字节。

client_header_buffer_size 512k; //该参数对发自客户端的http头信息的大小进行了限制,这个值和large_client_header_buffers同时限制了http请求头的大小,超过其中一个值则服务器会返回错误状态码 414(Request-URI Too Large)。该参数的默认值为1K

2.2 tomcat

LimitRequestLine //从定义来看,这个选项限制的并不是url的长度,也不是head头的长度,而是是http请求中 request-line的长度(相关定义:http://www.w3.org/Protocols/rfc2616/rfc2616-sec5.html#sec5.1)。即:Request-Line = Method SP Request-URI SP HTTP-Version CRLF 的长度。但这很大程度上也就限制的GET、HEAD请求的参数长度,因为GET和HEAD请求是不会向服务器发送消息实体(message-body)的。可以说这个限制就是限制了url的长度不能超过该设定的值,如果超过了,服务器会返回错误状态码 414(Request-URI Too Large)。tomcat(8.0版本)允许的http请求header的最大值是8024个字节(8KB) maxHttpHeaderSize="3145728" --可以设置这个控制请求url长度

post

nginx服务器

在nginx的配置文件中进行配置,限制请求报文体的大小,nginx默认大小是1M,相当于是限制了post方式提交内容的最大限制。 client_max_body_size   20m; //可以在http、server、location中加入此配置。 tomcat服务器  整个消息体限制 LimitRequestBody  这个参数限制了http请求可以被接受的最大消息大小,默认是无限大的,但是其实这个无限也是有限的,最大不能超过2G。

tomcat默认设置表单提交数据大小上限为2m,数据大于2m,java后台将接收不到数据,解决办法是修改tomcat的server.xml中maxPostSize的值,将其设置为0即为无上限,7.0 以上版本 maxPostSize 设置为 -1

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请求头中传递给服务器,因此还会受到服务器请求头长度的影响。

Html5 LocalStorage

Html5提供了本地存储机制来供Web应用在客户端存储数据,尽管这个并不属于Http协议的一部分,但是随着Html5的流行,我们可能需要越来越多使用LocalStorage,甚至当它普及的时候跟它打交道就会同今天我们跟Cookie打交道一样多。

对于LocalStorage的长度限制,同Cookie的限制类似,也是浏览器针对域来限制,只不过cookie限制的是个数,LocalStorage限制的是长度: Firefox\Chrome\Opera都是允许每个域的最大长度为5MB,但是这次IE比较大方,允许的最大长度是10MB

Http请求 url 请求头 请求体 大小长度限制相关推荐

  1. c语言 get post请求,URL GET/POST请求目标-c

    我必须向localhost发送get或post请求: if(@$_GET['option']) { echo "You said \"{$_GET['option']}\" ...

  2. ajax请求url python,ajax请求方式

    1.form序列化ajax $.ajax({ url: "/add_host_ajax", type: 'POST', contentType: "application ...

  3. java请求url加密_URL请求对参数前端JS加密,后台JAVA解密

    import java.io.ByteArrayOutputStream; /** * 表单传输信息加密 * @author wutz * */ public class Base64Util { p ...

  4. python如何获取请求的url_听说你在学习:如何通过代码请求URL地址

    最近比较忙碌,都没有时间更新公众号文章,表示比较惭愧.最近翻看了一下自己的博客,发现这篇文章的内容还是挺实用,所以,想分享给大家,欢迎阅读.在后续,我会从一个范围的角度进行编写一系列文章,便于各位深层 ...

  5. aop 获取方法入参出参_Spring AOP获取请求URL的入参及返回值(通用方法)

    以下代码为通用的代码,其中json解析使用的是fastJson,可以记录用户访问的ip.url.入参和出参 /** * @author jasonLu * @date 2017/10/26 9:57 ...

  6. HTTP请求URL的大小限制

    HTTP 1.1 协议对url是不做长度限制的,原话如下: "The HTTP protocol does not place any a priori limit on the lengt ...

  7. [JavaWeb-HTTP]HTTP_请求消息_请求头请求体

    请求消息数据格式 1. 请求行请求方式 请求url 请求协议/版本GET /login.html HTTP/1.1* 请求方式:* HTTP协议有7中请求方式,常用的有2种* GET:1. 请求参数在 ...

  8. 请求消息详解(请求头、get、post、请求体)

    简述 我们在servlet的service方法中有两个参数,分别是ServletRequest和ServletResponse,如果想掌握这两个参数,我们必须对请求消息和响应消息有个深入的理解. 请求 ...

  9. 不会接口测试?用Postman轻松入门(四)——Post请求url格式请求体

    对HTTP协议报文有了充分了解之后,上一节我们对get请求进行了详尽的测试,由于get请求没有请求体,相对来说比较简单,接下来我们加上请求体,看看使用post接口如何完成各种不同类型请求体的请求操作. ...

最新文章

  1. 会议报名丨CSSNLP 2020 第一届中国自然语言处理学生研讨会开放注册
  2. Asp.net Dynamic Data之三改变编辑和操作数据的现实方式
  3. 两条平行导线同向电流_电磁学(9)——磁场对电流的作用,安培力
  4. 解释java程序所使用的命令是,Java程序的执行原理以及解释说明
  5. cstring::replace不区分大小写_Excel VBA之函数篇-3.11订单号千奇百怪,如何按照结构区分来源...
  6. 请问你写书法多少年了?领悟到了什么?
  7. _如何在 Linux 上安装 Minecraft 服务器
  8. [TACL17]基于中序转移的成分句法分析
  9. 为什么索引可以让查询变快?终于有人说清楚了!
  10. windows 2003 server IIS权限设置
  11. 【STP】生成树协议及STP 802.1D (上)
  12. firefox浏览器书签意外丢失恢复经验
  13. arcgis图例背景白色,留出空间
  14. VC MFC C++ MQTT VC编译MQTT VC调用MQTT dll eclipse-paho-mqtt
  15. OneNote应用技巧
  16. 70 Three.js 导入STL格式的模型
  17. 电源设计经验谈1-9
  18. 自动切换输入法--Mac高效切换输入法工具
  19. 超唯美海洋夕阳日落网站维护HTML源码
  20. [转贴]金庸的九家著名公司

热门文章

  1. Inno Setup学习心得(2)
  2. python数值积分_Python-Scipy进行数值积分
  3. 想想来时的路,看看现在的你
  4. MFC使用GetDlgItem获取控件导致程序崩溃的问题
  5. HTML5中input常用属性,input 有哪些属性
  6. 高性能跨全端图表组件--uCharts
  7. python漫画爬虫+GUI界面开发
  8. linux dns子域授权(一),DNS子域授权_Sueking Linux Blog的技术博客_51CTO博客
  9. 计算机的发展几应用的板书设计,《计算机结构原理初步》教案
  10. Plato Farm深耕GameFi赛道,2022年是否成为顶级元宇宙代表之一?