HTTP/1.1 업그레이드 헤더

HTTP/1.1 Upgrade header

Upgrade 헤더 필드는 HTTP/1.1에서 도입된 HTTP 헤더 필드로, 교환에서 클라이언트는 클리어텍스트 요청을 하는 것으로 시작하며, 이후 새로운 HTTP 프로토콜 버전으로 업그레이드되거나 다른 프로토콜로 전환된다.연결 업그레이드는 클라이언트에 의해 요청되어야 하며, 서버가 업그레이드를 시행하고자 할 경우,426 Upgrade Required응대하다그런 다음 클라이언트는 연결을 열어둔 상태에서 적절한 업그레이드 헤더를 사용하여 새 요청을 보낼 수 있다.

TLS와 함께 사용

한 가지 용도는 일반 HTTP 포트에서 요청을 시작하고 TLS(Transport Layer Security)로 전환하는 것이다.[1]실제로 그러한 사용은 드물며, HTTPS가 암호화된 HTTP를 시작하는 훨씬 일반적인 방법이다.

서버가 a를 반환함426 레거시 클라이언트에 장애가 클라이언트와 관련되었음을 알리는 상태 코드(400레벨 코드는 클라이언트 오류를 나타낸다.)

이 방법은 다음과 같은 이유로 보안 연결을 설정하는 것이 유리하다.

  • 서버 측에서 복잡하고 문제가 있는 URL 리디렉션이 필요하지 않음
  • 보안 웹 사이트의 가상 호스팅 사용(HTTPS는 서버 이름 표시를 사용하여 이러한 호스팅도 허용함)
  • 특정 리소스에 액세스할 수 있는 단일 방법을 제공하여 사용자 혼란 가능성 감소

암호화된 보안 수단과 암호화되지 않은 명확한 수단에 의해 서버에서 동일한 자원을 이용할 수 있는 경우, 중간인(man-in-the-middle)은 서버와의 암호화된 연결을 유지하면서 클라이언트와의 비암호화 및 인증되지 않은 연결을 암호화된 연결을 유지할 수 있다.

이 방법의 단점은 다음과 같다.

  • 클라이언트가 URI에서 보안 HTTP에 대한 요구 사항을 지정할 수 없음(업그레이드 협상을 통해 요구될 수 있지만),
  • HTTP는 단위로 정의되기 때문에 프록시 서버를 우회하기 위해 HTTP 터널링이 필요할 수 있다.

WebSocket과 함께 사용

WebSocket은 또한 호환되는 방법으로 HTTP 서버와의 연결을 설정하기 위해 이 메커니즘을 사용한다.[2]WebSocket Protocol은 업그레이드된 연결을 설정하기 위한 핸드셰이크와 실제 데이터 전송의 두 부분으로 구성되어 있다.먼저 클라이언트는 다음 항목을 사용하여 WebSocket 연결을 요청하십시오.Upgrade: WebSocket그리고Connection: Upgrade헤더, 사용 중인 버전을 설정하고 핸드셰이크를 설정하는 몇 가지 프로토콜별 헤더.서버가 프로토콜을 지원하는 경우, 동일한 방식으로 응답Upgrade: WebSocket그리고Connection: Upgrade머리글과 핸드셰이크를 완료하십시오.[3]핸드셰이크가 성공적으로 완료되면 데이터 전송이 시작된다.

HTTP/2와 함께 사용

HTTP 업그레이드 메커니즘은 일반 HTTP에서 시작하는 HTTP/2를 설정하는 데 사용된다.[4]클라이언트가 HTTP/1.1 연결을 시작하고Upgrade: h2c머리글서버가 HTTP/2를 지원하는 경우 HTTP 101 스위칭 프로토콜 상태 코드로 응답한다.HTTP 업그레이드 메커니즘은 cleartext HTTP2 (h2c)에만 사용된다.TLS를 통한 HTTP2의 경우(h2) 대신 ALPN TLS 프로토콜 확장이 사용된다.

참고 항목

참조

  1. ^ RFC 2817
  2. ^ "The WebSocket Protocol". IETF. Retrieved 15 December 2013.
  3. ^ Raymor, Brian. "WebSockets: Stable and Ready for Developers". Microsoft Developer Network. Archived from the original on 16 December 2013. Retrieved 15 December 2013.
  4. ^ "Starting HTTP/2 for "http" URIs". Hypertext Transfer Protocol Version 2 (HTTP/2). doi:10.17487/RFC7540. RFC 7540.

외부 링크