찾다
백엔드 개발PHP 튜토리얼면접관이 질문했습니다. TCP 연결은 몇 개의 HTTP 요청을 보낼 수 있습니까?

다음과 같은 고전적인 인터뷰 질문이 있었습니다. 브라우저에 URL을 입력하고 페이지가 표시되는 과정에서 어떤 일이 발생합니까?

준비한 대부분의 학생들이 대답할 수 있다고 생각하지만 계속해서 질문한다면 수신된 HTML에 수십 개의 이미지 태그가 포함되어 있다면 어떤 방식으로, 어떤 순서로, 몇 개의 연결이 설정되는지, 어떤 프로토콜이 사용되는지 다운로드한 것은 어떻습니까?

면접관이 질문했습니다. TCP 연결은 몇 개의 HTTP 요청을 보낼 수 있습니까?

이 문제를 이해하려면 먼저 다음 다섯 가지 질문을 해결해야 합니다.

1. 서버와 TCP 연결을 설정한 후 HTTP 요청이 완료된 후 최신 브라우저의 연결이 끊어 집니까? 어떤 상황에서 연결이 끊어지나요?

2. 하나의 TCP 연결은 몇 개의 HTTP 요청에 대응할 수 있나요?

3. TCP 연결에서 HTTP 요청을 함께 보낼 수 있나요?(예: 요청 3개를 함께 보내고 응답 3개를 함께 수신)

4. 때때로 페이지를 새로 고칠 때 SSL 연결을 다시 설정할 필요가 없는 이유는 무엇입니까?

5. 브라우저에는 동일한 호스트가 설정하는 TCP 연결 수에 제한이 있나요?

첫 번째 질문

최신 브라우저는 서버와 TCP 연결을 설정한 후 HTTP 요청이 완료된 후 연결이 끊어지나요? 어떤 상황에서 연결이 끊어지나요?

HTTP/1.0에서는 서버가 HTTP 응답을 보낸 후 TCP 연결을 끊습니다. 그러나 각 요청은 TCP 연결을 다시 설정하고 연결을 끊기 때문에 비용이 너무 많이 듭니다. 따라서 표준에 설정되어 있지 않더라도 일부 서버에서는 Connection: keep-alive 헤더를 지원합니다. 즉, 이 HTTP 요청을 완료한 후에는 HTTP 요청에 사용되는 TCP 연결을 끊지 마십시오. 이것의 장점은 연결을 재사용할 수 있고 나중에 HTTP 요청을 보낼 때 TCP 연결을 다시 설정할 필요가 없다는 것입니다. 연결이 유지되면 SSL의 오버헤드도 피할 수 있습니다. 짧은 시간 안에 www.github을 두 번 방문했습니다. .com의 시간 통계:

면접관이 질문했습니다. TCP 연결은 몇 개의 HTTP 요청을 보낼 수 있습니까?

첫 번째 방문에는 초기 연결 및 SSL 오버헤드가 있습니다.

면접관이 질문했습니다. TCP 연결은 몇 개의 HTTP 요청을 보낼 수 있습니까?

초기 연결 및 SSL 오버헤드가 사라졌음을 나타냅니다. 동일한 TCP 연결이 사용됩니다.

지속적 연결: TCP가 유지되므로 연결의 이점이 너무 많습니다. HTTP/1.1은 연결 헤더를 표준에 작성했으며 요청에 연결: 닫기가 표시되지 않는 한 기본적으로 지속적인 연결을 활성화합니다. 브라우저와 서버 간의 TCP 연결은 일정 시간 동안 유지되며 요청이 완료되면 연결이 끊어집니다.

첫 번째 질문에 대한 대답은 다음과 같습니다. 기본적으로 TCP 연결이 설정되고 연결이 끊어지지 않습니다. 요청 헤더에 Connection: close를 선언하면 요청이 완료된 후 연결이 닫힙니다.

두 번째 질문

하나의 TCP 연결은 몇 개의 HTTP 요청에 대응할 수 있나요?

첫 번째 질문을 이해하면 이 질문에는 이미 답변이 있습니다. 연결이 유지되면 TCP 연결은 여러 HTTP 요청을 보낼 수 있습니다.

세 번째 질문

TCP 연결에서 HTTP 요청을 함께 보낼 수 있나요?(예를 들어 세 개의 요청을 함께 보내고 세 개의 응답을 함께 수신하는 경우)?

HTTP/1.1 문제가 있습니다. 단일 TCP 연결은 동시에 하나의 요청만 처리할 수 있습니다. 즉, 두 요청의 수명 주기는 처음부터 끝까지 동일할 수 없습니다. TCP 연결은 겹칠 수 없습니다.

HTTP/1.1 사양에서는 이 문제를 해결하기 위해 파이프라이닝을 지정하고 있지만 브라우저에서는 이 기능이 기본적으로 꺼져 있습니다.

먼저 파이프라이닝이 무엇인지 살펴보겠습니다. RFC 2616은 다음과 같이 규정합니다.

A client that supports persistent connections MAY "pipeline" its requests (i.e., send multiple requests without waiting for each response). A server MUST send its responses to those requests in the same order that the requests were received. 一个支持持久连接的客户端可以在一个连接中发送多个请求(不需要等待任意请求的响应)。收到请求的服务器必须按照请求收到的顺序发送响应。

표준이 이렇게 설정되는 이유는 대략적으로 한 가지 이유를 추측할 수 있습니다. HTTP/1.1은 텍스트 프로토콜이므로 반환되는 콘텐츠는 다음과 같습니다. 어떤 요청이 전송되는지 구별할 수 없으므로 순서가 일관되어야 합니다. 예를 들어, 서버에 두 개의 요청(GET/query?q=A 및 GET/query?q=B)을 보내고 서버가 두 개의 결과를 반환하는 경우 브라우저는 응답이 어떤 요청에 해당하는지 확인할 방법이 없습니다. 응답 결과.

파이프라이닝 이 아이디어는 좋아 보이지만 실제로는 많은 문제가 있습니다.

  • 일부 프록시 서버는 HTTP 파이프라이닝을 올바르게 처리할 수 없습니다.

  • 올바른 파이프라인 구현은 복잡합니다.

  • 헤드 오브 라인 차단: TCP 연결을 설정한 후 이 연결 중에 클라이언트가 서버에 여러 요청을 지속적으로 보낸다고 가정합니다. 표준에 따르면 서버는 요청이 수신된 순서대로 결과를 반환해야 합니다. 서버가 첫 번째 요청을 처리하는 데 많은 시간을 소비한다고 가정하면 모든 후속 요청은 응답하기 전에 첫 번째 요청이 완료될 때까지 기다려야 합니다. .

따라서 최신 브라우저는 기본적으로 HTTP 파이프라이닝을 활성화하지 않습니다.

그러나 HTTP2는 TCP 연결에서 여러 HTTP 요청을 동시에 완료할 수 있는 멀티플렉싱 기능을 제공합니다. 멀티플렉싱이 얼마나 정확하게 구현되는지는 또 다른 질문입니다. HTTP2 사용의 효과를 살펴볼 수 있습니다.

면접관이 질문했습니다. TCP 연결은 몇 개의 HTTP 요청을 보낼 수 있습니까?

녹색은 요청 시작부터 반환 요청까지의 대기 시간이고 파란색은 응답 다운로드 시간이며 모두 동일한 연결에서 병렬로 완료되는 것을 볼 수 있습니다

그래서 이 질문에도 답이 있습니다 : HTTP/1.1에는 동시에 여러 요청을 보낼 수 있는 Pipelining 기술이 있지만, 기본적으로 브라우저가 꺼져 있기 때문에 이는 불가능하다고 볼 수 있습니다. HTTP2의 멀티플렉싱 기능으로 인해 동일한 TCP 연결에서 여러 HTTP 요청을 병렬로 처리할 수 있습니다.

그렇다면 HTTP/1.1 시대에 브라우저는 어떻게 페이지 로딩 효율성을 향상시킬 수 있을까요? 두 가지 주요 사항이 있습니다.

  • 서버와 설정된 TCP 연결을 유지하고 동일한 연결에서 여러 요청을 순차적으로 처리합니다.

  • 서버와 다중 TCP 연결을 설정합니다.

네 번째 질문

때때로 페이지를 새로 고칠 때 SSL 연결을 다시 설정할 필요가 없는 이유는 무엇입니까?

첫 번째 질문에 대한 토론에서 이미 답변을 찾을 수 있습니다. TCP 연결은 때때로 브라우저와 서버에 의해 일정 기간 유지됩니다. TCP는 재설정할 필요가 없으며 SSL은 자연스럽게 이전 TCP를 사용하게 됩니다.

다섯 번째 질문

브라우저에는 동일한 호스트가 설정한 TCP 연결 수에 제한이 있나요?

당시에는 멀티플렉싱이 없었다고 가정해 보겠습니다. 수십 개의 이미지가 포함된 웹페이지를 받으면 브라우저는 어떻게 해야 할까요? 순차 다운로드를 위해 TCP 연결을 여는 것은 확실히 불가능합니다. 그렇지 않으면 사용자는 반드시 기다려야 합니다. 그러나 HTTP 요청을 보내기 위해 각 사진에 대해 TCP 연결이 열리면 컴퓨터나 서버가 이를 감당하지 못할 수도 있습니다. 1,000장의 사진이 있으면 1000개의 TCP 연결을 열 수 없으며, 컴퓨터가 NAT에 동의하더라도 동의하지 않을 수 있습니다.

그래서 대답은: 그렇습니다. Chrome은 동일한 호스트에 최대 6개의 TCP 연결을 허용합니다. 브라우저마다 약간의 차이가 있습니다.

developers.google.com/web/tools/ch...

다시 원래 질문으로 돌아가서, 수신된 HTML에 수십 개의 이미지 태그가 포함되어 있다면 이러한 이미지는 어떤 방식으로, 어떤 순서로 포함되어 있나요? 연결이 설정되었으며 이를 다운로드하는 데 어떤 프로토콜이 사용되었습니까?

이미지가 모두 HTTPS 연결이고 동일한 도메인 이름 아래에 있는 경우 브라우저는 SSL 핸드셰이크 후 서버와 HTTP2를 사용할 수 있는지 논의하고, 그렇다면 멀티플렉싱 기능을 사용하여 이 연결에서 멀티플렉싱을 수행합니다. 그러나 이 도메인 이름에 나열된 모든 리소스가 반드시 TCP 연결을 사용하여 얻어지는 것은 아니지만 멀티플렉싱이 사용될 가능성은 확실합니다.

HTTP2를 사용할 수 없다면 어떻게 해야 할까요? 또는 HTTPS를 사용할 수 없습니다(실제로는 HTTPS에 HTTP2가 구현되어 있으므로 HTTP/1.1만 사용할 수 있습니다). 브라우저는 호스트에서 여러 TCP 연결을 설정합니다. 연결 수의 최대 제한은 브라우저 설정에 따라 다릅니다. 모든 연결이 요청을 보내는 경우 브라우저는 이러한 연결을 사용하여 요청을 보냅니다. 그런 다음 다른 요청을 기다려야 합니다. #

위 내용은 면접관이 질문했습니다. TCP 연결은 몇 개의 HTTP 요청을 보낼 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명
이 기사는 learnku에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제
PHP와 Python : 다른 패러다임이 설명되었습니다PHP와 Python : 다른 패러다임이 설명되었습니다Apr 18, 2025 am 12:26 AM

PHP는 주로 절차 적 프로그래밍이지만 객체 지향 프로그래밍 (OOP)도 지원합니다. Python은 OOP, 기능 및 절차 프로그래밍을 포함한 다양한 패러다임을 지원합니다. PHP는 웹 개발에 적합하며 Python은 데이터 분석 및 기계 학습과 같은 다양한 응용 프로그램에 적합합니다.

PHP와 Python : 그들의 역사에 깊은 다이빙PHP와 Python : 그들의 역사에 깊은 다이빙Apr 18, 2025 am 12:25 AM

PHP는 1994 년에 시작되었으며 Rasmuslerdorf에 의해 개발되었습니다. 원래 웹 사이트 방문자를 추적하는 데 사용되었으며 점차 서버 측 스크립팅 언어로 진화했으며 웹 개발에 널리 사용되었습니다. Python은 1980 년대 후반 Guidovan Rossum에 의해 개발되었으며 1991 년에 처음 출시되었습니다. 코드 가독성과 단순성을 강조하며 과학 컴퓨팅, 데이터 분석 및 기타 분야에 적합합니다.

PHP와 Python 중에서 선택 : 가이드PHP와 Python 중에서 선택 : 가이드Apr 18, 2025 am 12:24 AM

PHP는 웹 개발 및 빠른 프로토 타이핑에 적합하며 Python은 데이터 과학 및 기계 학습에 적합합니다. 1.PHP는 간단한 구문과 함께 동적 웹 개발에 사용되며 빠른 개발에 적합합니다. 2. Python은 간결한 구문을 가지고 있으며 여러 분야에 적합하며 강력한 라이브러리 생태계가 있습니다.

PHP 및 프레임 워크 : 언어 현대화PHP 및 프레임 워크 : 언어 현대화Apr 18, 2025 am 12:14 AM

PHP는 현대화 프로세스에서 많은 웹 사이트 및 응용 프로그램을 지원하고 프레임 워크를 통해 개발 요구에 적응하기 때문에 여전히 중요합니다. 1.PHP7은 성능을 향상시키고 새로운 기능을 소개합니다. 2. Laravel, Symfony 및 Codeigniter와 같은 현대 프레임 워크는 개발을 단순화하고 코드 품질을 향상시킵니다. 3. 성능 최적화 및 모범 사례는 응용 프로그램 효율성을 더욱 향상시킵니다.

PHP의 영향 : 웹 개발 및 그 이상PHP의 영향 : 웹 개발 및 그 이상Apr 18, 2025 am 12:10 AM

phphassignificallyimpactedwebdevelopmentandextendsbeyondit

스칼라 유형, 반환 유형, 노조 유형 및 무효 유형을 포함한 PHP 유형의 힌트 작업은 어떻게 작동합니까?스칼라 유형, 반환 유형, 노조 유형 및 무효 유형을 포함한 PHP 유형의 힌트 작업은 어떻게 작동합니까?Apr 17, 2025 am 12:25 AM

PHP 유형은 코드 품질과 가독성을 향상시키기위한 프롬프트입니다. 1) 스칼라 유형 팁 : PHP7.0이므로 int, float 등과 같은 기능 매개 변수에 기본 데이터 유형을 지정할 수 있습니다. 2) 반환 유형 프롬프트 : 기능 반환 값 유형의 일관성을 확인하십시오. 3) Union 유형 프롬프트 : PHP8.0이므로 기능 매개 변수 또는 반환 값에 여러 유형을 지정할 수 있습니다. 4) Nullable 유형 프롬프트 : NULL 값을 포함하고 널 값을 반환 할 수있는 기능을 포함 할 수 있습니다.

PHP는 객체 클로닝 (클론 키워드) 및 __clone 마법 방법을 어떻게 처리합니까?PHP는 객체 클로닝 (클론 키워드) 및 __clone 마법 방법을 어떻게 처리합니까?Apr 17, 2025 am 12:24 AM

PHP에서는 클론 키워드를 사용하여 객체 사본을 만들고 \ _ \ _ Clone Magic 메소드를 통해 클로닝 동작을 사용자 정의하십시오. 1. 복제 키워드를 사용하여 얕은 사본을 만들어 객체의 속성을 복제하지만 객체의 속성은 아닙니다. 2. \ _ \ _ 클론 방법은 얕은 복사 문제를 피하기 위해 중첩 된 물체를 깊이 복사 할 수 있습니다. 3. 복제의 순환 참조 및 성능 문제를 피하고 클로닝 작업을 최적화하여 효율성을 향상시키기 위해주의를 기울이십시오.

PHP vs. Python : 사용 사례 및 응용 프로그램PHP vs. Python : 사용 사례 및 응용 프로그램Apr 17, 2025 am 12:23 AM

PHP는 웹 개발 및 컨텐츠 관리 시스템에 적합하며 Python은 데이터 과학, 기계 학습 및 자동화 스크립트에 적합합니다. 1.PHP는 빠르고 확장 가능한 웹 사이트 및 응용 프로그램을 구축하는 데 잘 작동하며 WordPress와 같은 CMS에서 일반적으로 사용됩니다. 2. Python은 Numpy 및 Tensorflow와 같은 풍부한 라이브러리를 통해 데이터 과학 및 기계 학습 분야에서 뛰어난 공연을했습니다.

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

SecList

SecList

SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

Atom Editor Mac 버전 다운로드

Atom Editor Mac 버전 다운로드

가장 인기 있는 오픈 소스 편집기

MinGW - Windows용 미니멀리스트 GNU

MinGW - Windows용 미니멀리스트 GNU

이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.