1. 程式人生 > >【HTTP】GET傳參最大長度的理解誤區

【HTTP】GET傳參最大長度的理解誤區

GET傳參最大長度的理解誤區

零、總結

文章資料來源於網路,可能存在變動,但是原理是一樣的。

  1. HTTP 協議 未規定 GET 和POST的長度限制
  2. GET的最大長度顯示是因為 瀏覽器和 web伺服器限制了 URI的長度
  3. 不同的瀏覽器和WEB伺服器,限制的最大長度不一樣
  4. 要支援IE,則最大長度為2083byte,若只支援Chrome,則最大長度 8182byte

一、誤解

大家都知道http 中 存在 GET 和 POST 這兩種最常用的請求方式。(PUT,DELETE不在本文討論範圍之內)

誤解:HTTP 協議下的 Get 請求引數長度是有大小限制的,最大不能超過XX,而 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 伺服器的處理能力來設定。

The limit is in MSIE and Safari about 2KB, in Opera about 4KB and in Firefox about 8KB, (255 bytes if we count very old browsers) . We may thus assume that 8KB is the maximum possible length and that 2KB is a more affordable length to rely on at the server side and that 255 bytes is the safest length to assume that the entire URL will come in. If the limit is exceeded in either the browser or the server, most will just truncate the characters outside the limit without any warning. Some servers however may send a HTTP 414 error. If you need to send large data, then better use POST instead of GET. Its limit is much higher, but more dependent on the server used than the client. Usually up to around 2GB is allowed by the average webserver. This is also configureable somewhere in the server settings. The average server will display a server-specific error/exception when the POST limit is exceeded, usually as HTTP 500 error.

IE 和 Safari 瀏覽器 限制 2k Opera 限制4k Firefox 限制 8k(非常老的版本 256byte)

如果超出了最大長度,大部分的伺服器直接截斷,也有一些伺服器會報414錯誤。

HTTP 1.1 defines Status Code 414 Request-URI Too Long for the cases where a server-defined limit is reached. You can see further details on RFC 2616. For the case of client-defined limits, there is no sense on the server returning something, because the server won't receive the request at all.

詳細可以看 RFC2616

The server is refusing to service the request because the Request-URI is longer than the server is willing to interpret. This rare condition is only likely to occur when a client has improperly converted a POST request to a GET request with long query information, when the client has descended into a URI "black hole" of redirection (e.g., a redirected URI prefix that points to a suffix of itself), or when the server is under attack by a client attempting to exploit security holes present in some servers using fixed-length buffers for reading or manipulating the Request-URI.

二、各個瀏覽器和web伺服器的最大長度總結

** 以下內容摘自《GET請求中URL的最大長度限制總結》, 文章內容是 2016年9月,相對比較符合當前的最新現狀。 **

在網上查詢之後,瀏覽器和伺服器對url長度都有限制,現總結如下。

瀏覽器

1、IE

IE瀏覽器(Microsoft Internet Explorer) 對url長度限制是2083(2K+53),超過這個限制,則自動截斷(若是form提交則提交按鈕不起作用)。

2、firefox

firefox(火狐瀏覽器)的url長度限制為 65 536字元,但實際上有效的URL最大長度不少於100,000個字元。

3、chrome

chrome(谷歌)的url長度限制超過8182個字元返回本文開頭時列出的錯誤。

4、Safari

Safari的url長度限制至少為 80 000 字元。

5、Opera

Opera 瀏覽器的url長度限制為190 000 字元。Opera 9 位址列中輸入190 000字元時依然能正常編輯。

伺服器

1、Apache

Apache能接受url長度限制為8 192 字元

2、IIS

Microsoft Internet Information Server(IIS)能接受url長度限制為16 384個字元。 這個是可以通過修改的(IIS7) configuration/system.webServer/security/requestFiltering/[email protected]<requestLimits maxQueryString="length"/>

3、Perl HTTP::Daemon

Perl HTTP::Daemon 至少可以接受url長度限制為8000字元。Perl HTTP::Daemon中限制HTTP request headers的總長度不超過16 384位元組(不包括post,file uploads等)。但當url超過8000字元時會返回413錯誤。 這個限制可以被修改,在Daemon.pm查詢16×1024並更改成更大的值。

4、ngnix

可以通過修改配置來改變url請求串的url長度限制。

client_header_buffer_size 預設值:client_header_buffer_size 1k

large_client_header_buffers預設值 :large_client_header_buffers 4 4k/8k

由於jsonp跨域請求只能通過get請求,url長度根據瀏覽器及伺服器的不同而有不同限制。 若要支援IE的話,url長度限制為2083字元,若是中文字元的話只有2083/9=231個字元。 若是Chrome瀏覽器支援的最大中文字元只有8182/9=909個。

三、參考文章

作者:izhongxia 連結:https://www.jianshu.com/p/512389822f8b 來源:簡書 著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。

相關推薦

HTTPGET長度理解誤區

GET傳參最大長度的理解誤區 零、總結 文章資料來源於網路,可能存在變動,但是原理是一樣的。 HTTP 協議 未規定 GET 和POST的長度限制 GET的最大長度顯示是因為 瀏覽器和 web伺服器限制了 URI的長度 不同的瀏覽器和WEB伺服器,限制的最大長度不一樣 要支援IE,則最大長度為2083b

GET長度理解誤區

零、總結文章資料來源於網路,可能存在變動,但是原理是一樣的。HTTP 協議 未規定 GET 和POST的長度限制GET的最大長度顯示是因為 瀏覽器和 web伺服器限制了 URI的長度不同的瀏覽器和WEB伺服器,限制的最大長度不一樣要支援IE,則最大長度為2083byte,若只支援Chrome,則最大長度 81

BZOJ1458士兵占領 流的模板題

gis deep getch pac etc getchar() style efi %d 我們只要把他們可以有的限制用流量限制,再用兩者關系限制一下就可以開心的跑了。 #include <cstdio> #include <cstring> #i

UOJ#79. 一般圖匹配

當前 size define AI for while 怎麽 mem AS 題解 板子!我相信其實沒人來看我的板子!但是為了防止我忘記,我還是要寫點什麽 我們考慮二分圖,為什麽二分圖就能那麽輕松地寫出匹配的代碼呢?因為匹配只會發生在黑點和白點之間,我們找尋增廣路,必然是一黑

TestNGtestNG的用法和高階應用

一.TestNG用法說明 TestNG的詳細教程請看連結:https://blog.csdn.net/df0128/article/details/83243822 二.直接從類中傳參 此處需要用到註解@DataProvider來進行傳參, 如下定義了一個測試用例,名為TestN

pythonnp.argmax() 返回值索引號

import numpy as np a = np.array([[2, 4, 6, 1], [1, 5, 2, 9]]) print(np.argmax(a)) print(np.argmax(a, axis=0)) #豎著比較,返回行號 print(np.argmax(a, axis=1))

佇列滑動視窗的值序列,帶max函式的佇列

視窗即佇列,本質是一樣的。 面試題59-1:滑動視窗的最大值序列 給定一個數組和滑動視窗的大小,請找出所有滑動窗口裡的最大值。例如,如果輸入陣列{2, 3, 4, 2, 6, 2, 5, 1}及滑動視窗的大小3,那麼一共存在6個滑動視窗,它們的最大值分別為{4

Leetcode628. 三個數乘積

題目描述: 給定一個整型陣列,在陣列中找出由三個陣列成的最大乘積,並輸出這個乘積。 示例 1: 輸入: [1,2,3] 輸出: 6 示例 2: 輸入: [1,2,3,4] 輸出: 24 注意: 給定的整型陣列長度範圍是[3,104],陣列中所有的元素範圍是[

Python求陣列區域性

求陣列區域性最大值 給定一個無重複元素的陣列A[0…N-1],求找到一個該陣列的區域性最大值。規定:在陣列邊界外的值無窮小。即:A[0]>A[-1],A[N-1] >A[N]。 顯然,遍歷一遍可以找到全域性最大值,而全域性最大值顯然是區域性最大值。

DP求三角形面積問題

【題目描述】       聖誕節快到了。你接受了一件光榮的任務,就是製作聖誕樹頂上的那顆大星星。不過當你拿到製作用的三角形銀紙的時候,你發現銀紙上面有許多洞。原來你的妹妹已經在銀紙上剪下了一些小的三角形來製作小星星。你唯有尋找一個演算法,告訴你在每張銀紙上還能切出來的最大的三

C++列印1到的n位數

輸入數字n,按順序打印出從1到最大的n位十進位制數。例如,輸入3,則打印出1,2,3,到最大的三位數999。 不能直接使用int或者long型,因為這樣肯定會溢位,考慮用字串來輸出,將一個字串先初始化為00。。000,然後實現加法。 如何判斷已經達到最大的n位了呢?可以每輸

再回首Python之美矩陣求矩陣中元素/小元素的行列座標 For 層次聚類演算法Hierarchical Clustering Alg

求多維矩陣中最小元素的行列座標,這個在層次聚類演算法中用到,這裡實現記錄一下。1.簡介矩陣M: [[1 3 2] [2 6 0] [9 8 5]]最大元素是9,對應的行列座標為(2,0)最小元素是

51Nod1174 區間中的數

題意 給出一個有N個數的序列,編號0 - N - 1。進行Q次查詢,查詢編號i至j的所有數中,最大的數是多少。 例如: 1 7 6 3 1。i = 1, j = 3,對應的數為7 6 3,最大的數為

計算機網路HTTP兩張趣圖助你理解 HTTP 狀態碼! 2018-10-11

兩張趣圖助你理解 HTTP 狀態碼! HTTP狀態碼(HTTP Status Code)是用以表示網頁伺服器HTTP響應狀態的3位數字程式碼。 我們可以通過檢視HTTP狀態碼來判斷伺服器狀態,常見的有404 、502等;但是其他不是很常見的狀態碼都代表什麼狀態呢

###struts模型驅動(必須new)能夠封裝物件型別屬性的屬性.頁面錯誤導致的問題:HTTP Status 500

問題詳情: HTTP Status 500 - could not execute statement; SQL [n/a]; constraint [null]; nested exception is org.hibernate.exception.Constraint

BZOJ1283/3550序列/[ONTAK2010]Vacation 費用流

元素 set 字符串表 選擇 stream des namespace mil cst 【BZOJ1283】序列 Description 給出一個長度為 的正整數序列Ci,求一個子序列,使得原序列中任意長度為 的子串中被選出的元素不超過K(K,M<=100) 個,

httppost和get請求的區別

方式 無限制 信息 資源 敏感信息 字符 瀏覽器歷史記錄 指定 較差 兩種常用的HTTP請求方式:post和get get:從指定的資源進行請求。數據長度有限制(2048個字符)可被緩存、可被保留在瀏覽器歷史記錄中,安全性較差。發送敏感信息如密碼時不適用。 post

Mybatis多個數(三種解決方案)

三種 方案 var nbsp myba rom name bsp 什麽 轉自: http://www.2cto.com/database/201409/338155.html 據我目前接觸到的傳多個參數的方案有三種。 第一種方案: DAO層的函數方法 Public

左神算法課子數組差值小於某閾值,求滿足條件的子數組個數

isempty all turn main .com color 子數組 sys ems 題目描述:    解法思路:   本題其實是滑動窗口的變形。主體思路為:   1.從第一個元素開始依次向後遍歷,同時維護兩個窗口(由於要同時操作窗口的頭部和尾部,故采用雙端隊

網絡流24題圓桌聚餐(流)

cpp pan pos har pre cst ++ get post 【網絡流24題】圓桌聚餐(最大流) 題面 Cogs 題解 這道題很簡單 首先每個單位的人數限制 直接從源點向單位連邊,容量為人數 同樣的, 每個桌子向匯點連邊,容量為可以坐的人數 因為每個桌子只能夠做一