HTTP Request message와 HTTP Response message에 대해 알아봅니다.
▶HTTP message
🌟HTTP Request message

1. Request Line 요청 행
- 예:
GET /index.html HTTP/1.1
- method
- 웹브라우저(클라이언트)가 웹서버에게 어떤 작업을 요청할지 명시.
- 예:
GET, POST, PUT, DELETE
- URL
- 웹브라우저가 웹서버에게 요청하는 정보의 경로.
- 예:
/index.html, /api/data
- HTTP version
- 웹브라우저(클라이언트)가 현재 사용하고 있는 HTTP 프로토콜의 버전.
- 예:
HTTP/1.1, HTTP/2
- 요청에 대한 부가 정보: 브라우저 정보, 호스트, 쿠키 등 포함.
- 각 줄은
키: 값 형식으로 구성.
- Host
- 예:
Host: localhost:0000
- Host: 인터넷에 연결되어있는 컴퓨터 한대 한대를 식별하는 이름. 요청하는 웹사이트의 웹서버의 주소.
- Virtual Hosting 가상호스트: 하나의 웹서버가 여러개의 도메인 서비스를 제공할 경우, 웹서버는 적혀있는 주소(Host 정보)를 바탕으로 요청을 구분한다. 가상호스트를 지원하는 서버는 이 정보로 어떤 사이트에 접근하는지 구분한다.
- Port: 한대의 컴퓨터에는 여러개의 웹서버가 설치될 수 있다. 따라서, port 번호로 어떤 웹서버에 요청할지 구분.
- User-Agent
- 예:
User-Agent: Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Mobile Safari/537.36
- 웹브라우저의 다른 표현.
- 요청하는(클라이언트의) 웹브라우저가 어떤 웹브라우저인지를 보여준다: 운영체제, 브라우저, 장치 정보 등
- 서버는 이 정보를 통해 브라우저 호환성 처리나 접근 제어를 할 수 있다.
- 크롬, 파이어폭스 말고 로봇이 접근할 수도 있는데, 웹서버는 이 정보를 바탕으로 요청을 차단.
- Accept-Encoding
- 예:
Accept-encoding: gzip, deflate, br, zstd
- 웹브라우저 웹서버가 서로 통신할 때 응답하는 데이터의 양이 많으면 압축해서 전송하면 웹브라우저가 압축을 풀어 처리할 수 있다 (네트워크의 자원을 아낌).
- 이 때 이 웹브라우저는 어떤 압축방식을 지원하는지 알려준다. 서버는 이를 바탕으로 응답을 압축.
- If-Modified-Since
- 예:
If-Modified-Since: Wed, 08 May 2024 12:00:00 GMT
- 마지막으로 언제 다운로드 받은 파일인지 서버에게 알려준다.
- 파일을 요청받아서 응답할 때 갖고있는 파일과 뭐가 더 최신인지 비교해서 갖고있는 파일이 최신이면 전송하고, 최신이 아니면 전송하지 않아도 되도록(다운으로 안해도 됨).
Blank line
- body와 header는 중간에 blank line을 둬서 구분한다.
- 반드시 존재해야 한다.
3. Request Body 요청 본문
- 클라이언트가 서버에 전송하는 데이터. 서버쪽으로 전송해야 할 정보.
- 예: 회원가입 정보, 로그인 폼 데이터, JSON, 파일 업로드 등.
- 주로 POST, PUT 등의 메서드에서 사용된다.
- Payload 페이로드 라고도 부른다.
🌟HTTP Response message

1. Status Line 상태 라인
- 예:
HTTP/1.1 200 OK
- 서버가 응답했을 때 잘 됐는지, 안됐는지 알려주는 정보.
- HTTP version: 응답에 사용된 HTTP 프로토콜의 버전.
- Status code: 응답 결과.
- 1xx: Informational 요청을 받고 처리 중
- 2xx: Success 요청 성공
- 3xx: Redirection 다른 위치로 이동 필요
- 4xx: Client Error 클라이언트의 요청 오류
- 5xx: Server Error 서버 측 오류
- phrase: 응답 결과를 사람이 이해하도록 쉽게 설명.
- 예:
OK, Not Found, Internal Server Error
- 서버가 응답과 함꼐 보내는 부가 정보.
- Content-Type
- 예:
Content-Type: text/html
- 응답 본문의 데이터 타입을 명시.
- Content-Length
- 예:
Content-Length: 1434
- 응답하는 컨텐츠의 전체 크기. 단위는 byte.
- Content-Encoding
- 예:
Content-Encoding: gzip
- 본문이 압축되었을 경우, 어떤 방식으로 압축되었는지 알려줌.
- 브라우저는 이 정보를 바탕으로 압축을 해제하여 처리.
- Last-Modified
- 예:
Last-Modified: Tue, 17 Jul 2018 23:28:26 GMT
- 서버에 저장된 리소스가 마지막으로 수정된 시간.
Blank line
3. Body 본문
- 클라이언트가 요청한 HTML, 이미지, JSON 등의 실제 데이터.
