アプリケーションに HTTP-GET リクエストを送信するシステムと統合しています。Jetty を使用すると、何かを叩き合わせるのに数分かかりました。
curl (リクエストに必要なエスケープを含む) でテストしたところ、すべてバラ色でした。要求どおりに応答が返されました。
$ curl http://localhost:9100?field1=value1\&field2=value2\&field3=value3
マシン上の TCP ダンプは、リクエストが次のように送信されたことを示しています。
GET /?field1=value1&field2=value2&field3=value3 HTTP/1.1
User-Agent: curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.13.1.0 zlib/1.2.3 libidn/1.18 libssh2/1.2.2
Host: xxx.xxx.xxx.xxx:9100
Accept: */*
しかし、人生はそれほど単純ではありません。実際のシステムとの統合を実際に開始できるようにこれをデプロイしたとき、コード内のハンドラーは呼び出されませんでした。Jetty はすぐに「HTTP/1.1 400 Bad Request」で応答しました。TCP ダンプにより、次のことが明らかになりました。
GET ?field1=value1&field2=value2&field3=value3 HTTP/1.1
それだけです...ヘッダー情報はありません。上記のみです。
私の質問は、上記の要求が実際に有効かどうかです。スラッシュは必須ですか?必須のヘッダー エントリはありますか?
何か案は?これは、これを機能させるためにホイールを再設計する必要があるということですか?
編集:
telnetで接続してみました。一部の Web サーバーでは、GET リクエストの後に / が実際に必要なようです。ただし、それらの間で扱いが異なるようです。Jetty は文句を言います。Google が実行している Web サーバーは文句を言います...しかし、Apache はそれで問題ない例です。ヘッダー情報は必要ないようです。