ブラウザからサーバー(ローカルホスト)にPOST
リクエストを送信しようとしています。私のリクエストURLは:
http://localhost:8080/myPath/myServlet?requestData={ .......//Json String......};
requestData
はjson文字列です(この目的のためにGSONを使用しています。)json文字列のデータが特定の制限を超えるまで、すべてが正常に機能しています。たとえば、json文字列でオブジェクトの配列を送信しています。リスト内のオブジェクトの数が67
を超えると、次のエラーが発生します。
AM org.Apache.coyote.http11.AbstractHttp11Processor process
INFO: Error parsing HTTP request header
Note: further occurrences of HTTP header parsing errors will be logged at DEBUG level.
これはなぜですか?私は完全に混乱しています。なぜこれが起こり、これを修正するために何をする必要があるのですか?特定の数のオブジェクトの後に突然動作を停止し、コンソールでこのエラーが発生することを理解していないため、この理由を理解したいと思います。
同様の問題があり、リクエスト本文にデータを含むPOSTリクエスト(Firefox用RESTClientプラグインを使用))を送信し、同じメッセージを受信していました。
私の場合、これは、HTTPSが構成されていないローカルのTomcatインスタンスでHTTPSプロトコルを使用しようとしたために発生しました。
POSTを誤って使用しているようです。 POSTを使用していますが、GETスタイルのリクエストパラメータとしてJSONを送信しています。 POSTを使用する場合は、コンテンツをリクエストとして送信する必要がありますbody。この場合、妥当なサイズ制限はありません。
私の場合、問題はセキュリティの問題が原因でした。認証にcsrfを使用しました。すべての投稿フォームに_ csrfを入力する必要があります
<input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/>
以前は真剣に質問に答えなかったことをお詫びします。
1.特殊文字が原因の可能性があります。このURLから詳細を取得できます。 https://bz.Apache.org/bugzilla/show_bug.cgi?id=60594
それを解決する:
encodeURIComponent(JSON.stringify(data))
または、Tomcatのバージョンを7.0.67以下に変更します。開発者の意見によると、次のバージョンのTomcat開発者は、|,{,}
を許可するオプションを設定しています。詳細を取得 http://Tomcat.Apache.org/Tomcat-8.0-doc/config/systemprops.html#Other
新しい環境変数は次の場所に含まれます。-9.0.0.M18以降のトランク
8.5.12以降の8.5.x
8.0.x(8.0.42以降)
7.0.x以降(7.0.76以降)2。
別の理由として、リクエストヘッダーが大きすぎる可能性があります。server.xml
を変更することで解決できます。
<Connector port="8080" maxHttpHeaderSize="8192" maxThreads="150"
minSpareThreads="25" maxSpareThreads="75" enableLookups="false"
redirectPort="8443" acceptCount="100" connectionTimeout="20000"
disableUploadTimeout="true" />
うまくいきますように!
追加のヘッダーを渡すことでこれを修正しました
connection:closeとリクエスト。
これで問題が解決するかどうか試してみてください。
ヘッダーの解析に関する問題は、さまざまな理由で発生する可能性があります。
私の場合、次のXMLが渡されたことが原因です。
<soapenv:Header/>
空のヘッダー要素はSoapUIによって生成されました。 WSのXMLから<soapenv:Header/>
を削除した後、すべてが順調でした。