HTTP 417 エラー

とある環境で"HTTP 417 エラー"が返ってきてしまいました。

Wikipediaステータスコードの意味を調べると次のように記載されていました。

"Expectヘッダによる拡張が失敗。その拡張はレスポンスできない。またはプロキシサーバは、次に到達するサーバがレスポンスできないと判断している。具体例として、Expect:ヘッダに100-continue以外の変なものを入れた場合や、そもそもサーバが100 Continueを扱えない場合に返す。"

※引用元

http://ja.wikipedia.org/wiki/HTTP%E3%82%B9%E3%83%86%E3%83%BC%E3%82%BF%E3%82%B9%E3%82%B3%E3%83%BC%E3%83%89

 

"100 Continue"ってなんだろうと思い調べてみました。

"100 Continue"とはサーバーがデータの受け入れが可能かどうか判断するリクエストのようです。

"100 Continue"のリクエストが正常に通った後に、実際のリクエスト内容である"body"を送ることになります。

 

図で示すと次のようなイメージです。

◆"100 Continue"を使う場合。

Client ---( POST + HTTP Request Header )--> Server
Client <--( HTTP/1.1 100 Continue )     --- Server
Client ---( Body )                      --> Server
Client <--( HTTP/1.1 200 OK など )      --- Server

◆"100 Continue"を使わない場合。

Client ---( POST + HTTP Request Header + Body )--> Server
Client <--( HTTP/1.1 200 OK など )             --- Server

今回の環境では、プロキシサーバーが"100 Continue"を取り扱えていなかったようですが、サーバーが取り扱っていない場合もあるようです。

現在はどうかわかりませんが、twitterは"100 Continue"を取り扱っていないという記事もありました。