728x90
반응형
- 메세지가 어떻게 흘러가는지?
- HTTP 메세지란, HTTP 어플리케이션 간에 주고 받는 데이터의 블록들(메세지의 내용과 의미를 설명하는 텍스트 메타 정보와 데이터).
- 클라이언트 -> 프록시 -> 서버(인바운드, 아웃바운드, 업스트림과 다운 스트림 ==> 메시지의 방향을 의미하는 용어)
- 메시지는 원 서버 방향으로 인바운드로 하여 송신된다.
- HTTP의 모든 메세지는 다운스트림이다.
- HTTP 메시지의 세 부분(시작줄, 헤더, 개체 본문)
- 요청과 응답 메시지의 차이
- 요청 메시지가 지원하는 메서드엔 무엇이 있고, 각 메서드의 기능을 간단히 설명.
- 응답 메시지가 반환하는 여러 상태 코드는 무엇이 있는지
- 여러 HTTP 헤더들은 무슨 일을 하는지?
1. HTTP 메시지의 흐름
HTTP 메시지는 주로 클라이언트(예: 웹 브라우저)와 서버 간의 통신에 사용됩니다. 이 과정은 일반적으로 다음과 같이 진행됩니다:
- 클라이언트가 서버에 요청: 사용자가 웹 페이지를 방문하면, 클라이언트는 서버에 HTTP 요청을 보냅니다.(인바운드)
- 서버가 요청을 처리: 서버는 클라이언트의 요청을 받고, 요청된 자원을 찾거나 필요한 처리를 수행합니다.
- 서버가 클라이언트에 응답: 서버는 요청에 대한 결과를 HTTP 응답 메시지로 클라이언트에 보냅니다.(아웃바운드)
- 클라이언트가 응답을 처리: 클라이언트는 서버의 응답을 받아, 웹 페이지를 렌더링하거나 요청된 데이터를 처리합니다.
2. HTTP 메시지의 세 부분
HTTP 메시지는 크게 세 부분으로 나눌 수 있습니다:
- 시작줄(Start Line):
- 요청 메시지의 경우: 요청 메서드(GET, POST 등), 요청 URL, HTTP 버전으로 구성됩니다.
- 응답 메시지의 경우: HTTP 버전, 상태 코드, 상태 메시지로 구성됩니다.
- 헤더(Header):
- 헤더는 여러 개의 필드로 구성되며, 각 필드는 키-값 쌍으로 이루어져 있습니다.
- 요청 또는 응답에 대한 추가적인 정보(예: 콘텐츠 타입, 길이, 인코딩 등)를 제공합니다.
- 개체 본문(Body):
- 요청 또는 응답의 실제 데이터를 포함하는 부분입니다.
- GET 요청에서는 주로 본문이 비어 있지만, POST 요청에서는 폼 데이터나 JSON 데이터 등이 포함될 수 있습니다.
- 응답 메시지에서는 요청된 자원(예: HTML, 이미지 데이터 등)이 포함됩니다.
3. 요청과 응답 메시지의 차이
- 요청 메시지(Request Message):
- 클라이언트가 서버에 특정 작업을 요청할 때 사용됩니다.
- 시작줄에 요청 메서드와 URL이 포함됩니다.
- 헤더에는 클라이언트의 정보(예: 사용자 에이전트, 쿠키)와 요청에 필요한 기타 정보가 포함됩니다.
- 응답 메시지(Response Message):
- 서버가 클라이언트의 요청에 대한 결과를 반환할 때 사용됩니다.
- 시작줄에 상태 코드(200, 404 등)와 상태 메시지가 포함됩니다.
- 헤더에는 서버 정보와 반환된 데이터의 메타데이터(예: 콘텐츠 타입, 길이)가 포함됩니다.
- 본문에는 요청된 데이터(예: HTML 페이지, JSON 데이터)가 포함됩니다.
4. 요청 메시지가 지원하는 메서드
HTTP 요청 메시지가 지원하는 주요 메서드는 다음과 같습니다:
- GET: 서버에서 자원을 요청할 때 사용합니다. URL에 포함된 데이터를 가져오는 용도이며, 데이터는 본문에 포함되지 않습니다.
- POST: 서버에 데이터를 전송할 때 사용합니다. 보통 폼 데이터를 서버로 보내거나 새로운 리소스를 생성할 때 사용됩니다.
- PUT: 서버의 자원을 업데이트할 때 사용합니다. 지정된 자원 전체를 대체합니다.
- DELETE: 서버에서 자원을 삭제할 때 사용됩니다.
- HEAD: GET과 유사하지만, 응답 본문을 가져오지 않고 헤더 정보만 가져옵니다.
- OPTIONS: 서버에서 지원하는 메서드의 목록을 요청할 때 사용됩니다.
- PATCH: 자원의 일부를 업데이트할 때 사용합니다. PUT과 달리 전체 자원을 대체하지 않고 부분적으로 변경합니다.
5. 응답 메시지가 반환하는 여러 상태 코드
응답 메시지는 다양한 상태 코드를 포함하여 요청에 대한 결과를 나타냅니다. 주요 상태 코드는 다음과 같습니다:
- 1xx (정보): 요청을 수신하였고, 처리를 계속하고 있음을 나타냅니다.
- 100 Continue: 요청의 일부를 수신했으며, 계속 진행해도 좋다는 뜻입니다.
- 2xx (성공): 요청이 성공적으로 처리되었음을 나타냅니다.
- 200 OK: 요청이 성공적으로 처리되었고, 응답 본문에 결과가 포함되어 있습니다.
- 201 Created: 요청이 성공적으로 처리되었고, 새로운 자원이 생성되었음을 나타냅니다.
- 3xx (리다이렉션): 추가 조치가 필요함을 나타냅니다.
- 301 Moved Permanently: 요청된 자원이 영구적으로 이동되었음을 나타냅니다.
- 302 Found: 요청된 자원이 임시적으로 다른 위치에 있음을 나타냅니다.
- 4xx (클라이언트 오류): 요청에 문제가 있음을 나타냅니다.
- 400 Bad Request: 잘못된 문법 등으로 인해 서버가 요청을 이해할 수 없습니다.
- 401 Unauthorized: 인증이 필요하거나 인증이 실패하였습니다.
- 404 Not Found: 요청된 자원을 찾을 수 없습니다.
- 5xx (서버 오류): 서버에 문제가 있음을 나타냅니다.
- 500 Internal Server Error: 서버에서 알 수 없는 오류가 발생했습니다.
- 503 Service Unavailable: 서버가 요청을 처리할 준비가 되지 않았습니다(예: 과부하 상태).
6. 여러 HTTP 헤더의 역할
HTTP 헤더는 요청 또는 응답에 추가적인 정보를 제공합니다. 주요 헤더는 다음과 같습니다:
- General Headers:
- Date: 메시지가 생성된 날짜와 시간을 나타냅니다.
- Connection: 클라이언트와 서버 간의 연결 상태를 제어합니다(예: keep-alive).
- Request Headers:
- Host: 요청하는 호스트와 포트를 지정합니다.
- User-Agent: 요청을 보내는 클라이언트의 소프트웨어 정보(예: 브라우저 종류)를 나타냅니다.
- Accept: 클라이언트가 받을 수 있는 콘텐츠 타입을 지정합니다(예: Accept: text/html).
- Response Headers:
- Server: 응답을 보내는 서버의 소프트웨어 정보를 나타냅니다.
- Content-Type: 응답 본문의 MIME 타입을 지정합니다(예: Content-Type: text/html).
- Set-Cookie: 클라이언트에게 쿠키를 설정하도록 지시합니다.
- Entity Headers:
- Content-Length: 본문의 길이를 나타냅니다.
- Content-Encoding: 본문의 인코딩 방식을 지정합니다(예: gzip).
- Last-Modified: 자원의 최종 수정 날짜를 나타냅니다.
728x90
반응형
'Network' 카테고리의 다른 글
웹의 탄생, 그리고 발전 (15) | 2024.09.07 |
---|---|
HTTP 분석 (0) | 2024.09.03 |
URI와 웹 브라우저 요청 흐름 (0) | 2024.08.27 |
HTTP 웹 기본 지식 (0) | 2024.08.27 |
서버-클라이언트 구조 (0) | 2024.08.22 |