HTTPQUERY
한국어

Connection

사용법

Connection 헤더는 HTTP/1.1의 홉 단위(hop-by-hop) 헤더로, 하부 TCP 커넥션의 생명 주기를 관리하는 데 사용됩니다. 클라이언트나 서버는 이 헤더를 포함시켜 커넥션이 추가 요청을 위해 유지되는지, 아니면 현재 교환 후 닫히는지를 알립니다.

HTTP/1.1에서 지속 커넥션은 기본 동작입니다. Connection: keep-alive를 보내는 것은 엄밀히 말해 불필요하지만 실무에서는 여전히 흔합니다. Keep-Alive 헤더는 Connection 헤더와 함께 동작하여 지속 커넥션의 타임아웃과 요청 수 제한을 설정합니다.

Connection 헤더는 두 번째 역할도 합니다. 메시지에 존재하는 홉 단위 헤더 필드 이름을 나열하는 것입니다. 중간 노드(프록시, 게이트웨이)는 메시지를 다음 홉으로 전달하기 전에 Connection 값에 나열된 헤더를 모두 제거합니다.

참고

HTTP/1.0은 요청-응답 주기마다 커넥션을 닫는 것이 기본이어서 지속 커넥션을 위해 Connection: keep-alive가 필요했습니다. HTTP/1.1은 기본값을 뒤집어, Connection: close를 명시적으로 보내지 않는 한 커넥션이 유지됩니다. 일련의 요청 중 마지막 요청 이후 서버 자원을 해제하려면, 또는 서버 부하가 높을 때는 Connection: close를 보내십시오.

참고

Connection 헤더는 HTTP/2와 HTTP/3에서 금지됩니다. 이들 프로토콜은 자체 프레이밍 계층을 통해 커넥션 생명 주기를 관리합니다. HTTP/1.1과 HTTP/2 사이를 변환하는 프록시는 이 헤더를 자동으로 제거합니다.

keep-alive

keep-alive 디렉티브는 송신 측이 후속 요청을 위해 커넥션을 열어 두기를 원한다는 신호입니다. HTTP/1.1에서는 이것이 기본값입니다. 이 값이 있을 때 Keep-Alive 헤더는 유휴 타임아웃과 최대 요청 수 같은 매개변수를 제공합니다.

close

close 디렉티브는 현재의 요청-응답 쌍을 완료한 뒤 커넥션을 닫으라고 상대방에게 알립니다. HTTP/1.0에서는 트랜잭션마다 닫는 것이 기본 동작이었습니다.

예시

클라이언트가 명시적인 keep-alive 디렉티브와 함께 요청을 보냅니다. 이는 응답을 전달한 뒤에도 TCP 커넥션을 열어 두라고 서버에 알립니다.

GET /api/status HTTP/1.1
Host: api.example.re
Connection: keep-alive

서버가 이 응답을 전달한 뒤 커넥션을 닫을 것임을 알립니다. 클라이언트는 다음 요청을 위해 새 TCP 커넥션을 엽니다.

HTTP/1.1 200 OK
Content-Type: application/json
Connection: close

Connection 헤더는 홉 단위 헤더를 나열하기도 합니다. 이 예시에서 프록시는 메시지를 전달하기 전에 X-Debug-Token 헤더를 제거합니다.

GET /resource HTTP/1.1
Host: example.re
Connection: keep-alive, X-Debug-Token
X-Debug-Token: abc123