Post

1장 웹 브라우저

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 메소드: 폼을 이용하여 데이터 송신

- 리퀘스트 메시지 생성

리퀘스트 메시지

  1. 리퀘스트 라인: 메소드 + URI + HTTP 버전

  2. 메시지 헤더: 메시지에 대한 부가 설명

  3. 메시지 본문: GET의 경우 없음, POST의 경우 폼에 입력한 데이터

리스폰스 메시지

  1. 스테이터스 라인: 리퀘스트 실행 결과에 대한 상태 코드

  2. 메시지 헤더

  3. 메시지 본문

리퀘스트 메시지에는 하나의 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,

This post is licensed under CC BY 4.0 by the author.