HTTP(하이퍼텍스트 전송 프로토콜, HyperText Transfer Protocol)
1. HTTP의 개요
HTTP는 월드 와이드 웹(WWW)에서 데이터를 주고받기 위한 애플리케이션 계층 프로토콜입니다. 인터넷에서 웹 브라우저와 웹 서버 간에 HTML, 이미지, 비디오, JSON 등 다양한 리소스를 전송하는 데 사용됩니다.
HTTP는 클라이언트-서버 모델을 기반으로 작동하며, 클라이언트가 요청(request)을 보내면 서버가 응답(response)을 반환하는 구조입니다.
2. HTTP의 주요 특징
- 비연결성(Connectionless)
- 클라이언트가 요청을 보내고 서버가 응답을 하면 연결을 끊습니다.
- 이를 통해 서버의 자원을 효율적으로 관리할 수 있습니다.
- 하지만, 매 요청마다 새로운 연결을 수립해야 하기 때문에 오버헤드가 발생할 수 있습니다.
- 무상태성(Stateless)
- HTTP는 상태를 유지하지 않는 프로토콜입니다.
- 각 요청과 응답이 독립적으로 처리되며, 이전 요청과 다음 요청 간의 상태 정보가 저장되지 않습니다.
- 이를 보완하기 위해 쿠키, 세션, 토큰 등을 사용하여 상태를 관리합니다.
- 확장성 및 유연성
- HTTP는 URI(Uniform Resource Identifier)를 통해 다양한 리소스를 식별할 수 있습니다.
- 요청과 응답의 형식을 유연하게 정의할 수 있으며, 헤더를 통해 다양한 정보를 주고받을 수 있습니다.
3. HTTP 메시지 구조
- HTTP 요청(Request) 구조
- 요청 라인(Request Line): GET /index.html HTTP/1.1
- 헤더(Header): 추가 정보를 전달하기 위한 메타데이터. 예: Content-Type, User-Agent
- 본문(Body): POST, PUT 요청 시 전송하는 데이터.
- HTTP 응답(Response) 구조
- 상태 라인(Status Line): HTTP/1.1 200 OK
- 헤더(Header): 응답에 대한 정보. 예: Content-Length, Set-Cookie
- 본문(Body): 클라이언트에 전달할 실제 데이터.
4. HTTP 메서드
- GET: 리소스를 조회할 때 사용.
- POST: 데이터를 서버에 제출할 때 사용.
- PUT: 리소스를 생성 또는 수정할 때 사용.
- DELETE: 리소스를 삭제할 때 사용.
- HEAD: GET과 동일하지만, 본문 없이 헤더 정보만 반환.
- OPTIONS: 서버가 지원하는 메서드를 조회.
- PATCH: 리소스의 일부를 수정할 때 사용
5. HTTP 상태 코드(Status Code)
- 1xx 상태 코드는 요청이 처리 중이며, 추가 작업이 필요함을 나타냅니다.
- 2xx 상태 코드는 요청이 성공적으로 처리되었음을 의미합니다.
- 3xx 상태 코드는 요청한 리소스가 다른 위치로 이동했음을 나타냅니다.
- 4xx 상태 코드는 클라이언트의 잘못된 요청으로 인해 서버가 요청을 처리할 수 없음을 나타냅니다.
- 5xx 상태 코드는 서버가 요청을 처리하지 못한 경우 반환됩니다.
- 1xx (정보)
- 100 Continue
- 클라이언트가 요청을 계속 진행해도 된다는 의미입니다.
- 주로 Expect: 100-continue 헤더가 있는 요청에서 사용됩니다.
- 101 Switching Protocols
- 서버가 프로토콜 전환을 승인했음을 나타냅니다.
- 예: HTTP에서 WebSocket으로 전환.
- 103 Early Hints
- 클라이언트가 리소스를 미리 로드할 수 있도록 헤더 정보를 사전에 제공합니다.
2xx (성공)- 200 OK
- 요청이 성공적으로 처리되었으며, 응답 본문에 리소스가 포함됩니다.
- 201 Created
- 요청을 통해 새 리소스가 생성되었음을 나타냅니다.
- POST 요청의 결과로 자주 사용됩니다.
- 202 Accepted
- 요청이 수락되었으나 아직 처리되지 않았음을 나타냅니다.
- 204 No Content
- 요청이 성공했으나 응답 본문이 없음을 의미합니다.
- 206 Partial Content
- 클라이언트가 요청한 일부 콘텐츠를 제공할 때 사용합니다.
- 주로 파일 다운로드 시 사용됩니다.
3xx (리다이렉션)- 301 Moved Permanently
- 리소스가 영구적으로 새로운 URL로 이동했음을 의미합니다.
- 브라우저는 이후 요청에서 새 URL을 사용합니다.
- 302 Found
- 리소스가 임시로 다른 URL에 있습니다.
- 303 See Other
- 클라이언트를 다른 URL로 리디렉션합니다.
- POST 요청 후 GET 요청으로 변경할 때 사용됩니다.
- 304 Not Modified
- 클라이언트가 캐시된 리소스를 사용할 수 있음을 의미합니다.
- 307 Temporary Redirect
- 302와 유사하지만, 요청 메서드를 유지합니다.
- 308 Permanent Redirect
- 301과 유사하지만, 요청 메서드를 유지합니다.
4xx (클라이언트 오류)- 400 Bad Request
- 잘못된 요청 문법으로 인해 서버가 요청을 이해할 수 없습니다.
- 401 Unauthorized
- 인증이 필요하거나 인증이 실패했음을 의미합니다.
- 403 Forbidden
- 클라이언트가 리소스에 접근할 권한이 없음을 나타냅니다.
- 404 Not Found
- 요청한 리소스를 찾을 수 없을 때 반환됩니다.
- 405 Method Not Allowed
- 요청한 메서드가 허용되지 않음을 나타냅니다.
- 406 Not Acceptable
- 클라이언트가 요청한 리소스가 지정된 형식으로 제공될 수 없음을 의미합니다.
- 408 Request Timeout
- 클라이언트가 지정된 시간 내에 요청을 완료하지 못함을 나타냅니다.
- 409 Conflict
- 요청이 서버 상태와 충돌할 때 반환됩니다.
- 410 Gone
- 요청한 리소스가 영구적으로 삭제되었음을 나타냅니다.
- 413 Payload Too Large
- 요청 본문이 서버가 허용하는 크기를 초과했음을 나타냅니다.
- 429 Too Many Requests
- 클라이언트가 지정된 시간 내에 너무 많은 요청을 보냈음을 나타냅니다.
5xx (서버 오류)- 500 Internal Server Error
- 서버에서 예상치 못한 오류가 발생했음을 나타냅니다.
- 501 Not Implemented
- 서버가 요청을 처리할 기능을 지원하지 않음을 의미합니다.
- 502 Bad Gateway
- 서버가 잘못된 응답을 게이트웨이 또는 프록시로부터 수신했음을 나타냅니다.
- 503 Service Unavailable
- 서버가 일시적으로 과부하 상태이거나 유지보수 중일 때 반환됩니다.
- 504 Gateway Timeout
- 게이트웨이 또는 프록시 서버가 지정된 시간 내에 응답을 받지 못함을 나타냅니다.
- 505 HTTP Version Not Supported
- 서버가 요청한 HTTP 버전을 지원하지 않음을 의미합니다.
- 100 Continue
반응형
'Develop > Network' 카테고리의 다른 글
TCP, UDP 특징과 차이점 (0) | 2024.12.02 |
---|---|
OSI 7계층이란 (0) | 2024.12.01 |