GET /index.html HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9
Connection: keep-alive
HTTP 요청 메세지는 크게 3가지 부분으로 구성된다.
- 요청 라인 (Request Line) → 요청의 핵심 정보 (예: GET /index.html HTTP/1.1)
- 헤더 (Headers) → 요청 관련 추가 정보 (예: User-Agent, Host, Content-Type 등)
- 본문 (Body, 선택적) → POST 요청 등에서 데이터를 담는 부분
Connection: keep-alive
HTTP 프로토콜에서, 기본적으로 한 번의 요청-응답이 끝나면 연결을 끊는다. 예를 들어, 클라이언트가 서버에 GET /index.html을 요청하고, 서버가 응답을 보내면 그때의 연결은 종료된다. 이 방식은 비효율적일 수 있다. 왜냐하면 매번 새로운 연결을 열고 닫는 데에 시간과 자원이 소모되기 때문이다.
클라이언트가 해당 옵션을 사용하면, 서버는 이를 수락하고 일정 시간동안 연결을 유지한다. 예를 들어, 한 웹페이지에서 여러 리소스를 요청할 떄, 클라이언트는 첫 번째 요청 후, 두 번째, 세 번째 요청 등을 동일한 연결을 통해 보낼 수 있다.
1. 클라이언트의 요청
클라이언트는 Connection: keep-alive 헤더를 포함하여 서버에 요청을 보낸다.
GET /index.html HTTP/1.1
Host: example.com
Connection: keep-alive
2. 서버의 응답
서버는 요청을 처리한 후 Connection: keep-alive를 그대로 유지하며 응답한다.
HTTP/1.1 200 OK
Connection: keep-alive
Content-Type: text/html
3. 후속 요청
클라이언트가 같은 연결을 사용하여 추가적인 리소스를 요청할 수 있다.
GET /style.css HTTP/1.1
Host: example.com
HTTP 응답에서 Content-Type과 charset의 중요성
서버와 클라이언트 간에 데이터를 주고받을 때, 이 설정이 제대로 되어있지 않으면 문자가 깨지거나 잘못 표시되는 문제가 있다.
Content-Type 이란?
Content-Type 헤더는 서버가 클라언트에게 보내는 응답에서 본문의 미디어 타입을 명시하는 역할을 한다. 즉, 응답 본문이 더떤 종류의 데이터인지 알려주는 역할을 한다. 예를 들어, 웹 페이지의 HTML 파일을 보내거나, JSON 데이터를 전달할 때 사용된다.
예시:
Content-Type: text/html
위의 예시에서는 Content-Type: text/html은 응답 본문이 HTML 문서임을 나타낸다. 하지만 Content-Type 만으로는 데이터의 인코딩 방식을 알 수없다. 그래서 charset 이라는 추가적인 정보가 필요하다.
charset이란?
charset은 문자 인코딩 방식을 지정하는 데 사용된다. 문자 인코딩은 텍스트를 이진 데이터로 변환하는 방식으로, 텍스트의 표현 방법을 정의한다. 이를 통해 다양한 언어의 문자들을 처리할 수 있다.
예시:
Content-Type: text/html; charset=UTF-8
위의 예시에서 charset=UTF-8은 응답 본문이 UTF-8 인코딩을 사용하여 전송된다는 것을 의미한다. 클라이언트는 이 정보를 바탕으로 데이터를 UTF-8로 디코딩하고 올바르게 화면에 표시할 수 있다.
Content-Type과 charset이 중요한 이유?
1. 문자가 깨지는 문제 예방
만약 서버가 charset을 제대로 지정하지 않으면, 클라이언트는 어떤 인코딩 방식으로 데이터를 해석해야 할지 알 수 없다.
이로 인해 텍스트가 깨지거나 잘못 표시될 수 있다.
예를들어 서버가 text/html; charset=ISO-8859-1 로 응답을 보내는데 클라이언트가 UTF-8을 사용하여 데이터를 해석한다면, 한글이나 특수문자는 제대로 표시되지않고 깨진 문자로 보일 수 있다.
2. 다양한 문자 표현
charset을 통해 인코딩 방식을 정확히 지정하면, 웹 페이지에서 다양한 언어와 문자를 정확하게 표현할 수 있다. 예를 들어 한글, 일본어, 아랍어, 이모지 등을 UTF-8 인코딩을 통해 정확하게 표시할 수 있다.
서버와 클라이언트에서 charset 처리 과정
서버는 클라이언트에게 응답을 보낼 때, 응답 본문에 Content-Type 헤더와 함께 charset을 설정하여 본문의 인코딩 방식을 명시한다.
HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
서버는 응답 본문이 UTF-8로 인코딩 되었음을 알려주며, 클라이언트는 이를 바탕으로 데이터를 해석한다.
클라이언트는 Content-Typㄷ 헤더의 chatset을 읽고, 이를 기반으로 응답 본문을 올바르게 해석한다. 예를 들어 chatset-UTF-8을 확인한 클라이언트는 본문을 UTF-8로 디코딩 하여 화면에 정확히 표시한다.
'지식창고' 카테고리의 다른 글
TCP 연결 설정과 종료 과정 (0) | 2025.03.30 |
---|---|
인코딩의 종류 (0) | 2025.03.29 |