国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

HTTP中的URL長度限制(資料整理)

2019-11-15 02:07:34
字體:
供稿:網(wǎng)友
HTTP中的URL長度限制(資料整理)HTTP中的URL長度限制

首先,其實http 1.1 協(xié)議中對url的長度是不受限制的,協(xié)議原文:

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 theyserve, 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 proxyimplementations might not properly support these lengths.

翻譯

HTTP協(xié)議不對URI的長度作事先的限制,服務(wù)器必須能夠處理任何他們提供資源的URI,并且應(yīng)該能夠處理無限長度的URIs,這種無效長度的URL可能會在客戶端以基于GET方式的請求時產(chǎn)生。如果服務(wù)器不能處理太長的URI的時候,服務(wù)器應(yīng)該返回414狀態(tài)碼(此狀態(tài)碼代表Request-URI太長)。

注:服務(wù)器在依賴大于255字節(jié)的URI時應(yīng)謹(jǐn)慎,因為一些舊的客戶或代理實現(xiàn)可能不支持這些長度。

具體參見協(xié)議中的3.2.1

雖然協(xié)議中未明確對url進行長度限制,但在真正實現(xiàn)中,url的長度還是受到限制的,一是服務(wù)器端的限制,二就是游覽器端的限制。

一、服務(wù)器端

在服務(wù)器端,主要是apache,jboss和nginx等,我在網(wǎng)上找到的調(diào)節(jié)方法可以參加下文:關(guān)于http請求url長度以及請求消息體長度的研究(一)(服務(wù)器端)

1.1 nginx

由于現(xiàn)在項目中主要用到nginx,所以強調(diào)下它的設(shè)置參數(shù):large_client_header_buffers

該參數(shù)對nginx服務(wù)器接受客戶端請求的頭信息時所分配的最大緩沖區(qū)的大小做了限制,也就是nginx服務(wù)器一次接受一個客戶端請求可就收的最大頭信息大小。這個頭不僅包含 request-line,還包括通用信息頭、請求頭域、響應(yīng)頭域的長度總和。這也相當(dāng)程度的限制了url的長度。

nginx服務(wù)器默認的限制是4K或者8K,這是根據(jù)服務(wù)器的硬件配置有關(guān)的,一般為內(nèi)存一頁的大小,目前大部分為4K,即4096字節(jié)。

二、游覽器端

游覽器的種類繁多,并且對URL的長度限制是有所差異的,具體如下:

游覽器最大長度(字符數(shù)) 備注
Internet Explorer 2083 如果超過這個數(shù)字,提交按鈕沒有任何反應(yīng)
Firefox65,536
Chrome8182
Safari80,000
Opera190,000
curl(linux下指令)8167

這些數(shù)據(jù)主要通過網(wǎng)上數(shù)據(jù)搜索而來,筆者還沒有親自驗證過。但都有限制是不爭的事實,大家在做開發(fā)時要特別注意。

我首先想到的就是去看HTTP 1.1 協(xié)議,看是不是有限制(這協(xié)議真是又臭又長.......)。驚奇的發(fā)現(xiàn),原來協(xié)議對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 lengthsabove 255 bytes, because some older client or proxyimplementations might not properly support these lengths."

HTTP協(xié)議不對URI的長度作事先的限制,服務(wù)器必須能夠處理任何他們提供資源的URI,并且應(yīng)該能夠處理無限長度的URIs,這種無效長度的URL可能會在客戶端以基于GET方式的請求時產(chǎn)生。如果服務(wù)器不能處理太長的URI的時候,服務(wù)器應(yīng)該返回414狀態(tài)碼(此狀態(tài)碼代表Request-URI太長)。

注:服務(wù)器在依賴大于255字節(jié)的URI時應(yīng)謹(jǐn)慎,因為一些舊的客戶或代理實現(xiàn)可能不支持這些長度。

所以從http標(biāo)準(zhǔn)協(xié)議上講沒有對url長度進行控制,header頭長度是否有限制有待進一步研究協(xié)議。對url以及header長度的限制主要取決于服務(wù)器以及客戶端的限制。

然后先從服務(wù)器端入手:

主要看了apache和nginx兩種服務(wù)器,其他的咱也不熟

在apache的官方文檔上找到這樣一個配置選項 LimitRequestLine

關(guān)于http請求url長度以及請求消息體長度的研究(一)(服務(wù)器端)(http://httpd.apache.org/docs/2.0/mod/core.html#limitrequestline)

從定義來看,這個選項限制的并不是url的長度,也不是head頭的長度,而是是http請求中 request-line的長度(相關(guān)定義:http://www.w3.org/Protocols/rfc2616/rfc2616-sec5.html#sec5.1)。

即:Request-Line = Method SP Request-URI SP HTTP-Version CRLF 的長度。

但這很大程度上也就限制的GET、HEAD請求的參數(shù)長度,因為GET和HEAD請求是不會向服務(wù)器發(fā)送消息實體(message-body)的??梢哉f這個限制就是限制了url的長度不能超過該設(shè)定的值,如果超過了,服務(wù)器會返回錯誤狀態(tài)碼 414(Request-URI Too Large)。

那么對于整個消息體,apache服務(wù)器有限制嗎?

接下來我有看了其他相關(guān)的參數(shù),果然有 :LimitRequestBody

關(guān)于http請求url長度以及請求消息體長度的研究(一)(服務(wù)器端)(http://httpd.apache.org/docs/2.0/mod/core.html#limitrequestbody)

這個參數(shù)限制了http請求可以被接受的最大消息大小,默認是無限大的,但是其實這個無限也是有限的,最大不能超過2G。

這就是apache服務(wù)器對http請求的相關(guān)的一些限制

對于nginx服務(wù)器,也有類似的參數(shù)

large_client_header_buffers

關(guān)于http請求url長度以及請求消息體長度的研究(一)(服務(wù)器端)

該參數(shù)對nginx服務(wù)器接受客戶端請求的頭信息時所分配的最大緩沖區(qū)的大小做了限制,也就是nginx服務(wù)器一次接受一個客戶端請求可就收的最大都信息大小。這個頭不僅包含 request-line,還包括通用信息頭、請求頭域、響應(yīng)頭域的長度總和。這也相當(dāng)程度的限制了url的長度。

nginx服務(wù)器默認的限制是4K或者8K,這是根據(jù)服務(wù)器的硬件配置有關(guān)的,一般為內(nèi)存一頁的大小,目前大部分為4K,即4096字節(jié)。

client_header_buffer_size

關(guān)于http請求url長度以及請求消息體長度的研究(一)(服務(wù)器端)(http://wiki.nginx.org/HttpCoreModule#client_header_buffer_size)

該參數(shù)對發(fā)自客戶端的http頭信息的大小進行了限制,這個值和large_client_header_buffers同時限制了http請求頭的大小,超過其中一個值則服務(wù)器會返回錯誤狀態(tài)碼 414(Request-URI Too Large)。

該參數(shù)的默認值為1K

client_max_body_size

關(guān)于http請求url長度以及請求消息體長度的研究(一)(服務(wù)器端)

該參數(shù)對發(fā)自客戶端的http請求的消息實體大小進行了限制,如果超過該值,則會服務(wù)器會返回錯誤狀態(tài)碼 413(Request Entity Too Large)。此參數(shù)默認值為1MB,相當(dāng)于是限制了post方式提交內(nèi)容的最大限制

以上便是服務(wù)器端對http請求url長度以及請求消息體長度的相關(guān)限制,這些我都只是根據(jù)其官方文檔得出的結(jié)果,沒有經(jīng)過實際測試


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 琼结县| 德安县| 锡林郭勒盟| 大洼县| 石河子市| 女性| 比如县| 扶风县| 修文县| 蒙阴县| 县级市| 金山区| 油尖旺区| 阿拉善左旗| 延寿县| 台安县| 华蓥市| 罗田县| 六安市| 新乐市| 开远市| 泰来县| 桦南县| 顺平县| 叙永县| 富川| 东光县| 修水县| 门头沟区| 新建县| 义乌市| 龙井市| 伊金霍洛旗| 揭东县| 溧水县| 米易县| 城步| 龙游县| 临西县| 木兰县| 汽车|