关于 HTTP GET/POST 请求参数长度最大值

1.    Get方法长度限制

Http Get方法提交的数据大小长度并没有限制,HTTP协议规范没有对URL长度进行限制。这个限制是特定的浏览器及服务器对它的限制。

如:IE对URL长度的限制是2083字节(2K+35)。

下面就是对各种浏览器和服务器的最大处理能力做一些说明.

Microsoft Internet Explorer (Browser)

IE浏览器对URL的最大限制为2083个字符,如果超过这个数字,提交按钮没有任何反应。
Firefox (Browser)

对于Firefox浏览器URL的长度限制为65,536个字符。

Safari (Browser)

URL最大长度限制为 80,000个字符。

Opera (Browser)

URL最大长度限制为190,000个字符。

Google (chrome)

URL最大长度限制为8182个字符。

Apache (Server)

能接受最大url长度为8,192个字符。

Microsoft Internet Information Server(IIS)

能接受最大url的长度为16,384个字符。

通过上面的数据可知,为了让所有的用户都能正常浏览, URL最好不要超过IE的最大长度限制(2083个字符),当然,如果URL不直接提供给用户,而是提供给程序调用,这时的长度就只受Web服务器影响了。

注:对于中文的传递,最终会为urlencode后的编码形式进行传递,如果浏览器的编码为UTF8的话,一个汉字最终编码后的字符长度为9个字符。

因此如果使用的 GET 方法,最大长度等于URL最大长度减去实际路径中的字符数。

2.    POST方法长度限制

理论上讲,POST是没有大小限制的。HTTP协议规范也没有进行大小限制,起限制作用的是服务器的处理程序的处理能力。

如:在Tomcat下取消POST大小的限制(Tomcat默认2M);

打开tomcat目录下的conf目录,打开server.xml 文件,修改

<connector <="" p="" style="word-wrap: break-word;">

debug="0"

acceptCount="100"

connectionTimeout="20000"

disableUploadTimeout="true"

port="8080"

redirectPort="8443"

enableLookups="false"

minSpareThreads="25"

maxSpareThreads="75"

maxThreads="150"

maxPostSize="0"

URIEncoding="GBK"

 

增加红色字体部分 maxPostSize="0" (设为0是取消POST的大小限制)





 

 

1、首先即使有长度限制,也是限制的是整个 URI 长度,而不仅仅是你的参数值数据长度。

2、HTTP 协议从未规定 GET/POST 的请求长度限制是多少。

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.

3、所谓的请求长度限制是由浏览器和 web 服务器决定和设置的,各种浏览器和 web 服务器的设定

均不一样,这依赖于各个浏览器厂家的规定或者可以根据 web 服务器的处理能力来设定。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用与更新说明 1.5.8 Beta 2018-01-28 一、增加了几个变量 %DomainNoPoint%为当前扫描目标域名去掉. wwwbaiducom %DomainUnderLine%为当前扫描目标域名将.换成下划线www_baidu_com %DomainCenterAndTldUnderLine%为当前扫描目标域名主体与后缀并将.换成下划线baidu_com %LastSubPath%为当前目标url最后一级目录 baidu.com/admin/data/ 则%LastSubPath%为data (注:此变量需要为Url加入/结尾,如未存在子目录则程序自动抛弃此行字典。) 1.5.7 Beta 2018-01-26 一、增加字典变量功能 目标域名为www.baidu.com的话 四个变量 分别是 %Domain% 为当前扫描目标域名www.baidu.com %SubDomain% 为当前扫描目标子域名www %DomainCenter% 为当前扫描目标域名主体baidu %DomainCenterAndTld% 为当前扫描目标域名主体与后缀baidu.com 二、给非head访 问增加返回长度功能通过返回长度可有效识别一些通过关键字无法识别的自定义404页面 三、修复若干bug并取消了启动弹框 1.5.6 Beta 2017-08-30 一、修复关闭后进程不推出的问题 二、修复cookie支持兼容问题 1.5.5 Beta 2017-08-19 一、修改开始按钮的显示状态为动态(根据线程状态判断) 二、恢复暂停按钮 1.5.4 Beta 2017-08-14 一、接受建议调整功能可以自由输入http头不止支持useragent和cookie 二、接受建议调整界面自定义404的输入框挪到左侧 三、接受建议取消暂停按钮将开始和停止按钮合并 1.5.3 Beta 2017-08-09 一、接受建议让结果表格自动下滑 二、接受建议修改对延时扫描时间的小数支持 三、修复多URL扫描的多处bug 1.5.2 Beta 2017-08-06 一、接受建议加入cookie功能 二、接受建议修改对URL的处理方法去掉多余的’/’ 三、对3xx结果显示跳转后地址http://www.xxx. xxx/admin/index.php ——–> login_redir.php 1.5.1 Beta 2017-08-05 一、修改若干细节 1.5 Alpha 2017-07-28 一、修复延时扫描处多个bug 二、优化线程 三、修复从快捷方式启动后都取字典失败的问题 四、扫描前URL编码解决部分误报问题 1.4 至安全学员内测版2017-07-21 一、修改最大并发连接为100 二、对输入Url进行智能处理获取最后一个’/’的目录进行扫描 三、增加工作线程数显示控制停止后开始前的线程是否全部退出检查 1.3 Alpha 2017-07-20 一、增加停止按钮 二、增加暂停按钮 三、拼接字典时自动根据字典类型增加/ 符号使扫描结果更精准 1.2 Alpha 2017-07-18 一、精确扫描结果识别跳转页面 二、对输入参数进行判断 1.1 Alpha 2017-07-18 一、增加列表内容不同常用状态码使用不同颜色的功能绿色为200 红色为403 二、增加点击列头后对列表内容排序的功能 三、增加右键导出结果功能 四、美化部分文本内容 五、点击开始会自动重置工具方便重复使用不必重新打开 六、增加自选加载字典模式可多选! 1.0 Alpha 2017-07-17 秉承着为人民服务的想法还有就是Windows下我确实没有什么功能比较全又稳定的此类工具了此前用过破壳扫描器和dirburte 都不稳定经常崩,御剑虽好但是缺少很多小功能。 不扯这些了介绍一下功能吧 一、先说说并发线程数吧,虽然默认是20 但是加大也无妨看你自己的各个参数设置和机器网络等配置了。 二、超时时间自己视情况而定也不必多介绍了。 三、这个随机xff头和xr头套用百度上一段话能懂得自然懂得不懂得也无所谓很少能碰见需要用到的这种情况勾选后每次访问都会随机生成这两个IP值如果线程开的大可能比较耗cpu。 1、X-Forwarded-For是用于记录代理信息的,每经过一级代理X-Forwarded-For是用于记录代理信息的,每经过一级代理(匿名代理除外),代理服务器都会把这次请求的来源IP追加在X-Forwarded-For中,来自4.4.4.4的一个请求,header包含这样一行X-Forwarded-For: 1.1.1.1, 2.2.2.2, 3.3.3.3代表请求由1.1.1.1发出,经过三层代理,第一层是2.2.2.2,第二层是3.3.3.3,而本次请求的来源IP4.4.4.4是第三层代理 2、X-Real-IP,一般只记录真实发出请求的客户端IP,上面的例子,如果配置了X-Read-IP,将会是X-Real-IP: 1.1.1.1 四、自定义User Agent头这个不必解释了吧。 五、自定义错误页面关键字这个针对修改了错误页面的网站的功能大家常用所以我也不在这里多啰嗦了。 六、http访问方法HEAD GET POST 三种方式,head请求扫描速度最快但是准确率不如以下两种,post请求是为某些情况绕过waf使用的。 七、延时扫描功能勾选效果是:单线程扫描、默认每隔2秒访问一次。适用于某些存在CCwaf的网站免于频繁访问被认为是CC攻击。(默认两秒已经能过云锁以及安全狗的默认CC设置) 八、扫描类型分别对应同目录下多个txt文件自定义对应的文件是custom.txt,后缀格式为”.xxx”,如不需要后缀可以不填直接将字典内容修改为”111.svn”此类即可。 九、状态码我也不多解释了 十、双击表格内某行即调用系统默认浏览器打开当前行Url 右键可复制Url内容。 十一批量导入的Url与填写的Url都需要以http:// https://开头的格式。 十二字典编码为UTF8如需使用含中文或其他特殊语言路径字典请修改字典文件编码为UTF8 另外说一句字典有点乱我也没有精力去仔细弄了希望有人能整理一份分享给大家也可以私下联系我我来收集整理多谢大家
### 回答1: C语言标准库中没有提供直接发送HTTP请求的函数,但是可以使用一些第三方库来实现发送HTTP GET/POST请求的功能,比如libcurl。 libcurl是一个非常强大的开源网络传输库,提供了丰富的功能和易于使用的API。下面是一个简单版本的使用libcurl库发送HTTP GET/POST请求的示例: 1. 导入头文件和初始化libcurl: #include <stdio.h> #include <curl/curl.h> int main(void) { CURL *curl; CURLcode res; curl_global_init(CURL_GLOBAL_DEFAULT); curl = curl_easy_init(); 2. 设置请求的URL: if(curl) { curl_easy_setopt(curl, CURLOPT_URL, "http://example.com"); 3. 发送HTTP GET请求: res = curl_easy_perform(curl); 4. 发送HTTP POST请求: if(res != CURLE_OK) fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res)); else { // 设置POST请求参数 curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "param1=value1&param2=value2"); // 发送POST请求 res = curl_easy_perform(curl); } 5. 检查请求是否成功: if(res != CURLE_OK) fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res)); 6. 清理和释放资源: curl_easy_cleanup(curl); } curl_global_cleanup(); return 0; } 以上是一个简单的使用libcurl库发送HTTP GET/POST请求的示例代码。你可以根据自己的需要进行修改和扩展。 ### 回答2: 在C语言中,我们可以使用libcurl库来实现发送HTTP GET/POST请求的简单版本。 首先,我们需要安装并引入libcurl库。在Ubuntu系统中,我们可以使用以下命令安装libcurl库: ``` sudo apt-get install libcurl4-openssl-dev ``` 然后,我们可以创建一个C源文件,并包含`curl/curl.h`头文件: ```c #include <stdio.h> #include <curl/curl.h> ``` 接下来,我们可以定义一个函数来发送HTTP GET请求,并使用libcurl库完成请求的发送和接收: ```c void sendHttpGetRequest(const char* url) { CURL *curl; CURLcode res; // 初始化libcurl curl_global_init(CURL_GLOBAL_DEFAULT); // 创建一个curl句柄 curl = curl_easy_init(); if(curl) { // 设置要请求的URL curl_easy_setopt(curl, CURLOPT_URL, url); // 执行GET请求 res = curl_easy_perform(curl); // 检查请求是否成功 if(res != CURLE_OK) fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res)); // 清理curl句柄 curl_easy_cleanup(curl); } // 清理libcurl curl_global_cleanup(); } ``` 同样地,我们也可以定义一个函数来发送HTTP POST请求,只需要对发送的数据进行适当的设置即可: ```c void sendHttpPostRequest(const char* url, const char* postData) { CURL *curl; CURLcode res; // 初始化libcurl curl_global_init(CURL_GLOBAL_DEFAULT); // 创建一个curl句柄 curl = curl_easy_init(); if(curl) { // 设置要请求的URL curl_easy_setopt(curl, CURLOPT_URL, url); // 设置POST请求的数据 curl_easy_setopt(curl, CURLOPT_POSTFIELDS, postData); // 执行POST请求 res = curl_easy_perform(curl); // 检查请求是否成功 if(res != CURLE_OK) fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res)); // 清理curl句柄 curl_easy_cleanup(curl); } // 清理libcurl curl_global_cleanup(); } ``` 以上代码实现了一个简单版本的发送HTTP GET/POST请求的功能。在发送请求之前,我们需要设置要请求的URL,并可以选择设置POST请求的数据。发送请求之后,我们还可以对返回结果进行适当的处理,根据需要进行错误处理。 当然,这只是一个简单的示例代码。在实际应用中,可能还需要处理更多的HTTP请求选项和参数,以满足具体的需求。 ### 回答3: C语言本身不直接提供发送HTTP请求的功能,但可以通过使用第三方库来实现发送HTTP GET/POST请求的功能。下面给出一个使用libcurl库(一个广泛使用的C库,用于支持各种协议的网络操作)的简单版本示例: ```c #include <stdio.h> #include <curl/curl.h> int main() { CURL *curl; CURLcode res; curl_global_init(CURL_GLOBAL_ALL); // 初始化libcurl curl = curl_easy_init(); // 初始化一个CURL对象 if(curl) { char *url = "http://example.com"; // 请求的URL curl_easy_setopt(curl, CURLOPT_URL, url); // 设置要请求的URL // 执行GET请求 res = curl_easy_perform(curl); if(res != CURLE_OK) { fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res)); } curl_easy_cleanup(curl); // 清理curl对象 } curl_global_cleanup(); // 清理libcurl return 0; } ``` 上述代码使用了libcurl库的`curl_easy_init()`和`curl_easy_setopt()`函数设置请求的URL,并使用`curl_easy_perform()`函数执行GET请求。你可以通过修改`char *url`的值为你要请求的具体URL来发送GET请求。 如果要发送POST请求,你还需要添加一些额外的代码来设置请求体和请求头,以及使用`curl_easy_setopt()`函数设置请求方法为POST。这里提供一个示例来发送带有请求体的POST请求: ```c #include <stdio.h> #include <curl/curl.h> int main() { CURL *curl; CURLcode res; curl_global_init(CURL_GLOBAL_ALL); curl = curl_easy_init(); if(curl) { char *url = "http://example.com"; char *data = "param1=value1&param2=value2"; // POST请求请求体 curl_easy_setopt(curl, CURLOPT_URL, url); curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data); // 设置请求体 // 设置请求头 struct curl_slist *headers = NULL; headers = curl_slist_append(headers, "Content-Type: application/x-www-form-urlencoded"); curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers); // 设置请求方法为POST curl_easy_setopt(curl, CURLOPT_POST, 1L); res = curl_easy_perform(curl); if(res != CURLE_OK) { fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res)); } curl_slist_free_all(headers); // 释放请求头的内存 curl_easy_cleanup(curl); } curl_global_cleanup(); return 0; } ``` 上述代码在GET请求的基础上,增加了设置请求体和请求头的代码,以及设置`CURLOPT_POST`选项为`1L`来指定POST方法。你可以根据自己的需求修改`char *url`和`char *data`的值来发送不同的POST请求

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值