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", 글 보러가기
'Java > Servlet' 카테고리의 다른 글
[Servlet] 03-1 | JDBC API와 JDBC 드라이버 (0) | 2024.05.02 |
---|---|
[Servlet] 02-2 | 서블릿의 라이프 사이클 (0) | 2024.05.02 |
[Servlet] 02-1 | WAS: Web Server와 서블릿 컨테이너 (0) | 2024.05.02 |
[Servlet] 01-3 | HTTP 응답 프로토콜 (0) | 2024.05.02 |
[Servlet] 01-1 | HTTP 프로토콜의 개념과 특징 (0) | 2024.05.02 |