web-dev-qa-db-ja.com

SSL / TLSを必要とするリクエストに対して送信する適切なHTTP応答は何ですか

一部の呼び出しはHTTPを介して公開され、一部の呼び出しはAPIキーとHTTPSを介した暗号化を必要とするRESTfulAPIを設計しています。 HTTPリクエストがプライベートリソースの1つに送信された場合に、どの応答コードを送信する必要があるかを検討しています。これまでのところ、私に飛び出すのは412 --Precondition Failedだけですが、標準では、前提条件はサーバーではなくリクエスターによって課されることが示されています。

この状態に適切な応答コードはありますか、それとも私はただ諦めて4を実行する必要がありますか?

45
gtd

HTTPクライアントにHTTPSの使用を強制する最も安全な方法は HTTP Strict Transport Security です。

以前の一般的な提案は接続を切断することでしたが、これは HSTSを優先してプラクティスが削除されました (OWASP Webサイト)。

6
Brian Clozel

これがHTTPクライアントによって広く受け入れられているかどうかはわかりませんが、厳密に言えばRFCの場合、サーバーは次のように応答する必要があります。

HTTP/1.1 426 Upgrade Required
Upgrade: TLS/1.0, HTTP/1.1
Connection: Upgrade

ソース:
http://tools.ietf.org/html/rfc2817#section-4.2

28
MicE

返される適切なエラーコードは、 403.4 --SSLが必要 のようになります。

RFC for HTTP 1.1 に明示的に文書化されていませんが、この動作はそこで概説されている要件に一致します。

サーバーは要求を理解しましたが、それを実行することを拒否しています。承認は役に立ちません。リクエストは繰り返されるべきではありません。リクエストメソッドがHEADでなく、サーバーがリクエストが実行されなかった理由を公開したい場合は、エンティティで拒否の理由を説明する必要があります。サーバーが希望しない場合この情報をクライアントが利用できるようにすると、代わりにステータスコード404(見つかりません)を使用できます。

(SSLの例のように)独自のサブコードを追加すると役立つ場合がありますが、このサブコードはサードパーティにとって意味がないため、使用しないことをお勧めします。

したがって、最終的なエラーメッセージは「403-プライベートリソース」のようになります。 APIキーが欠落している場合でも、APIキーが実際にWWW-Authenticateヘッダーフィールドで送信されない限り、「401-Unauthorized」は使用しないでください。

6
mdb

403を理由句「HTTPSRequired」で返すのは実用的なようですオプションと私が使用するもの。

https://en.wikipedia.org/wiki/HTTP_4 を参照してください

REST Apiをリダイレクトすることは、サービスをどのように、または何が消費しているかがわからない場合があるため、特にお勧めできません。

4
NER1808

対応するhttps:URIにリダイレクトを送信するだけです。

[〜#〜] update [〜#〜]

これは間違った答えです-以下のコメントを参照してください

0
Jan Algermissen