1xx

状態符号 1xx (HTTP)

[3] HTTP や派生プロトコルでは、百番台の状態符号は要求された処理の途中経過的なものを示す暫定応答を表します。正式な応答はしばらくした後に続けて送られてくるはずです。

仕様書

意味

[105] 1xx は、要求された動作を完了して最後の応答を送信する前に接続状態や要求の進捗を知らせるための暫定的な応答を表しています >>104

構文

[102] 1xx 応答は、メッセージ本体を持ちません >>101状態行ヘッダー群の後の最初の空行をもって応答は終わりとなります >>104

[110] 1xx でも Connection: close の意味は特別に規定はされていません。 Connection: close が指定されていればその応答をもって接続を閉じることが示されているものと考えられます。

しかし異常な終了ではあります。

[112] 1xx では Date: ヘッダー生成しなくても構いません >>111

文脈

[10] HTTP/2 では、サーバー応答ヘッダーを表すフレームの前に 0個以上の 1xx 応答を送ることができます。

[9] HTTP/1.1 では、サーバー最後の応答を送る前に0個以上の 1xx 応答を送ることができます。

HTTP接続も参照。

[106] HTTP/1.0 クライアントに対して 1xx 応答を送ってはなりません >>104

[12] HTTP/1.0 クライアントに対して送ることは禁止されていませんが、 HTTP/1.0 応答で使うことは禁止されていません。しかし明示的に認める仕様もありません。 HTTP/1.0 にせよ HTTP/1.1 にせよクライアントが受信した時どう処理するべきかも不明です。

[8] HTTP/0.9 には 1xx 応答は存在しません。

処理

[107] クライアントは、 1xx 応答を期待していない場合であっても、 最後の応答の前に 1xx 応答が1つ以上現れるのを構文解析できなければなりません。 期待していない 1xx 応答は無視して構いません>>104

[108] は、自身が 1xx 応答の生成を要求した場合を除き、 1xx 応答転送しなければなりません >>104

[109] 例えば要求転送するに当たり Expect: 100-continue を追加した場合には、 100 応答転送する必要はありません >>104

[6] クライアントが対応していない 101 応答を受信した場合のクライアントの処理は、101 を参照してください。

[11] HTTP/1.0 応答でも HTTP/1.1 応答でも、 ChromeFirefoxIE1xx 応答を無視するようです。

[14] ChromeFirefoxIE も、 Content-Length: ヘッダーConnection: close があっても無視します。

[7] クライアント1xx を受信した後で最後の応答を受信する前に接続が閉じられた場合に fetch などの API でどう扱うべきかは定かではありませんが、 1xx 応答を結果と返すべきではないでしょうし、 ネットワークエラーを返すべきかもしれません。

[13] ChromeIEFirefox は、 1xx 応答の後接続が閉じられた時、ネットワークエラーとするようです。

[15] ChromeIE は、 HTTP/1.0/HTTP/1.11xx の後は、 HTTP/1.0HTTP/1.1 の最後の応答ではなく、 HTTP/0.9 であっても構いません (通常の判定方法を使うようです)。 FirefoxHTTP/0.9 だとネットワークエラーにします。

[16] 101 の項も参照。

歴史

[103] RFC 1945 (HTTP/1.0) 9.1; RFC 2068・2616 (HTTP/1.1) 10.1 Informational 1xx

This class of status code indicates a provisional response, consisting only of the Status-Line and optional headers, and is terminated by an empty line. {2616} There are no required headers for this class of status code. {1945} HTTP/1.0 does not define any 1xx codes and they are not a valid response to a HTTP/1.0 request. However, they may be useful for experimental applications which are outside the scope of this specification. {2068, 2616} Since HTTP/1.0 did not define any 1xx status status codes, servers MUST NOT send a 1xx response to an HTTP/1.0 client except under experimental conditions.

この状態符号の級は、暫定応答を示し、 Status-Line と省略可能な頭並びのみを含み、空行で愁嘆します。 この状態符号の級では必須の頭はありません。 HTTP/1.0 は 1xx 符号を定義しておらず、 HTTP/1.0 要求に対する妥当な応答ではありません。しかし、この仕様書の適用範囲外の実験的応用には有用かもしれません。 HTTP/1.0 は 1xx 状態符号を定義していませんでしたから、サーバーは HTTP/1.0 クライアントには実験的条件下を除いて 1x 応答を送ってはなりません

{2616} A client MUST be prepared to accept one or more 1xx status responses prior to a regular response, even if the client does not expect a 100 (Continue) status message. Unexpected 1xx status responses MAY be ignored by a user agent.

クライアントは、たとえそのクライアントが 100 (継続) 状態メッセージを期待していないとしても、正規の応答の前の1つ以上の 1xx 状態応答を受け入れる準備ができていなければなりません。 予期せぬ 1xx を利用者エージェントは無視しても構いません

Proxies MUST forward 1xx responses, unless the connection between the proxy and its client has been closed, or unless the proxy itself requested the generation of the 1xx response. (For example, if a proxy adds a "Expect: 100-continue" field when it forwards a request, then it need not forward the corresponding 100 (Continue) response(s).)

串は、串とそのクライアントの間の接続が閉じているか、 又は串自身が 1xx 応答の生成を要求したのでない限り、 1xx 応用を転送しなければなりません。 (例えば、串が要求を転送するときに Expect: 100-continue 欄を加えたのなら、対応する 100 (継続) 応答(群)を転送する必要はありません。)

関連

[4] 警告符号1xx とは関係ありません。

メモ

[1] 巷の HTTP/1.1 適合を主張する利用者エージェントって、 ほんとに 1xx に対応しているのですかね?

[2] 本体を使えれば、「しばらくお待ち下さい」的メッセージに使えると思うんですが・・・。 multipart/x-mixed-replace の代替にも使えるかも。 その辺がちょいとばかり残念かも。

[5] mod_proxy_http - Apache HTTP Server Version 2.4 ( 版) <http://httpd.apache.org/docs/current/en/mod/mod_proxy_http.html>

proxy-interim-response

This variable takes values RFC (the default) or Suppress. Earlier httpd versions would suppress HTTP interim (1xx) responses sent from the backend. This is technically a violation of the HTTP protocol. In practice, if a backend sends an interim response, it may itself be extending the protocol in a manner we know nothing about, or just broken. So this is now configurable: set proxy-interim-response RFC to be fully protocol compliant, or proxy-interim-response Suppress to suppress interim responses.