`

URL长度的限制

 
阅读更多
摘要:众所周知, 传递小量参数(在没有其他原因,例如隐藏参数值的情况下)推荐使用GET方法,传递大量参数推荐使用POST方法。原因是什么呢? 一是get传递的参数都是明文,安全性较低,而且URL长度有限制!
原因是传说中GET方法是通过URL来传递,而URL的长度是受限的,而POST方法采用流的方式,理论上可以传递的容量是没有限制的。
现在来看这个描述:“URL的长度是受限的”,具体是在哪里受限制呢?browser端还是server端呢?网上现在google出来的结果都是说 url的长度实际上是受到browser的限制,如IE限定url长度为2083字节,opera 是4050, Netscape 是8192,等等。据说HTTP协议本身对GET方法的长度没有限制。那么,如果不使用浏览器,而是从程序里发送HttpRequest的话,GET发送 的长度就可以是无限的么?抱着这样的想法,进行了如下实验:
在client端,用Java实现,向server端发送HttpRequest,使用GET方法。
在server端,设计一个apache module,并将strlen(r->args),用ap_rprintf输出,作为response,返回到Java端。
通过不断增加GET方法传过去的字符串的长度,发现URL长度超过8208字节时,Java抛出IO Exception: Server returned HTTP response code: 414 for URL: .....
414 代表哪种错误呢?
414 - Request-URL Too Long (SEE: http://www.websitepulse.com/kb/4xx_HTTP_status_codes.html)
由此可见,Server端对于URL的长度是有限制的,那么对于GET方法可以传输的数据也是有限制的。只是这个限制可能根据服务器的处理能力而定,或者在哪里哪里配置,就不是很清楚了。
下面开始瞎掰:
其实这是可以理解的,URL长度不可能没有限制的,Http协议毕竟是UDP的,而一个UDP包毕竟是有大小限制的。那么POST为什么就能传递大批量数 据呢?在apache module里面尝试了读取post数据之前,还真没有什么深刻的理解。只不过用一个“流”字打法之而已。实际上,POST数据解析的时候是分块来读取 的,如果从UDP的角度来理解的话,就可是分成好多个UDP包传过来,一个一个读出来就好了。
详细出处参考:http://www.jb51.net/article/18858.htm
分享到:
评论

相关推荐

    SampsonKY#Daily_question#HTTP中的URL长度限制1

    首先,http1.1协议中对URL长度是不受限的HTTP协议不对URI的长度作事先的限制,服务器必须能够处理任何他们提供资源的URI,并且应该能够处理无限长度的

    URL 长度有限制吗?

    众所周知, 传递小量参数(在没有其他原因,例如隐藏参数值的情况下)推荐使用GET方法,传递大量参数推荐使用POST方法。原因是什么呢?

    关于URL最大长度限制的相关资料查证

    主要介绍了关于URL最大长度限制的相关资料查证,这里记录一下,方便以后使用。

    .net 调用Outlook 批量发送邮件

    VS2012开发的,上传Excel,Excel中的内容为邮件的正文信息,Excel模板为Upload文件夹中文件 ...解决调用Outlook时弹出对话框问题, 带安装程序。 ...可以在VS中设置中 “生成”->“目标平台”设为x86 ...

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

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

    AndroidJavascriptBridge:使Java和Javascript之间的通信变得容易

    使用URL来执行Javascript,将会遇到URL长度限制的问题(浏览器对URL的长度都是有限制的), 如果需要传递大数据, 是比较困难的. 而Javascript却能直接调用Java提供的方法, 并可取得返回值, 因此可以改成由Javascript去...

    解决长度报错的qrcode.js

    text长度过长会报错,这个是改良之后的js,具体是qrcode.min.js还是qrcode.js改了,这个不记得了。试试吧!

    突破小程序向webview实时传递参数的限制

    其中之一就是小程序不能向内置的webview实时传参,因为只能通过url地址首次传递数过去。官方不开放接口看起来无可奈何。 但是世上无难事儿,只怕有心人,作为一个合格的程序员就应该是一个有心人。

    数据请求的时候遇到 Status code: 431 Request Header Fields Too Large

    最后经过查询资料发现由于base64是一段很长很长的字符串,而get的请求在谷歌浏览器中的url长度限制超过8182个字符,所以才会出现了这个问题,所以我们只需要在后端将这个get请求的接口改为post请求的接口即可解决这个...

    thinkPHP使用post方式查询时分页失效的解决方法

    在做项目的过程中,因为需要非常多的查询条件,如果以get方式提交表单的话,会因为url长度限制而报错,所以必须使用post方式提交表单数据,但是在分页的过程中,遇到了问题,因为thinkphp自带的分页是以a标签的形式...

    ajax快速解决参数过长无法提交成功的问题

    查了很多资料都说,get方法的参数是有限制的,post方法的参数的长度是无限制,这也是post相比get的优势一直。 在ajax中使用post方法,用常规的参数格式:param1=a1&param2=a2 ,当参数长度过长时,依然提交不成功。...

    正则表达式经典实例

    4.9 限制文本长度 4.10 限制文本中的行数 4.11 肯定响应的检查 4.12 社会安全号码的合法性验证 4.13 ISBN的合法性验证 4.14 ZIP代码的合法性验证 4.15 加拿大邮政编码的合法性验证 4.16 英国邮政编码的合法性...

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

    URL的长度限制受浏览器和服务器的影响,常见的IE是2083,Firefox是65,536(实测8182),opera 是4050, Netscape 是8192等。本地测apache服务器的限制是8192。 另外据说http协议是没限制URL长度?使用浏览器发送GET...

    检查网址URL中字符串类型及个数(ASP防注入)

    '参数1: Qstrings 通过 "||" 和 "," 两次拆分,分别获取每一个查询参数 名称,类型(int,string两种),最大长度(0为不限制); '参数2: Qcount 检查参数个数就否一致,boolean型; '参数3: inSql SQL注入检查,...

    get和post请求的区别.pdf

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

    实例详解IOS开发之UIWebView

    UIWebView的loadRequest可以用来加载一个url地址,它需要一个NSURLRequest参数。我们定义一个方法用来加载url。在UIWebViewDemoViewController中定义下面方法: - (void)loadWebPageWithStrin

    C# QRCoder二维码生成

    //引用类库XH.Common string fileName = Guid.NewGuid().ToString("N") + ".jpg"; string filePath = System....//文件访问Url string QRCodeUrl = "http://" + Request.Url.Authority + "/QRImg/" + fileName;

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

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

    智创IIS防火墙(网页关键字过滤拦截软件)

    3、限制URL长度,防止URL溢出攻击; 4、拦截指定的URL连接,如,BBS页面拦截、或根据预先设定的目录名称进行拦截,如 /*.asp/ 等目录名称; 5、限制HTTP动作,如,限制只允许POST/GET/HEAD等动作,其他PUT等动作...

Global site tag (gtag.js) - Google Analytics