브라우저가 각 HTTP 요청에 대해 새 TCP 연결을 작성합니까?


23

따라서 HTTP는 기본적으로 TCP를 통한 텍스트 프로토콜이며 TCP는 상태 / 연결 기반이라는 것을 알고 있습니다. 즉, HTTP 요청을 수행하기 전에 브라우저가 TCP를 통해 서버에 연결되어야합니다. 질문 : 브라우저는 일반적으로 각 HTTP 요청에 대해 새 TCP 연결을 작성합니까?

브라우저는 사용자가 해당 서버를 계속 탐색하는 한 TCP 요청을 열고 계속 유지할 수 있지만 서버는이를 처리하기 위해 많은 양의 최대 연결을 사용해야합니다. 그러나 브라우저가 각 요청에 대한 연결을 만들고 사용자가 동일한 서버에서 많은 것을 탐색하면 낭비처럼 보일 것입니다. 일반적으로 어떻게 작동합니까? 아마도 타이머를 사용하여?

답변:


30

HTTP / 0.9 (더 이상 사용되지 않음)에서 각 요청은 별도의 TCP 연결을 사용했으며 연결을 닫음으로써 응답의 끝을 알 렸습니다.

HTTP / 1.0에서는 별도의 연결이 여전히 공식 기본값입니다. 그러나 비공식이지만 매우 널리 지원되는 " Connection: Keep-Alive"요청 헤더를 사용하여 서버가 지원하는 경우 영구 연결을 요청할 수 있습니다.

HTTP / 1.1에서는 지속적 연결 이 기본값이되었으며 이전 단일 요청 동작을 명시 적으로 요청해야합니다. 일반적으로 여러 (2-5) 영구 연결이 사용됩니다.

(선택적으로 요청은 파이프 라인 될 수 있지만 구현하기가 어렵고 해결하는 것보다 많은 문제 (헤드 라인 차단 등)가 발생하므로 HTTP / 1.x 파이프 라이닝을 사용하는 사람은 없습니다.)

HTTP / 2 (일명 SPDY )는 여러 요청을 동시에 다중화하도록 특별히 설계되었습니다. 응답 / 응답 레이어가있어 순서에 상관없이 응답을 동시에 전달할 수 있습니다.

참고 자료 : Wikipedia article and RFC 2616 section 8.1 .



6

"연결 : 연결 유지"헤더가 있습니다. 자세한 내용은 enwiki 를 참조하십시오.

Wireshark를 사용하여 연결을 캡처 및 분석하고 모든 헤더를 볼 수 있습니다.


피들러 대신 Wireshark를 사용해야하는 이유
Pacerier

3
피들러는 1입니다. 오픈 소스 소프트웨어가 아닙니다. 2. Windows 전용.
Vi.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.