`
zyslovely
  • 浏览: 231525 次
  • 性别: 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  
 

相关推荐

    4中url请求方式,包括http和spring自带请求

    在IT行业中,网络通信是核心部分之一,而URL(统一资源定位符)请求方式是实现这一通信的关键。本文将深入探讨四种主要的URL请求方式,包括HTTP基础请求方法以及Spring框架中的请求工具类。我们将讨论它们的工作原理...

    Demo HTTP请求工具

    在实际应用中,这样的测试用例通常会包括设置请求URL、定义请求头(如Content-Type)、构造请求体,以及处理响应结果等步骤。 HTTP请求的组成部分包括: - 请求行:包含请求方法(如GET或POST)、请求URI和HTTP...

    boost之http请求及chunked解析

    在本话题中,我们将探讨如何利用Boost.ASIO库进行HTTP请求,并专注于处理“chunked”编码,这是一种在HTTP传输过程中分块发送数据的方式。 首先,Boost.ASIO是Boost库的一部分,专门用于异步I/O操作,如网络通信。...

    网络Http请求的完整封装

    本项目"网络Http请求的完整封装"旨在提供一个全面的解决方案,方便开发者快速、高效地处理各种HTTP请求,包括GET和POST,以及图片下载功能。同时,它还包含了网络请求的进度显示和跨线程通信机制,极大地提高了用户...

    C#实现发送简单HTTP请求的方法

    在C#编程中,发送HTTP请求是常见的网络通信任务,用于获取或提交Web资源。本文将详细介绍如何使用C#实现这个功能,特别是针对简单的GET请求。C#提供了System.Net命名空间下的WebRequest和WebResponse类,它们使得与...

    C/C++ http请求

    - HTTP请求由请求行(包含方法、URL和协议版本)、请求头和可选的请求体组成。 - 常见的HTTP方法有GET、POST、PUT、DELETE等。 - 请求头用于提供附加信息,如用户代理、内容类型、授权等。 3. **套接字编程**: ...

    C++ http post get请求,第三方库,调试的时候,使用wireshark抓包,对比

    在C++的HTTP请求调试中,Wireshark可以帮助我们查看POST和GET请求的实际内容,包括请求头、请求体、响应头和响应体,这对于查找问题非常有帮助。 - **使用Wireshark抓包**:首先启动Wireshark,然后在你的应用中...

    C++实现HTTP GET,POST请求

    C++实现POST请求时,除了构造请求头,还需添加Content-Length字段表示请求体的长度,以及实际的请求体内容: ```cpp void sendHttpPostRequest(const std::string& url, const std::string& postData) { // 同样...

    android Http请求

    本文将详细介绍Android中的四种主要HTTP请求方式:GET、POST、HttpClient以及OkHttp,并探讨它们的应用场景和优缺点。 一、GET请求 GET是最常见的HTTP请求方法,主要用于获取资源。它将请求参数附加到URL后面,以...

    http请求,http get请求,http post请求

    本篇将详细探讨HTTP请求,特别是GET和POST请求,以及如何通过源码工具进行操作。 一、HTTP请求基础 HTTP请求是由客户端(如浏览器)发起,向服务器请求资源的动作。它由请求行、请求头、空行和请求体四部分组成。...

    C# HTTP/Https 请求demo

    - `httptest2.cs`可能包含了具体的HTTP请求实现,比如创建`HttpClient`实例,设置请求头,以及处理响应。 5. **配置文件App.config**: 这个文件通常用于存储应用程序的配置信息,比如连接字符串、API密钥或者...

    http的请求处理PHP类

    GET请求通常用于获取资源,其参数通过URL传递,且对数据长度有限制,一般不超过2KB。POST请求则常用于提交数据,可以处理更大、更复杂的数据,参数通过请求体传递。 在PHP中,我们可以使用内置的`$_GET`和`$_POST`...

    http两种请求方式post和get请求的区别

    - POST 请求:数据被封装在请求体中,不在 URL 显示,从而提供了更高的数据安全性。当需要提交表单、创建新资源或更新已有资源时,POST 请求是首选。 2. 数据量: - GET 请求:受到 URL 长度限制,一般不超过 ...

    java后台请求http并保持Session

    POST方法用于向服务器发送数据,如表单提交,参数在请求体中,不显示在URL上,且数据量无限制。 1. **GET请求**: - 使用`java.net.URL`和`java.net.HttpURLConnection`类创建GET请求。首先,构造URL对象,然后...

    http get post 请求接口工具类

    它将数据附加到URL路径中,限制了请求的数据长度,通常用于获取非敏感或幂等的数据。 - POST:POST请求用于向服务器提交数据,一般用于创建新资源。POST请求的数据放在请求体中,可以携带大量数据,适用于表单提交...

    HTTP请求(包括GET与POST请求)

    3. 构建请求:根据GET或POST方法构造HTTP请求头,包括请求行、头部字段和可选的请求体。 4. 发送请求:通过socket将HTTP请求发送到服务器。 5. 接收响应:接收服务器返回的HTTP响应,包括状态行、头部和响应体。 6. ...

    C#后台访问url请求结果

    ### C#后台访问URL请求结果知识点详解 #### 一、函数功能概述 本文将详细介绍一个在C#中用于后台访问URL并获取响应结果的方法:`GetURLResult`。该方法支持HTTP请求中的两种常见方法——GET和POST,并允许指定数据...

    http get post 请求模拟器

    "使用说明.txt"文件很可能是关于如何操作这个HTTP请求模拟器的详细指南。通常,这样的文档会涵盖启动工具、设置请求参数、发送请求和解读响应等内容,对于初学者来说十分有用。 5. 当下软件园.url: 这是一个快捷...

    模拟http请求 post get

    GET请求通常显示在浏览器地址栏,参数通过URL携带,有长度限制,适合查询操作。 2. POST:POST请求用于向服务器发送数据,通常用于创建新资源。它不显示在地址栏,可以传输大量数据,且对服务器有副作用,比如提交...

    HTTPPOST请求

    1. 客户端(通常是浏览器)创建一个HTTP请求,设置请求方法为POST,指定目标URL,并在请求体中附带要发送的数据。 2. 客服端将请求发送到服务器。 3. 服务器接收到请求后,解析请求头和请求体,根据请求数据执行相应...

Global site tag (gtag.js) - Google Analytics