[네트워크] 1. 웹 브라우저가 HTTP 리퀘스트 메시지를 만든다

오잉·2023년 7월 30일
0

NETWORK

목록 보기
1/2

1. 브라우저는 먼저 URL을 해독한다

브라우저를 통해 어떠한 요청을 보내는 과정을 생각해보자.
우리는 우선 브라우저의 주소창에 URL을 입력한다.

브라우저의 기능

브라우저는 다양한 기능을 가지고 있다.

  • 웹 서버에 엑세스하는 클라이언트
  • 파일을 다운로드/업로드하는 FTP의 클라이언트
  • 메일의 클라이언트 등

이렇게 브라우저는 다양한 클라이언트 기능을 가진 복합적인 클라이언트 소프트웨어이다.

그렇기 때문에 이 다양한 기능중에 어떤 것을 사용하여 데이터에 엑세스할 것인지를 판단해야 한다.

그래서 모든 URL은 맨 앞에 있는 문자열(http:, ftp:, file: 등)으로 엑세스하는 방법(프로토콜)을 나타낸다. 엑세스 대상이 웹 서버라면 HTTP 프로토콜을 사용하고, FTP 서버라면 FTP라는 프로토콜을 사용하는 식이다.

URL의 요소

브라우저가 가장 먼저 하는 일은 웹 서버에 보내는 request 메시지를 작성하기 위해 사용자가 입력한 URL을 해독하는 것이다.

  • Protocol : URL의 맨 앞에는 데이터 출처에 엑세스하는 방법
  • Domain : 웹 서버명
  • Path : 데이터 출처(파일)의 경로
  • Parameter :
  • Fragment :

http://oing.co.kr/hello/file.html
이 URL을 브라우저에 입력한다고 생각해보자.
이 URl을 분해해보면

  • http라는 프로토콜을 사용하여
  • oing.co.kr이라는 웹 서버에 위치한
  • hello/file.html 파일에 접근한다

고 해독할 수 있다.

2. 브라우저는 HTTP Request 메시지를 만든다

여기서 http 프로토콜에 대해 잠깐 알아보자.

HTTP 프로토콜

http 프로토콜을 단순하게 표현하자면 위 그림과 같다.

1) 먼저 client에서 server를 향해 request 메시지를 보낸다.

request 메시지 안에는 무엇을, 어떻게 해서 하겠다는 내용이 쓰여있다.

여기서 무엇을에 해당하는 것을 보통 URI라고 하는데, 보통 페이지 데이터를 저장한 파일의 이름이나 CGI 프로그램의 파일명을 쓴다.
ex. http://oing.co.kr/hello/file.html의 경우에는 hello/file.html

URI에는 다양한 엑세스 대상이 올 수 있으며, 이러한 엑세스 대상을 통칭하는 말이 URI이다.

여기서 어떻게 해서에 해당하는 것이 메소드이다. 이 메소드를 통해 브라우저는 웹 서버에게 어떤 동작을 하고 싶은지를 전달한다.
ex. URI로 나타낸 데이터를 읽고 싶다, 클라이언트에서 입력한 데이터를 URI로 나타낸 프로그램에 전달하고 싶다 등

그 외에도 보충 정보를 나타내는 헤더도 포함된다.

2) request 메시지가 server에 도착하면 server는 그 내용을 해독한다.

URI와 메시지를 조사하여 무엇을, 어떻게 하는지 판단한 후 요구에 따라 동작한다.
그리고 결과 데이터를 response 메시지에 저장한다.

3) server는 client에 response 메시지를 보낸다.

response 메시지의 맨 앞부분에는 status code가 존재한다.
이 status code에는 실행 결과가 정상 종료되었는지 또는 문제가 발생했는지 등이 담긴다.

그 다음 보충 정보가 담긴 헤더와 client가 요청한 데이터가 이어진다.

4) client는 response 메시지를 받는다

client는 response 메시지 안에서 데이터를 추출하여 화면에 표시하면서 HTTP의 동작은 끝이 난다.

HTTP Request 메시지를 만든다

다시 원래 하던 이야기로 돌아오자.

브라우저가 URL을 해독하여 웹 서버와 엑세스 할 파일명을 알아내면
브라우저는 이것을 바탕으로 HTTP Request 메시지를 만든다.
HTTP Request 메시지는 포맷이 정해져 있기 때문에, 브라우저는 이 포맷에 맞게 Request 메시지를 만든다.

HTTP Request Message 구조


맨 첫번째 행에는 Request Line을 쓴다. 이 한 행으로 Request의 내용을 대략 알 수 있다.

  • Method : 웹 서버에 어떻게 할 것인지를 전달 (어떻게 하는지)
  • URI : 대상이 되는 파일이나 프로그램의 경로명 (무엇을)
  • HTTP 버전

두번째 행부터는 Request Headers를 쓴다. 첫번째 행에서 Request의 내용을 대략 알 수 있지만, 부가적인 자세한 정보가 필요할 때 Header로 적는다.

공백 행 이후에는 Request Message Body를 쓴다. 이것이 바로 메시지의 실제 내용이다.

Request 메시지를 보내면 Response가 온다.

Http Request Message를 보내면, 웹 서버로부터 Http Response Message가 온다.

HTTP Response Message 구조

맨 첫번째 행에는 Status Line이 있다. 이 행에는 Status Code, 응답 문구를 통해 Request의 실행 결과 (요청이 정상적으로 실행되었는지, 아니면 오류가 발생했는지 등)를 알 수 있다.

  • Status Code : 숫자. 주로 프로그램에 실행결과를 알려주는 것이 목적
  • 응답 문구 : 문장. 사람에게 실행 결과를 알리는 것이 목적

두번째 행부터는 Response Headers가 온다. Request Headers와 마찬가지로 부가 정보가 담긴다.

공백 행 이후에는 Response Message Body가 온다. Request Message Body와 마찬가지로 실제 본문이 담긴다.

응답에 영상 등이 포함되어 있을 경우에는

만약 응답 메시지에 담긴 페이지가 문장으로만 되어있으면 한차례의 요청과 응답으로 끝나지만, 이미지 등이 포함되어 있을 경우에는 추가 요청&응답이 필요하다.
문장 파일을 읽을 때와 마찬가지로 URI에 이미지 파일의 경로를 쓴 Request 메시지를 다시 만들어 보내야 한다.

Request 메시지에 쓰는 URI는 한개만으로 결정되어 있으므로 파일을 한번에 한개씩만 읽을 수 있기 때문에 파일을 따로따로 요청해야한다.

즉, 페이지에 3개의 이미지가 포함되어 있다면
문장 파일 Request 1회 + 이미지 파일 Request 3회 = 총 4회의 요청이 필요하다.


이 글은 성공과 실패를 결정하는 1%의 네트워크를 읽고 정리한 글입니다.

이미지 출처
URL
HTTP Request
HTTP Message

profile
오잉이라네 오잉이라네 오잉이라네 ~

1개의 댓글

comment-user-thumbnail
2023년 7월 30일

많은 도움이 되었습니다, 감사합니다.

답글 달기