본문 바로가기

[Servlet] 01-2 | HTTP 요청 프로토콜

HTTP 요청 프로토콜

브라우저는 사용자의 동작에 따라 HTTP 요청 프로토콜 메시지를 자동으로 생성하여 웹 서버에 전달합니다. 브라우저의 요청을 받은 웹 서버는 정해진 로직을 수행합니다. 웹 서버의 수행이 완료되면 웹 서버는 브라우저에  HTTP 응답 프로토콜 메시지를 돌려 보냅니다. 브라우저는 이 HTTP 응답 프로토콜 메시지를 처리하여 사용자에게 적절한 화면을 보여줍니다.


HTTP 요청 URL

사용자가 버튼을 누르거나 하이퍼링크를 클릭할 때, 또는 브라우저 주소창에 직접 URL 주소를 입력할 때 브라우저는 HTTP 요청 URL을 서버에 전달합니다.

*호스트(도메인): 웹 서버가 설치된 컴퓨터(호스트). localhost는 자기 자신의 컴퓨터를 의미함.

 

HTTP 요청 프로토콜 구조

HTTP 요청 프로토콜은 (1) start-line, (2) message-header, (3) CRLF, (4) message-body로 이루어져 있습니다.

 

(1) start-line

HTTP 요청 메시지의 첫 줄에 해당하는 start-line에는 요청 방식과 URI, 프로토콜에 대한 정보를 담겨 있습니다.

*요청 방식: 브라우저가 웹 서버에 요청을 전달하는 방식. GET, POST, PUT, DELETE 등이 있음.

*URI (Uniform Resource Identifier): URL (Uniform Resource Locator)에서 포트 번호 이후의 문자열

 

크롬 브라우저의 개발자 도구에서 [Network] 탭을 클릭하면 실제 서버에게 전달된 HTTP 요청 메시지를 확인해볼 수 있습니다. 다음은 BoardProject 앱의 member 디렉터리 내에 위치한 index.html 파일을 서버에게 요청하자 브라우저가 자동으로 생성해준 HTTP 요청 메시지입니다. 첫 줄을 보면 start-line에 해당하는 내용이 나와 있음을 확인할 수 있습니다.

 

(2) message-header

start-line의 다음 줄부터는 message-header에 해당하는 내용이 나옵니다. 여기에는 주로 브라우저와 관련된 정보가 담겨 있습니다. message-header의 정보들은 키와 값 형태를 가집니다.

 

*Accept: 브라우저가 처리할 수 있는 MIME Type 목록. 브라우저가 처리할 수 있는 미디어 타입.

*Accept-Encoding: 브라우저가 처리할 수 있는 압축 방식

*Accept-Language: 브라우저가 처리할 수 있는 언어 목록

*Cookie: 서버로부터 받은 쿠키 정보. 브라우저에서 서버로 최초 접속 시 쿠키가 발급됨.

*Host: 요청하려는 서버 호스트의 이름 : 포트번호

*User-Agent: 브라우저의 이름/버전 정보

 

(3) CRLF

CRLF는 Carriage Return (CR)과 Line Feed (LF)를 의미합니다. 헤더와 바디를 구분하기 위한 한 줄의 공백입니다.

*Carriage Return (CR): 커서를 그 줄의 맨 앞으로 이동

*Line Feed (LF): 커서를 다음 줄로 이동

 

(4) message-body

message-body는 사용자가 입력한 정보들이 담기는 메시지의 본문입니다.

브라우저의 요청 방식(예: GET, POST 등)에 따라 message-body의 내용은 달라집니다.

  • POST 방식: message-body에 사용자가 입력한 정보가 설정됨

*사용자가 입력한 정보는 키=값 형태로 메시지 본문에 담기며 각 정보들은 ?로 구분됩니다.

  • GET 방식: message-body에 아무것도 설정되지 않음

*사용자가 GET 방식으로 서버에 정보를 보내는 경우, 이 정보는 URL 뒤에 쿼리 스트링(Query String)을 추가하는 방식으로 서버에 전달됩니다. 보안이 필요한 데이터를 전송하는 경우 GET 방식을 이용하면 데이터가 모두 노출되므로 POST 방식을 이용해야 합니다.

*쿼리 스트링 (Query String): URI 뒤에 추가되는 ?키=값 형태로 HTTP 요청과 함께 전달된 문자열.

 

이번 글에서는 HTTP 요청 프로토콜의 구조를 알아보았습니다. 다음 글에서 HTTP 응답 프로토콜의 구조를 살펴보겠습니다.


참고 자료

도서

- 채규태, <02장. HTTP 프로토콜과 요청 방식>, <<채쌤의 Servlet&JSP 프로그래밍 핵심>>, 쌤즈, 2022년, 29~54쪽

 

웹 자료

- MDN Web Docs Glossary, "CRLF", 글 보러가기