1장 웹 브라우저
1. HTTP 리퀘스트 메시지
- URL(Uniform Resource Locator)
웹 브라우저의 시작은 URL이다.
URL은 맨 앞 부분에 액세스 하는 방법을 나타낸다. http:, ftp:, file: 등 다양한 액세스 방법이 존재하고 액세스 대상이 서버일 경우 해당 서버에 맞는 프로토콜 종류라고 볼 수도 있다.
URL 예시
1
http://user:password@www.youngseo.com:80/CYS/index.php
- 브라우저의 URL 해독
위의 URL 예시를 통해 요소별로 설명하겠다.
’ http: ‘ -> 액세스 방법(프로토콜)
’ // ‘ -> 이어지는 문자열이 서버의 이름임을 설명
’ user ‘ -> 사용자명(생략 가능)
’ password ‘ -> 패스워드(생략 가능)
‘ www.youngseo.com ’ -> 웹 서버명
’ :80 ‘ -> 포트번호
’ /CYS/ ‘ -> 디렉토리명
’ index.php ‘ -> 파일명
- URL 생략
예시 1
1
http://user:password@www.youngseo.com:80/CYS/
예시 1처럼 파일명을 생략하고 적을 수도 있다.
하지만 이 경우 어느 파일에 액세스해야 할지 모른다.
따라서 파일명을 생략할 때를 대비하여 파일명을 미리 서버측에 설정해둔다.
index.php를 설정해놓았을 경우 /CYS/index.php를 액세스한다.
예시 2
1
http://user:password@www.youngseo.com:80/
예시 2의 경우에는 /index.php를 액세스한다.
예시 3
1
http://user:password@www.youngseo.com:80
예시 3의 경우에는 예시 2와 마찬가지로 루트 디렉토리 아래의 파일인 /index.php를 액세스한다.
예시 4
1
http://user:password@www.youngseo.com:80/CYS
예시 4의 경우 해당 루트에 ‘CYS’라는 파일이 있으면 파일명으로, 디렉토리가 있으면 디렉토리로 본다.
* 같은 이름을 가진 파일과 디렉토리를 둘 다 만들 수 없기에 가능
nginx 예시
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
index index.php;
server_name _;
location /CYS {
root /var/www/html
index index.php
try_files $uri $uri/ =404;
}
}
- HTTP 리퀘스트 메시지
URL을 해독하여 어디에 액세스해야 하는지 알게 되었다.
그 다음 순서는 HTTP 프로토콜을 사용하여 웹 서버에 액세스하는 것이다.
HTTP 프로토콜: 리퀘스트 메시지 & 리스폰스 메시지
리퀘스트 메시지: 메소드(어떻게) + URI(무엇을)
리스폰스 메시지: 스테이터스 코드(200, 400 등)
GET 메소드: URI의 정보 수신
POST 메소드: 폼을 이용하여 데이터 송신
- 리퀘스트 메시지 생성
리퀘스트 메시지
리퀘스트 라인: 메소드 + URI + HTTP 버전
메시지 헤더: 메시지에 대한 부가 설명
메시지 본문: GET의 경우 없음, POST의 경우 폼에 입력한 데이터
리스폰스 메시지
스테이터스 라인: 리퀘스트 실행 결과에 대한 상태 코드
메시지 헤더
메시지 본문
리퀘스트 메시지에는 하나의 URI만 사용할 수 있다.
즉 파일을 한 번에 한 개씩만 읽을 수 있기에 한 문장에 3개의 영상이 포함되어 있다면 문장 1 + 영상 3, 총 4회의 리퀘스트 메시지를 보내야 한다.
2. IP
- IP 기본 지식
서브넷: 하나의 작은 네트워크
IP: 네트워크 번호(동) + 호스트 번호(번지)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
예시 1
11.12.13.14
예시 2
11.12.13.14/255.255.255.0
예시 3
11.12.13.14/24
예시 4
11.12.13.0/24
예시 5
11.12.13.255/24
예시 1은 일반적인 IP
예시 2는 IP 형식의 넷마스크 포함
예시 3은 비트수 형식의 넷마스크 포함
예시 4는 서브넷 주소
예시 5는 브로드캐스트 주소
- 도메인과 IP 주소 구분하는 이유
IP: 기억하기 어려움 but 체계적인 주소
도메인: 기억하기 쉬움 but 주소로 사용하기에는 효율 X
DNS: IP로 도메인을 알아내고, 도메인으로 IP를 알아내자!
- Socket 라이브러리로 IP 주소 확인
DNS 클라이언트: 리졸버
리졸버: DNS의 원리를 사용하여 IP 주소를 조사하는 행위인 ‘네임 리졸루션’을 실행하는 것
이러한 리졸버는 Socket 라이브러리의 함수이다.
- 리졸버 이용
1
<메모리 영역> = gethostbyname("www.youngseo.com");
- 리졸버 내부 작동 방식
리졸버를 호출하면 리졸버로 제어가 넘어간다.
리졸버가 “www.youngseo.com”이라는 서버의 IP 주소를 알려달라고 DNS 서버에 보낸다.
이 때 송신 동작은 OS 내부의 프로토콜 스택이라는 네트워크 제어용 소프트웨어를 호출하여 수행한다.
DNS의 IP 주소는 어떻게 알아요? -> 이미 설정 되어 있다.
3. DNS
- DNS 서버
조회 메시지를 받아서 정보를 리스폰스 한다.
조회 메시지: 이름 + 클래스 + 타입
이름: 서버
클래스: 현재는 인터넷 밖에 없기에 ‘IN’
타입: A, MX,