簡體   English   中英

如何在nginx或apache或caddy中禁用對http1請求的響應?

[英]how to disable responding to http1 requests in nginx or apache or caddy?

我有一個http2服務器,但默認情況下它會響應http1請求。

我想停止我的服務器響應http1請求嗎?

大多數瀏覽器可能使用alpn或npn。 是否可以僅刊登http2廣告? 還是應用程序協議的自定義列表?

在Caddy中,如果您願意修改源代碼,則可以在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的協議,這將立即關閉連接而不發送標題。

您可以使用以下規則來阻止所有http1請求。 但是不建議這樣做。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM