브라우저에서 URL을 입력하면 어떻게됩니까?


293

누군가 브라우저에서 URL을 입력 한 시점부터 브라우저에서 페이지를 볼 때까지의 모든 일이 뒤에서 어떻게되는지 말해 줄 수 있습니까? 프로세스에 대한 자세한 설명은 큰 도움이 될 것입니다.


2
비록 이것이 프로그래밍과 관련이있을 수도 있지만 (결국) 이것에 대한 답은 볼륨을 채울 것입니다. 프로그래밍 쿼리로 다시 작성하십시오.
KevinDTimm

28
O'Reilly의 DNS 및 바인드 북을 받으십시오 . 624 페이지에 불과합니다.
Wim Hollebrandse

7
edusagar.com/articles/view/70/… 이것이 최고의 답변입니다!
Shivendra

1
후손을 위해 인터넷이 작동하는 방법에 대한 자세한 버전은 goo.gl/eEHmpZ 입니다.
Ashwin Krishnamurthy

4
가능한 한 많은 세부 사항 등이 대답하기 위해 공동 노력이 지금있다 : github.com/alex/what-happens-when/blob/master/README.rst
Piskvor 건물 왼쪽

답변:


587

주의 : 이는 가능한 가장 간단한 HTTP 요청 (HTTPS 없음, HTTP2 없음, 추가 없음), 가장 간단한 DNS, 프록시 없음, 단일 스택 IPv4, 하나의 HTTP 요청, 간단한 HTTP 서버를 가정 할 때 매우 거칠고 지나치게 단순화 된 스케치입니다. 다른 쪽 끝이며 어떤 단계에서도 문제가 없습니다. 이것은 대부분의 현대적인 의도와 목적을 위해 비현실적인 시나리오입니다. 이들 모두는 실제 사용에서 훨씬 더 복잡하며, 기술 스택은 작성된 이후로 훨씬 더 복잡해졌습니다. 이를 염두에두고 다음 타임 라인은 여전히 ​​유효합니다.

  1. 브라우저는 캐시를 검사합니다. 요청 된 객체가 캐시에 있고 최신 상태 인 경우 # 9로 건너 뜁니다.
  2. 브라우저가 OS에게 서버의 IP 주소를 묻습니다
  3. OS가 DNS 조회를하고 IP 주소를 브라우저에 응답
  4. 브라우저가 서버에 대한 TCP 연결을 엽니 다 (이 단계는 HTTPS로 훨씬 더 복잡합니다)
  5. 브라우저는 TCP 연결을 통해 HTTP 요청을 보냅니다.
  6. 브라우저가 HTTP 응답을 수신하고 TCP 연결을 닫거나 다른 요청에 재사용 할 수 있습니다.
  7. 브라우저는 응답이 리디렉션 또는 조건부 응답 (3xx 결과 상태 코드), 권한 부여 요청 (401), 오류 (4xx 및 5xx) 등인지 확인합니다. 이것들은 정상 응답과 다르게 처리됩니다 (2xx)
  8. 캐시 가능한 경우 응답이 캐시에 저장됩니다
  9. 브라우저가 응답을 디코딩합니다 (예 : 압축 된 경우)
  10. 브라우저가 응답으로 수행 할 작업을 결정합니다 (예 : HTML 페이지입니까, 이미지입니까, 사운드 클립입니까).
  11. 브라우저가 응답을 렌더링하거나 인식 할 수없는 유형에 대한 다운로드 대화 상자를 제공합니다

다시 말하지만, 이러한 각 요점에 대한 논의는 수많은 페이지를 채웠습니다. 명확성을 위해 요약 된 것으로 만 사용하십시오. 또한 이와 병행하여 발생하는 다른 많은 것들 (입력 된 주소 처리, 추론 적 프리 페칭, 페이지를 브라우저 기록에 추가, 사용자에게 진행 상황 표시, 플러그인 및 확장 프로그램 알림, 다운로드 중 페이지 렌더링, 파이프 라이닝, 연결 추적) 연결 유지, 쿠키 관리, 악성 콘텐츠 확인 등)-전체 작업은 HTTPS (인증서 및 암호 및 고정, 오 마이!)를 사용하면 훨씬 더 복잡해집니다.


4 단계에서 https 요청의 경우 어떻게됩니까? 조금 더 설명해 주시겠습니까?
Mohammad Raheem

2
그것은이 답변의 범위를 넘어서는 방법입니다. 그러나 위의 링크 된 GH 페이지를 확인합니까, 그것은 간단한 개요 제공 : github.com/alex/what-happens-when/blob/master/...을
Piskvor 건물 왼쪽

41

먼저 컴퓨터가 대상 호스트를 찾습니다. 로컬 DNS 캐시에 있으면 해당 정보를 사용합니다. 그렇지 않으면 IP 주소를 찾을 때까지 DNS 쿼리가 수행됩니다.

그런 다음 브라우저는 대상 호스트에 대한 TCP 연결을 열고 HTTP 1.1에 따라 요청을 보냅니다 (또는 HTTP 1.0을 사용할 수 있지만 일반 브라우저는 더 이상 수행하지 않습니다).

서버는 필요한 리소스를 찾고 (있는 경우) HTTP 프로토콜을 사용하여 응답하고 클라이언트 (= 브라우저)에게 데이터를 보냅니다.

그런 다음 브라우저는 HTML 파서를 사용하여 나중에 화면에 표시되는 문서 구조를 다시 만듭니다. 그림, css 파일, javascript 파일과 같은 외부 자원에 대한 참조를 찾으면 HTML 문서와 동일한 방식으로 전달됩니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.