브라우저가 중개자 (프록시)와 대화하지 않으면 해당 HTTP 요청은 실제로 유효하지 않습니다.
브라우저가 웹 서버와 직접 통신하는 경우 예제는 다음과 비슷합니다.
GET /hello.htm HTTP/1.1
Host: www.pippo.it
이제 이것을 관점에서 살펴 보려면 OSI 모델을 고려하십시오.
우리는 3 가지 시스템을 운영하고 있습니다 :
- 브라우저를 실행 하는 클라이언트
- 사이트를 제공 하는 웹 서버
- DNS 서버 사이트의 IP 주소를 알고
관련된 프로토콜은 아래에서 위로입니다 (최소 관련 세트는 OP로 설정).
HTTP 통신은 TCP 프로토콜을 통해 이루어지며 (TCP는 IP 프로토콜 위에 있음) DNS 통신은 UDP 프로토콜을 통해 이루어집니다 (UDP는 IP 프로토콜 위에 있음).
짧은 통신 순서는 다음과 같습니다.
클라이언트는 브라우저가 실행되는 요청 DNS 서버를 에 대한 A
녹음 www.pippo.it
UDP 프로토콜을 사용하여.
1.1. 클라이언트에서는 해결 부분을 수행하고 브라우저와 다시 대화하는 운영 체제입니다. 브라우저는 gethostbyname () 또는 최신 getaddrinfo () 를 호출하여 OS를 통해 DNS 서버와 직접 대화하지 않습니다 . Windows의 경우, OS는 주소를 해결하는 순서 가능성이 뭔가에 의해 정의되는 이 리눅스에서 해결 우선 순위에 의해 정의되는 동안,/etc/nsswitch.conf
DNS 서버 받는 사람, 응답을 UDP 프로토콜을 사용하여, 클라이언트 가 존재하는 경우, 녹음 / IP 주소로
클라이언트 의 포트 80에 TCP 연결을 열고 웹 서버를 다음과 같은 텍스트를 작성합니다 :
HTTP 요청 :
GET /hello.htm HTTP/1.1
Host: www.pippo.it
콘솔이나 명령 프롬프트에서 이와 같은 작업을 수행하여 동일한 작업을 수행 할 수 있습니다.
> telnet www.pippo.it 80
Trying 195.128.235.49...
Connected to www.pippo.it.
Escape character is '^]'.
GET /hello.htm HTTP/1.1
Host: www.pippo.it
빈 줄 두 개가옵니다. 요청 된 컨텐츠가 존재하면 웹 서버가 컨텐츠를 화면에 인쇄합니다. 다른쪽에 브라우저가 있으면 응답 텍스트가 브라우저에 의해 구문 분석되고 모든 태그, 링크, 스크립트 및 이미지는 웹 페이지라고하는 것으로 렌더링됩니다.
실제로 일부 도메인을 이미 방문한 경우 브라우저가 IP 주소를 캐시 할 수 있으므로 DNS 확인이 불필요 해집니다. 또한 최신 브라우저는 탐색 속도를 높이기 위해 실제로 필요하기 전에 ( DNS 프리 페치 ) 해결을 시도 할 수 있습니다 .
또한 컴퓨터에 hosts
파일에 정적 레코드가있을 수 있습니다 . 레코드가 요청과 일치하면 로컬 정적 항목이 먼저 사용되고 DNS 서버에 연결되지 않습니다. 이것은 구성 가능하며 반드시 사실 일 필요는 없지만 내가 알고있는 운영 체제의 기본값입니다.