브라우저를 통해 어떠한 요청을 보내는 과정을 생각해보자.
우리는 우선 브라우저의 주소창에 URL을 입력한다.
브라우저는 다양한 기능을 가지고 있다.
이렇게 브라우저는 다양한 클라이언트 기능을 가진 복합적인 클라이언트 소프트웨어이다.
그렇기 때문에 이 다양한 기능중에 어떤 것을 사용하여 데이터에 엑세스할 것인지를 판단해야 한다.
그래서 모든 URL은 맨 앞에 있는 문자열(http:
, ftp:
, file:
등)으로 엑세스하는 방법(프로토콜)을 나타낸다. 엑세스 대상이 웹 서버라면 HTTP 프로토콜을 사용하고, FTP 서버라면 FTP라는 프로토콜을 사용하는 식이다.
브라우저가 가장 먼저 하는 일은 웹 서버에 보내는 request 메시지를 작성하기 위해 사용자가 입력한 URL을 해독하는 것이다.
http://oing.co.kr/hello/file.html
이 URL을 브라우저에 입력한다고 생각해보자.
이 URl을 분해해보면
http
라는 프로토콜을 사용하여oing.co.kr
이라는 웹 서버에 위치한hello/file.html
파일에 접근한다고 해독할 수 있다.
여기서 http 프로토콜에 대해 잠깐 알아보자.
http 프로토콜을 단순하게 표현하자면 위 그림과 같다.
request 메시지 안에는 무엇을
, 어떻게 해서
하겠다는 내용이 쓰여있다.
여기서 무엇을
에 해당하는 것을 보통 URI
라고 하는데, 보통 페이지 데이터를 저장한 파일의 이름이나 CGI 프로그램의 파일명을 쓴다.
ex. http://oing.co.kr/hello/file.html
의 경우에는 hello/file.html
URI에는 다양한 엑세스 대상이 올 수 있으며, 이러한 엑세스 대상을 통칭하는 말이 URI이다.
여기서 어떻게 해서
에 해당하는 것이 메소드
이다. 이 메소드를 통해 브라우저는 웹 서버에게 어떤 동작을 하고 싶은지를 전달한다.
ex. URI로 나타낸 데이터를 읽고 싶다, 클라이언트에서 입력한 데이터를 URI로 나타낸 프로그램에 전달하고 싶다 등
그 외에도 보충 정보를 나타내는 헤더
도 포함된다.
URI와 메시지를 조사하여 무엇을
, 어떻게 하는지
판단한 후 요구에 따라 동작한다.
그리고 결과 데이터를 response 메시지에 저장한다.
response 메시지의 맨 앞부분에는 status code
가 존재한다.
이 status code에는 실행 결과가 정상 종료되었는지 또는 문제가 발생했는지 등이 담긴다.
그 다음 보충 정보가 담긴 헤더
와 client가 요청한 데이터
가 이어진다.
client는 response 메시지 안에서 데이터를 추출하여 화면에 표시하면서 HTTP의 동작은 끝이 난다.
다시 원래 하던 이야기로 돌아오자.
브라우저가 URL을 해독하여 웹 서버와 엑세스 할 파일명을 알아내면
브라우저는 이것을 바탕으로 HTTP Request 메시지를 만든다.
HTTP Request 메시지는 포맷이 정해져 있기 때문에, 브라우저는 이 포맷에 맞게 Request 메시지를 만든다.
맨 첫번째 행에는 Request Line을 쓴다. 이 한 행으로 Request의 내용을 대략 알 수 있다.
두번째 행부터는 Request Headers를 쓴다. 첫번째 행에서 Request의 내용을 대략 알 수 있지만, 부가적인 자세한 정보가 필요할 때 Header로 적는다.
공백 행 이후에는 Request Message Body를 쓴다. 이것이 바로 메시지의 실제 내용이다.
Http Request Message를 보내면, 웹 서버로부터 Http Response Message가 온다.
맨 첫번째 행에는 Status Line이 있다. 이 행에는 Status Code, 응답 문구를 통해 Request의 실행 결과 (요청이 정상적으로 실행되었는지, 아니면 오류가 발생했는지 등)를 알 수 있다.
두번째 행부터는 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
많은 도움이 되었습니다, 감사합니다.