URL 입력부터 페이지 콘텐츠의 최종 브라우저 렌더링까지 프로세스 분석
준비
브라우저에 URL(예: www.coder.com)을 입력하고 Enter 키를 누르면 브라우저가 가장 먼저 해야 할 일은 coder.com의 IP 주소를 얻는 것입니다. UDP 패킷을 DNS 서버로 전송하면 DNS 서버는 coder.com의 IP를 반환합니다. 이때 브라우저는 일반적으로 다음 액세스가 더 빨라지도록 IP 주소를 캐시합니다.
예를 들어 Chrome에서는 chrome://net-internals/#dns를 통해 볼 수 있습니다.
서버의 IP로 브라우저는 HTTP 요청을 시작할 수 있지만 HTTP 요청/응답은 TCP의 "가상 연결"에서 보내고 받아야 합니다.
"가상" TCP 연결을 설정하려면 TCP Postman은 4가지 정보(로컬 IP, 로컬 포트, 서버 IP, 서버 포트)를 알아야 합니다. 이제 로컬 IP, 서버 IP 및 두 개의 포트만 알고 있습니다. 하다?
로컬 포트는 매우 간단합니다. 서버 포트는 훨씬 더 간단합니다. HTTP 서비스는 80입니다. 우리는 TCP Postman에 직접 알립니다. .
3방향 핸드셰이크 후에 클라이언트와 서버 사이에 TCP 연결이 설정됩니다! 마지막으로 HTTP 요청을 보낼 수 있습니다.
TCP 연결을 점선으로 그린 이유는 이 연결이 가상이기 때문입니다
웹 서버
HTTP GET 요청은 수천 개의 산과 강을 거쳐 여러 라우터에 의해 전달되고 마침내 (HTTP 데이터 패킷은 하위 계층에 의해 조각화되어 전송될 수 있으며 이는 생략됩니다.)
웹 서버는 처리를 시작해야 합니다. 이를 처리하는 방법에는 세 가지가 있습니다.
(1) 하나의 스레드를 사용하여 모든 요청을 처리할 수 있으며 동시에 하나만 처리할 수 있습니다. 구현하지만 심각한 성능 문제가 발생합니다.
(2) 각 요청마다 프로세스/스레드를 할당할 수 있지만 연결이 너무 많으면 서버 측 프로세스/스레드가 많은 메모리 리소스를 소비하고 프로세스/스레드 전환도 부담이 됩니다. CPU.
(3) I/O를 재사용하기 위해 많은 웹 서버는 재사용 구조를 채택합니다. 예를 들어 모든 연결은 연결 상태가 변경되면(데이터를 읽을 수 있는 경우) 프로세스/스레드가 하나만 처리합니다. 해당 연결을 처리한 후 계속 모니터링하면서 다음 상태 변경을 기다립니다. 이런 방식으로 수천 개의 연결 요청을 소수의 프로세스/스레드로 처리할 수 있습니다.
아래 이야기를 계속하기 위해 매우 인기 있는 웹 서버인 Nginx를 사용합니다.
HTTP GET 요청의 경우 Nginx는 epoll을 사용하여 이를 읽습니다. 다음으로 Nginx는 이것이 정적 요청인지 동적 요청인지 확인해야 합니다.
정적 요청(HTML 파일, JavaScript 파일, CSS 파일, 그림 등)인 경우 직접 처리할 수도 있습니다(물론 Nginx 구성에 따라 다르며 다른 캐시 서버로 전달될 수 있음). 로컬 하드 디스크를 읽으면 관련 파일이 직접 반환됩니다.
반환되기 전에 백엔드 서버(예: Tomcat)에서 처리해야 하는 동적 요청인 경우 백엔드에 Tomcat이 두 개 이상 있으면 Tomcat으로 전달해야 합니다. 특정 전략에 따라 선택해야 합니다.
예를 들어 Ngnix에서는 다음과 같은 유형을 지원합니다.
Polling: 백엔드 서버에 하나씩 순서대로 전달
Weight: 각 백엔드 서버에 가중치를 할당합니다. 이는 백엔드 서버로 전달될 확률과 동일합니다. .
ip_hash: IP를 기반으로 해시 작업을 수행한 다음 이를 전달할 서버를 찾습니다. 이렇게 하면 항상 동일한 클라이언트 IP가 동일한 백엔드 서버로 전달됩니다.
fair: 백엔드 서버의 응답 시간을 기준으로 요청을 할당하고 응답 시간의 우선순위를 지정합니다.
어떤 알고리즘을 사용하든 결국 백엔드 서버가 선택되고 Nginx는 HTTP 요청을 백엔드 Tomcat에 전달하고 Tomcat의 HttpResponse 출력을 브라우저에 전달해야 합니다.
이 시나리오에서는 Nginx가 에이전트 역할을 하는 것을 볼 수 있습니다.
Application Server
Http 요청이 마침내 Tomcat에 왔습니다. Tomcat은 Servlet/JSP를 처리할 수 있는 Java로 작성된 컨테이너입니다.
웹 서버와 마찬가지로 Tomcat은 처리할 각 요청에 대해 일반적으로 BIO 모드(Blocking I/O 모드)로 알려진 스레드를 할당할 수도 있습니다.
I/O 다중화 기술을 사용하고 몇 개의 스레드만 사용하여 모든 요청을 처리하는 것, 즉 NIO 모드도 가능합니다.
어떤 방법을 사용하든 Http 요청은 처리를 위해 서블릿으로 전달됩니다. 이 서블릿은 Http 요청을 프레임워크에서 사용하는 매개변수 형식으로 변환한 다음 이를 컨트롤러에 배포합니다(사용하는 경우). Spring) 또는 Action(Struts를 사용하는 경우).
나머지 이야기는 상대적으로 간단합니다(아니, 코더 입장에서는 실제로 가장 복잡한 부분입니다). 이 과정에서 코더가 자주 작성하는 추가, 삭제, 수정 및 검색 로직을 실행하는 것이 매우 어렵습니다. 캐시, 데이터베이스 등과 상호 작용할 가능성이 높습니다. 백엔드 구성 요소는 서로 처리하고 궁극적으로 HTTP 응답을 반환하므로 세부 사항은 비즈니스 논리에 따라 다르므로 생략됩니다.
우리의 예에 따르면 이 HTTP 응답은 HTML 페이지여야 합니다.
Homecoming
Tomcat이 Ngnix에 기쁜 마음으로 Http Response를 보냈습니다.
Ngnix는 또한 브라우저에 Http Response를 보내는 것을 기쁘게 생각합니다.
전송 후 TCP 연결을 닫을 수 있나요?
HTTP1.1을 사용하는 경우 이 연결은 기본적으로 연결 유지이므로 닫을 수 없습니다.
HTTP1.0을 사용하는 경우 연결 유지가 있는지 확인해야 합니다. 이전 HTTP 요청 헤더인 경우 닫을 수 없습니다.
브라우저가 다시 작동합니다
브라우저가 Http 응답을 수신하여 HTML 페이지를 읽고 페이지 표시 준비를 시작했습니다.
그러나 이 HTML 페이지는 js 파일, CSS 파일, 이미지 등과 같은 많은 다른 리소스를 참조할 수 있습니다. 이러한 리소스는 서버 측에도 있으며 static.coder와 같은 다른 도메인 이름 아래에 있을 수 있습니다. .com.
브라우저는 하나씩 다운로드할 수밖에 없습니다. DNS를 사용하여 IP를 얻는 것부터 시작하여 이전에 수행했던 작업을 다시 수행해야 합니다. 차이점은 더 이상 Tomcat과 같은 애플리케이션 서버의 개입이 없다는 것입니다.
다운로드해야 할 외부 리소스가 너무 많으면 브라우저는 여러 개의 TCP 연결을 생성하여 병렬로 다운로드합니다.
그러나 동시에 동일한 도메인 이름에 대한 요청 수는 너무 많아서는 안 됩니다. 그렇지 않으면 서버 트래픽이 너무 많아 견딜 수 없게 됩니다. 따라서 브라우저는 자체적으로 제한해야 합니다. 예를 들어 Chrome은 Http1.1에서 6개의 리소스만 병렬로 다운로드할 수 있습니다.
서버가 JS 및 CSS 파일을 브라우저에 보낼 때 이러한 파일이 만료되는 시기를 브라우저에 알려줍니다(Cache-Control 또는 Expire 사용). 브라우저는 파일을 로컬로 캐시하고 두 번째 요청을 기다릴 수 있습니다. 동일한 파일의 경우 만료되지 않은 경우 로컬 영역에서 검색하면 됩니다.
만료되면 브라우저는 파일이 수정되었는지 서버에 물어볼 수 있나요? (마지막 서버에서 보낸 Last-Modified 및 ETag를 기준으로) 수정되지 않은 경우(304 Not Modified) 캐싱을 사용할 수도 있습니다. 그렇지 않으면 서버는 최신 파일을 브라우저로 다시 보냅니다.
물론 Ctrl+F5를 누르면 캐시를 완전히 무시하고 강제로 GET 요청이 발생합니다.
참고: Chrome에서는 chrome://view-http-cache/ 명령을 통해 캐시를 볼 수 있습니다.
이제 브라우저는 세 가지 중요한 사항을 얻습니다.
1.HTML, 브라우저는 이를 DOM 트리로 변환합니다.
2. 브라우저는 이를 CSS 규칙 트리로 변환합니다.
3. 수정될 수 있습니다
브라우저는 DOM 트리와 CSS 규칙 트리를 통해 소위 "렌더 트리"를 생성하고 각 요소, 레이아웃의 위치/크기를 계산한 다음 그리기를 위해 운영 체제의 API를 호출합니다. 매우 복잡한 과정은 생략되어 표시되지 않습니다.
지금까지 브라우저에서 마침내 www.coder.com의 콘텐츠를 볼 수 있었습니다.
위 내용은 URL 입력부터 페이지 콘텐츠의 최종 브라우저 렌더링까지 프로세스 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

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

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

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

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

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

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

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











이 기사는 중국의 Ouyi Okx 앱의 안전한 다운로드에 대한 자세한 안내서를 제공합니다. 국내 앱 스토어의 제한으로 인해 사용자는 OUYI OKX의 공식 웹 사이트를 통해 앱을 다운로드하거나 공식 웹 사이트에서 제공 한 QR 코드를 사용하여 스캔 및 다운로드하는 것이 좋습니다. 다운로드 프로세스 중에 공식 웹 사이트 주소를 확인하고 응용 프로그램 권한을 확인하고 설치 후 보안 스캔을 수행하며 2 요인 확인을 활성화하십시오. 사용하는 동안 현지 법률 및 규정을 따르고, 안전한 네트워크 환경을 사용하고, 계정 보안을 보호하고, 사기에 대해 경계하고, 합리적으로 투자하십시오. 이 기사는 참조 용이며 투자 조언은 자신의 위험에 처해 있습니다.

세계 최고의 디지털 자산 거래 플랫폼 인 Ouyi Okx는 풍부한 거래 제품, 강력한 보안 보증 및 편리한 사용자 경험으로 많은 투자자를 유치합니다. 그러나 네트워크 보안의 위험이 점점 심해지고 있으며 공식 OUYI OKX 계정을 안전하게 등록하는 방법이 중요합니다. 이 기사는 OUYI OKX 공식 웹 사이트의 최신 등록 포털을 제공하고 공식 웹 사이트를 식별하고 강력한 암호를 설정하고 2 인용 암호 검증을 활성화하는 방법을 포함하여 안전한 등록 단계와 예방 조치를 자세히 설명하여 디지털 자산 투자 여행을 안전하고 편리하게 시작하는 데 도움이됩니다. 디지털 자산 투자에는 위험이 있습니다. 신중한 결정을 내리십시오.

Coinbase 보안 로그인 안내서 : 피싱 사이트 및 사기를 피하는 방법은 무엇입니까? 피싱과 사기는 점점 더 만연해지고 있으며 Coinbase 공식 로그인 포털에 안전하게 액세스하는 것이 중요합니다. 이 기사는 사용자가 코인베이스의 최신 공식 로그인 포털을 안전하게 찾아 사용하여 디지털 자산의 보안을 보호 할 수 있도록 실용적인 가이드를 제공합니다. 우리는 피싱 사이트를 식별하는 방법과 공식 웹 사이트, 모바일 앱 또는 신뢰할 수있는 타사 플랫폼을 통해 안전하게 로그인하는 방법을 다루고 강력한 비밀번호 사용 및 2 요인 검증 가능성과 같은 계정 보안을 향상시키기위한 제안을 제공합니다. 잘못된 로그인으로 인한 자산 손실을 피하려면이 기사를주의 깊게 읽으십시오!

이 기사는 안전하고 신뢰할 수있는 Binance Exchange 앱 다운로드 가이드를 제공하여 사용자가 국가에서 Binance 앱 다운로드 문제를 해결할 수 있도록 도와줍니다. 국내 애플리케이션 상점에 대한 제한으로 인해이 기사는 Binance 공식 웹 사이트에서 APK 설치 패키지를 다운로드하는 데 우선 순위를두고 있으며 공식 웹 사이트 다운로드, 제 3 자 애플리케이션 상점 다운로드 및 동시에 공식 웹 사이트 주소를 확인하는 동안 보안 예방 조치를 강조합니다. 또한이 기사는 사용자에게 현지 법률 및 규정을 이해하고, 네트워크 보안에주의를 기울이고, 개인 정보 보호, 사기, 합리적 투자를 조심하고, 보안 거래를 조심해야한다고 상기시킵니다. 기사가 끝나면 기사는 Binance 앱 다운로드 및 사용이 현지 법률 및 규정을 준수해야하며 자신의 위험에 따라 투자 조언을 구성하지 않는다는 점을 다시 한 번 강조했습니다.

이 기사는 사용자가 Bitmex Exchange의 최신 공식 웹 사이트에 액세스하고 거래 보안을 개선 할 수 있도록 안전하고 신뢰할 수있는 가이드를 제공합니다. 규제 및 사이버 보안 위협으로 인해 공식 Bitmex 웹 사이트를 식별하고 피싱 웹 사이트가 계정 정보 및 자금을 훔치는 것을 피하는 것이 중요합니다. 이 기사는 신뢰할 수있는 cryptocurrency 플랫폼, 공식 소셜 미디어, 뉴스 미디어 및 공식 이메일을 통해 공식 웹 사이트 포털 검색을 소개합니다. HTTPS 연결, 보안 증명서 확인 및 정기적으로 비밀번호 변경을 사용하여 도메인 이름을 확인하는 것의 중요성을 강조합니다. cryptocurrency 거래는 위험이 높습니다.주의해서 투자하십시오.

Coinbase Exchange 웹 버전은 편의로 인기가 있지만 안전한 액세스가 중요합니다. 이 기사는 사용자가 공식 코인베이스 웹 버전에 안전하게 로그인하고 피싱 웹 사이트 및 해커를 피하도록 안내합니다. 우리는 검색 엔진, 신뢰할 수있는 타사 플랫폼 및 공식 소셜 미디어를 통해 공식 포털을 검증하는 방법을 자세히 설명하고 주소 변호사 보안 잠금 확인, 2 요인 확인, 공개 Wi-Fi를 피하고, 정기적으로 암호 변경 및 디지털 자산의 보안을 보장하기 위해 전자 메일을 피하는 것과 같은 보안 조치를 강조합니다. 공식 코인베이스 웹 사이트에 대한 올바른 액세스는 디지털 통화를 보호하는 첫 번째 단계는 디지털 통화 거래를 안전하게 시작하는 데 도움이됩니다.

베테랑 cryptocurrency 파생 상품 거래 플랫폼으로서 공식 웹 사이트 입학의 정확성이 중요합니다. Phishing 웹 사이트로 인해 가짜 웹 사이트로의 오해 입력은 도난과 자금 손실로 이어질 수 있습니다. 이 기사는 사용자가 Bitmex 공식 웹 사이트에 안전하게 액세스하고 신뢰할 수있는 cryptocurrency 정보 플랫폼 (예 : CoinmarketCap, Coingecko), 공식 소셜 미디어, 기존 주소 검증 및 공식 지원 채널의 검증, 2 인용 검증, 정기적 인 암호 변경 및 보안 소프트웨어의 사용을 강조하여 사용자에게 영향을 미치고 보안을 피할 수 있도록 강조합니다.

Node.js 환경에서 403을 반환하는 타사 인터페이스의 문제를 해결하십시오. Node.js를 사용하여 타사 인터페이스를 호출 할 때 때때로 403을 반환하는 인터페이스에서 403의 오류가 발생합니다 ...
