HTTP/1.1 부터는 HTTP 이외의 프로토콜로 업그레이드를 할 수 있게 되었다. 이 기능을 통하여 HTTP를 다른 프로토콜로 전환하여 통신이 가능하다. Upgrade 요청은 클라이언트가 요청할 수도 있고 서버가 요청할 수도 있다.
보통은 다음 종류의 Upgrade가 많이 사용된다.
위 방법 중 HTTP에서 TLS로의 업그레이드 보단 ALPN을 사용하기를 권장하고 있다. 왜냐하면 만약 서버가 프로토콜 업그레이드를 지원하지 않는다면 일반 평문 통신을 하게 될 것이라 보안수준이 낮아지기 때문이다.
또한 HTTP/2 통신은 TLS를 사용한다는 것을 전제하고 있으며 ALPN 사용을 권장한다. (그리고 TLS를 사용하지 않은 HTTP/2를 구현하는 브라우저는 드믈다)
현재 HTTP의 Upgrade는 거의 웹소켓 프로토콜 전환용으로 사용된다.
다음은 클라이언트가 서버에게 프로토콜 업그레이드를 요청하는 요청헤더다.
GET /websocket HTTP/1.1
Host: example.com
Upgrade: websocket
Connection: Upgrade
이후 통신은 서버가 프로토콜 업그레이드를 지원하다면 HTTP 프로토콜에서 해당 프로토콜로 전환이 될것이고, 서버가 지원하지 않는다면 일반적인 GET 방식으로 진행되거나 거부하게 될 것이다.
만약 서버가 업그레이드를 지원한다면 다음과 같은 응답을 보낸다
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
만약 서버가 클라이언트에게 프로토콜 업그레이드를 요청한다면 다음과 같은 응답을 보낸다
HTTP/1.1 426 Upgrade Required
Upgrade: websocket
Connection: Upgrade