`
zyslovely
  • 浏览: 227864 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

关于http请求url长度以及请求消息体长度的研究

 
阅读更多
说说遇到的问题,因为要收集用户状态的反馈,所以希望将浏览器收集到的用户信息发到服务器上,用GET方式请求一个静态文件,所带的参数便是收集到的信息。为了使收集到的信息有效和准确,所以必须对http协议、浏览器、服务器相关的规范进行了解,合理设置统计参数,不要超出范围。
我首先想到的就是去看HTTP 1.1 协议,看是不是有限制(这协议真是又臭又长.......)。惊奇的发现,原来协议对url是不做长度限制的。原话如下:
"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."
HTTP协议不对URI的长度作事先的限制,服务器必须能够处理任何他们提供资源的URI,并且应该能够处理无限长度的URIs,这种无效长度的URL可能会在客户端以基于GET方式的请求时产生。如果服务器不能处理太长的URI的时候,服务器应该返回414状态码(此状态码代表Request-URI太长)。
注:服务器在依赖大于255字节的URI时应谨慎,因为一些旧的客户或代理实现可能不支持这些长度。

所以从http标准协议上讲没有对url长度进行控制,header头长度是否有限制有待进一步研究协议。对url以及header长度的限制主要取决于服务器以及客户端的限制。

然后先从服务器端入手:
主要看了apache和nginx两种服务器,其他的咱也不熟
在apache的官方文档上找到这样一个配置选项 LimitRequestLine

(http://httpd.apache.org/docs/2.0/mod/core.html#limitrequestbody)
这个参数限制了http请求可以被接受的最大消息大小,默认是无限大的,但是其实这个无限也是有限的,最大不能超过2G。
这就是apache服务器对http请求的相关的一些限制
对于nginx服务器,也有类似的参数
large_client_header_buffers




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




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

该参数对发自客户端的http请求的消息实体大小进行了限制,如果超过该值,则会服务器会返回错误状态码 413(Request Entity Too Large)。此参数默认值为1MB,相当于是限制了post方式提交内容的最大限制

以上便是服务器端对http请求url长度以及请求消息体长度的相关限制,这些我都只是根据其官方文档得出的结果,没有经过实际测试
  • 大小: 29.6 KB
  • 大小: 31.6 KB
  • 大小: 18.5 KB
  • 大小: 16.4 KB
  • 大小: 16.4 KB
分享到:
评论
1 楼 cn23snyga 2014-01-28  
 

相关推荐

    HTTP请求/响应监控工具

    对于每一个HTTP请求,将显示以下信息:主机名,HTTP方法(GET,POST,HEAD),URL路径,用户代理,响应代码,响应字符串,内容类型,Referer信息,内容编码,传输编码,服务器名称,内容的长度,cookie字符串,多...

    get和post请求的区别.pdf

    此外,GET请求对URL长度有限制,这限制了可以发送的数据量。 相比之下,POST请求用于向服务器发送数据,通常用于提交表单数据或上传文件。当浏览器发送POST请求时,数据被包含在请求体中,而不是URL中。这意味着...

    Web应用安全:HTTP协议GET和POST的使用区别实验.pptx

    在POST请求中,查询字符串是在 POST 请求的 HTTP 消息主体中发送的 POST方式请求头和请求体 2、请求参数可见性 POST index.php HTTP/1.1 Host: content=这是post方式里面的一个字段的值 GET和POST使用区别 两种请求...

    使用Http Head方法获取文件长度的实现方法详解

    需求有一个固定URL的文件,服务器端程序会定期的更新这个文件,现在需要写一个工具来监控这个文件的变化。解决办法最初我想到的是把这个文件下载下来,然后通过大小来判断文件是否改变(已知该文件变化时大小会变化...

    Web应用安全:HTTP方法.pptx

    1、HTTP请求的方法 HTTP方法 1、HTTP请求的方法 HTTP方法 2、GET和POST比较 GET POST 点击返回/刷新按钮 没有影响 数据会重新提交 缓存/添加书签 可以 不可以 历史记录 有 没有 编码类型 application/x-...

    求职有道-接口测试面试题

    get请求是通过url提交的,因为浏览器的地址栏有长度限制,所以get请求是有长度限制的 \4. get请求可以直接通过浏览器url发送 2.http和https的区别? \1. http 是明文传输,超文本传输协议。https是加密传输 ...

    HTTP协议详解

    5.1.2请求URL(Request-URI) 5.2请求资源 (The Resource Identified by a Request) 5.3请求报头域 (Request Header Fields) 6 响应 (Response) 6.1 状态行 (Status-Line) 6.1.1状态码与原因短语 (Status ...

    Http1.1超文本传输协议中文版

    5.1.2请求URL(Request-URI) 37 5.2请求的资源 38 5.3请求报头域 39 6 响应 40 6.1 状态行 (Status-Line) 41 6.1.1状态码与原因短语 41 6.2响应头域 44 7 实体(Entity) 45 7.1 实体报文域(Entity Header ...

    博主所搜寻的面试八股文,高达几万字,使用微软的脑图软件制作而成

    包含以下: 非对称加密,又名公钥加密。为数据的加密和解密提供了一个非常安全的办法,使用一对秘钥,公钥和私钥。私钥只能由一方安全保管,不能外泄,而公钥...Get传输的数据量小,因为受URL长度限制,但效率较高;

    在Js页面通过POST传递参数跳转到新页面详解

    客户端请求头缓冲区大小,如果请求头总长度大于小于128k,则使用此缓冲区 client_header_buffer_size 128k; 请求头总长度大于128k时使用 large_client_header_buffers 设置的缓存区 large_client_header_

    MiniExercise.rar

    (2)POST 请求参数可能在请求体中还存在 5. 处理请求参数 (1)通过 Map 封装请求参数 两个方法 (2)考虑一个参数多个值和中文 6. 引入SERVLET (1)将业务代码解耦到对应的业务类中( 具体的Serlvet) 7. 整合配置...

    HTTPNetworkSniffer数据包嗅探器 v1.40绿色中文版.rar

    对于每一个HTTP请求,将显示以下信息:主机名,HTTP方法(GET,POST,HEAD),URL路径,用户代理,响应代码,响应字符串,内容类型,Referer信息,内容编码,传输编码,服务器名称,内容的长度,cookie字符串等.....

    iOS http 学习

    //设置携带的消息体,准备请求 NSURLResponse *response=nil;//获取服务器的响应返回 NSError *error=nil;//获取错误的信息 NSData *data=[NSURLConnection sendSynchronousRequest:request returningResponse:&...

    微信小程序页面传值小探

    各浏览器HTTP Get请求URL最大长度并不相同,几类常用浏览器最大长度及超过最大长度后提交情况如下: IE6.0 :url最大长度2083个字符,超过最大长度后无法提交。 IE7.0 :url最大长度2083个字符,超过最大长度后仍然能...

    微信小程序页面传值实例分析

    各浏览器HTTP Get请求URL最大长度并不相同,几类常用浏览器最大长度及超过最大长度后提交情况如下: IE6.0 :url最大长度2083个字符,超过最大长度后无法提交。 IE7.0 :url最大长度2083个字符,超过最大长度后仍然能...

    nginx waf设计

    mdb|mde|mdt|mdw|mdz|msc|msh|msh1|msh1xml|msh2|msh2xml|mshxml|msi|msp|mst|old|ops|pass|pcd|pdb|pif|pol|prf|prg|printer|pst|pwd|resources|resx|reg|rem|scf|scr|sct|shb|shs|shtm|shtml|soap|stm|sys|url|vb|...

    java-servlet-api.doc

    Servlet引擎解析并载入一个Servlet,这个过程可以发生在引擎启动时,需要一个Servlet去响应请求时,以及在此之间的任何时候。 Servlet引擎利用Java类载入工具载入一个Servlet,Servlet引擎可以从一个本地的文件系统...

    http解析器:用于c的http requestresponse解析器

    HTTP解析器 http-parser。 新项目和希望迁移的项目应考虑 。 这是用C编写的HTTP消息的解析器。...settings.on_url = my_url_callback; settings.on_header_field = my_header_field_callback; /* ... */ http_parser *

    Apache Request-URI Too Large错误解决方法

    代码如下:Request-URI Too Large The requested URL’s length exceeds the capacity limit for this server.关于上面说的这个 Request-URI Too Large...另外据说http协议是没限制URL长度?使用浏览器发送GET请求会受浏

    serverless-http-forward:阿里云函数计算HTTP转发

    发送HTTP请求 链式调用的拦截器,允许跨域,路由权限控制等 不会转发的HTTP请求标头 主持人 不会转发的HTTP响应标头 联系 内容编码 内容长度 日期 活着 传输编码 使用 git clone --depth=1 ...

Global site tag (gtag.js) - Google Analytics