UpgradeUpgrade는 이미 열린 연결에서 다른 프로토콜로 전환하자고 제안하는 헤더입니다. 요청에서는 클라이언트가 원하는 프로토콜을 나열하고, 응답에서는 서버가 선택한 전환 프로토콜을 알립니다.
가장 대표적인 용도는 HTTP 연결을 WebSocket으로 승격하는 것이며, `Connection: Upgrade`와 항상 함께 사용됩니다.
핸드셰이크는 이렇게 진행됩니다. 클라이언트가 `Upgrade: websocket`과 `Connection: Upgrade`를 보내면, 서버가 수락 시 `101 Switching Protocols`로 응답하고 같은 TCP 연결을 그 시점부터 WebSocket 프레임 통신으로 전환합니다. Upgrade는 홉 단위 헤더라 반드시 Connection 헤더에 나열되어야 하며, 프록시가 이를 이해해야 승격이 성립합니다.
WebSocket 외에도 평문 HTTP/1.1을 암호화 없는 HTTP/2로 올리는 `h2c`(HTTP/2 cleartext) 승격에 쓰였습니다. 다만 브라우저는 h2c Upgrade를 지원하지 않고 HTTP/2는 사실상 TLS(ALPN)로 협상되므로, 오늘날 Upgrade의 실사용은 대부분 WebSocket입니다. TLS로의 전환을 뜻하던 `Upgrade: TLS/1.0`(RFC 2817)도 거의 쓰이지 않습니다.
서버가 특정 프로토콜(예: HTTPS)로의 업그레이드를 요구할 때는 `426 Upgrade Required`로 응답하며, 이때 응답에 Upgrade 헤더로 요구 프로토콜을 명시합니다. 보안상 프록시·게이트웨이가 Upgrade 처리를 잘못하면 요청 스머글링·연결 혼선의 원인이 될 수 있어, 리버스 프록시의 WebSocket 패스스루 설정(Upgrade/Connection 헤더 전달)이 정확해야 합니다.
Upgrade: <protocol>[/<version>][, ...]e.g. Upgrade: websocket