2017-05-17 12 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 이상을 사용하는 경우 헤더를 전송하지 않고 연결을 닫습니다.