2017-05-17 16 views
0

私はhttp2サーバを持っていますが、デフォルトではhttp1リクエストに応答します。nginxまたはapacheまたはcaddyでhttp1要求への応答を無効にする方法は?

http1リクエストに応答してサーバーを停止したいですか?

ほとんどのブラウザでは、alpnまたはnpnが使用されます。 http2だけを広告する可能性はありますか?またはアプリケーションプロトコルのカスタムリスト?

+0

なぜHTTP/1.x要求をブロックしたいのですか? –

答えて

0

次のようなルールを使用して、すべてのhttp1リクエストをブロックできます。しかし、これを行うことはお勧めできません。キャディーで

if ($server_protocol ~* "HTTP/1*") { 
    return 444; 
} 
+0

これで接続が閉じられます。私はHTTP1をサポートしていることを宣伝することさえしたくありません。 –

2

あなたがソースコードを変更慣れている場合、あなたは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よりも前の任意のプロトコルが使用される場合、ヘッダーを送信せずに接続を閉じます。

関連する問題