私はhttp2サーバを持っていますが、デフォルトではhttp1リクエストに応答します。nginxまたはapacheまたはcaddyでhttp1要求への応答を無効にする方法は?
http1リクエストに応答してサーバーを停止したいですか?
ほとんどのブラウザでは、alpnまたはnpnが使用されます。 http2だけを広告する可能性はありますか?またはアプリケーションプロトコルのカスタムリスト?
私はhttp2サーバを持っていますが、デフォルトではhttp1リクエストに応答します。nginxまたはapacheまたはcaddyでhttp1要求への応答を無効にする方法は?
http1リクエストに応答してサーバーを停止したいですか?
ほとんどのブラウザでは、alpnまたはnpnが使用されます。 http2だけを広告する可能性はありますか?またはアプリケーションプロトコルのカスタムリスト?
次のようなルールを使用して、すべてのhttp1リクエストをブロックできます。しかし、これを行うことはお勧めできません。キャディーで
if ($server_protocol ~* "HTTP/1*") {
return 444;
}
これで接続が閉じられます。私はHTTP1をサポートしていることを宣伝することさえしたくありません。 –
あなたがソースコードを変更慣れている場合、あなたはcaddyhttp/httpserver/server.go
で次の変更を行うことができます。
変更という行:
var defaultALPN = []string{"h2", "http/1.1"}
...それが言うようには:
var defaultALPN = []string{"h2"}
これはALPNを経由して広告HTTP/1.1のを防ぐことができます。
そしてServeHTTP
方法の先頭にこのコードを追加:
func (s *Server) ServeHTTP(w http.ResponseWriter, r *http.Request) {
if !r.ProtoAtLeast(2, 0) {
if hj, ok := w.(http.Hijacker); ok {
conn, _, err := hj.Hijack()
if err == nil {
conn.Close()
}
}
return
}
…
}
これは直ちにHTTP/2よりも前の任意のプロトコルが使用される場合、ヘッダーを送信せずに接続を閉じます。
なぜHTTP/1.x要求をブロックしたいのですか? –