IIS 7でGet方式でデータをコミットしたときに2 Kを超えると問題が発生する解決策

3643 ワード

今日、Email Ticketをテストしたところ、Mark as Read/Unread操作を行うときに、要求がGET方式で行われていることがわかりました.URLには、この操作に関与するすべてのTicket Idがリストされています.そこで、GETリクエストには最大長制限があることを思い出しました.要求のために長い一連のTicket Idを入力した結果、ページに次のようなエラーが表示されました.

HTTP Error 404.15 - Not Found


The request filtering module is configured to deny a request where the query string is too long.
Most likely causes:
Request filtering is configured on the Web server to deny the request because the query string is too long.
Things you can try:
Verify the configuration/system.webServer/security/requestFiltering/requestLimits@maxQueryString setting in the applicationhost.config or web.config file.
Links and More InformationThis is a security feature. Do not change this feature unless the scope of the change is fully understood. You can configure the IIS server to reject requests whose query string is greater than a specified value. If the request's query string is greater than the configured value, this error is returned. If the allowed length of the query string needs to be increased, modify the configuration/system.webServer/security/requestFiltering/requestLimits@maxQueryString setting.
View more information »
検索した結果,IIS 7はQuery Stringに対して長さ制限があることが分かった.デフォルトは2048です.
この問題の解決策はconfiguration/systemを修正することによって可能である.webServer/security/requestFiltering/requestLimits@maxQueryString setting.
<requestLimits maxQueryString="length" />

マイクロソフトKB:Error message when you visit a Web site that is hosted on a server that is running IIS 7.0:「HTTP Error 404.15–Not Found」
 
 
検索の過程で、各ブラウザと各WebサーバーはURLに対して長さの制限が以下の通りであることを発見した.
httpプロトコルでは、urlの長さに制限はありません.urlの最大長さはユーザーブラウザとWebサーバに関係していることが多く、異なるブラウザでは、許容できる最大長さは異なることがよくあります.もちろん、異なるWebサーバが処理できる最大長のURLの能力も違います.以下に、各種ブラウザやサーバの最大処理能力について説明する.
Microsoft Internet Explorer(Browser)IEブラウザのURLに対する最大制限は2083文字で、この数字を超えると、送信ボタンには何の反応もありません.私のテストでは、この数字が検証されました.
マイクロソフトの公式にも説明があります.
Microsoft Internet Explorer has a maximum uniform resource locator (URL) length of 2,083 characters. Internet Explorer also has a maximum path length of 2,048 characters. This limit applies to both POST request and GET request URLs. If you are using the GET method, you are limited to a maximum of 2,048 characters, minus the number of characters in the actual path. However, the POST method is not limited by the size of the URL for submitting name/value pairs. These pairs are transferred in the header and not in the URL. Firefox(Browser)は、FirefoxブラウザのURLの長さを65536文字に制限していますが、私がテストした場合、最大8182文字しか処理できません.urlの長さはブラウザの制限のほか、Webサーバの制限も受けますが、私が本体で使用しているのはubuntu apacheサーバで、最大処理能力は8192文字(10文字差があるのはなぜなのか分かりません)で、この長さを超えると、サーバは次のエラーメッセージを返します.
Safari(Browser)URLの最大長は80000文字に制限されています.
Opera(Browser)URLの最大長は190000文字に制限されています.
Google urlの長さが8182文字を超えると、次のサーバエラーが発生します.
と書く
Request-URI Too Large The requested URL's length exceeds the capacity limit for this server. Apache/2.2.12 (Ubuntu) Server at 127.0.1.1 Port 80
Apache(Server)は最大url長8192文字を受け入れることができますが、私のテストデータは8182、10文字で、違いはなく、データは具体的に一致しています.
Microsoft Internet Information Server(IIS)が最大urlを許容できる長さは16384文字です.
以上のデータから分かるように、すべてのユーザーが正常に閲覧できるように、私たちのURLはIEの最大長制限(2038文字)を超えないほうがいいです.もちろん、URLが直接ユーザーに提供されず、プログラム呼び出しに提供される場合、側のこの場合の長さはWebサーバの影響しか受けません.
注:最大長さが2038文字に制限されている場合、パラメータ差が少なく1000文字程度の漢字を伝えることができるのではないかと思う友人もいるかもしれません.このように考えるのは実は間違っていて、中国語の伝達に対して、最終的にurlencode後の符号化形式で伝達して、ブラウザの符号化がUTF 8ならば、1つの漢字が最終的に符号化した文字の長さは9文字です.