今日はajax postで長文を送った場合にエラーになってしまった場合の対策備忘録です。
サーバはWindows IISです。
今までは普通に送れていたのに、長文にした時にエラーになってしまう場合は、IISにはじかれていると考えられます。
ちなみにデフォルトは何バイトか調べて居ません。
で、まずはエラーの内容確認
$.ajax({ type: "Post", url: "************", contentype: "application/json" dataType:"json", success: function(msg){ document.open(); document.write(msg); document.close(); }, error: function(XMLHttpRequest, textStatus, errorThrown){ msg="--- Error Status ---" msg=msg+"<BR>"+"status:"+XMLHttpRequest.status; msg=msg+"<BR>"+"statusText:"+XMLHttpRequest.statusText; msg=msg+"<BR>"+"textStatus:"+textStatus; msg=msg+"<BR>"+"errorThrown:"+errorThrown; for(var i in errorThrown) { msg=msg+"<BR>"+"error "+i+":"+ errorThrown[i]; } document.open(); document.write(msg); document.close(); } });
エラーコードは次のような感じです。
404.13 : コンテンツの長さが長すぎます
404.14 : URL が長すぎます
404.15 : クエリ文字列が長すぎます
各々は以下のパラメータで対応できます。
maxAllowedContentLength
maxUrl
maxQueryString
具体的には、web.congigの中に下のような感じで記述します。
<configuration> <system.webServer> <security> <requestFiltering> <requestLimits maxAllowedContentLength="30000000" maxUrl="300" maxQueryString="10000"/> </requestFiltering> </security> </system.webServer> </configuration>
で、今回の備忘録はajax postで長文を送った場合にエラーとなった場合への対応備忘録ですので、コンテンツが長い場合、URLが長い場合は調べて居ませんが、
クエリー文字列が長い場合、上の対応をしたとしても、実はまだエラーになります。
※クエリー文字列が長すぎる旨のエラーになってしまいます。
で、どうすれば良いかと言うともう一つ「maxQueryStringLength」パラメータを設定してあげます。
やはり、web.configの中で設定するのですが、
<configuration> <system.web> <httpRuntime maxQueryStringLength="10000" /> </system.web> </configuration>
私の環境では、
<configuration> <system.web> <httpRuntime targetFreamework="4.5" maxQueryStringLength="10000" /> </system.web> </configuration>
となりました。
これで長い文字列を含むajax Postでも正常にIISで受け付けてもらえました。
以上、ajax postで長文を送った場合にエラーとなった場合への対応備忘録でした。