반응형
HTTP (HyperText Transfer Protocol)
특징
- 클라이언트 서버 구조
- Request Response 구조
- 클라이언트는 서버에 요청을 보내고, 응답을 대기 / 서버가 요청에 대한 결과를 만들어서 응답
Stateful (상태 유지)
특징
- 항상 같은 서버가 유지되어야 한다.
- 로그인 기능 사용시 사용 (쿠키, 세션 등)
- 최소한으로 사용해야 한다.
Stateless (무상태)
특징
- 응답 서버를 쉽게 바꿀 수 있다.
- 스케일 아웃에 유리
- 데이터를 너무 많이 보낸다.
- 모든 것을 무상태로 설계할 수 없다.
HTTP 의 비연결성
특징
- HTTP 는 기본적으로 연결을 유지하지 않는 모델
- 일반적으로 초 단위 이하의 빠른 속도로 응답
- 서버 자원을 효율적으로 사용할 수 있다.
- 1시간 동안 수천 명이 서비스를 사용해도 실제 서버에서 동시에 처리하는 요청은 수십개 이하로 매우 적다.
한계
- TCP/IP 연결을 새로 맺어줘야 한다. (3 way Handshake 시간 추가)
- 많은 자원 (HTML, CSS, JS) 을 함
- 현재는 HTTP 지속 연결 (Persistent Connections) 로 문제 해결
HTTP 메시지 구조
start-line 시작라인 |
header 헤더 |
empty line 공백라인 (CRLF) |
message body |
start-line
start-line = request-line / status-line
request-line = method (space) request-target(절대 경로) (space) HTTP-version CRLF (enter)
status-line = HTTP-version (space) status-code (space) reason-phrase CRLF
header-field
header-field = field-name ":" OWS field-value OWS (OWS : 띄어쓰기 허용)
용도
- HTTP 전송에 필요한 모든 부가정보
- 표준 헤더가 너무 많음
- 필요시 임의의 헤더 추가 가능
message body
용도
- 실제 전송할 데이터
- HTML 문서, 이미지, 영상, JSON 등등 byte 로 표현할 수 있는 모든 데이터 전송 가능
HTTP 메시지 전송
(애플리케이션)
1. 웹 브라우저가 HTTP 메시지 생성
2. SOCKET 라이브러리를 통해 전달
- TCP/IP 연결 (IP, PORT)
- 데이터 전달
(OS)
3. TCP/IP 패킷 생성, HTTP 메시지 (ex. GET /search?1=hello&hl=ko HTTP/1.1 Host: www.google.com) 포함
(네트워크 인터페이스)
4. 인터넷으로 흘러감
(웹 서버)
5. HTTP 응답 메시지 리턴 (ex. HTTP/1.1 200 ok~)
HTTP 메서드
- GET - 리소스 조회
- POST - 요청 데이터 처리, 주로 등록에 사용
- PUT - 리소르를 대체, 해당 리소스가 없으면 생성
- PATCH - 리소스 부분 변경
- DELETE - 리소스 삭제
GET
ex)
GET /search?q=hello&hl=ko HTTP/1.1
Host: www.google.com
- 리소스 조회
- 서버에 전달하고 싶은 데이터는 query (쿼리 파라미터, 쿼리 스트링) 을 통해서 전달
- 메시지 바디를 사용해서 데이터를 전달할 수 있지만, 지원하지 않는 곳이 많아서 권장하지 않음
POST
대상 리소스가 리소스의 고유한 의미 체계에 따라 요청에 포함된 표현을 처리하도록 요청
ex)
POST /members HTTP/1.1
Content-Type: application/json
{
"username": "hello",
"age": 20
}
- 새 리소스 생성
- 메시지 바디를 통해 서버로 요청 데이터 전달
- 요청 데이터 처리 - 컨트롤 URI (ex. POST /orders/{orderId}/start-delivery)
- 기존 자원에 데이터 추가
리소스 URI 에 POST 요청이 오면 요청 데이터를 어떻게 처리할지 리소스마다 따로 정해야 함 = 정해진 것이 없음
PUT
- 리소스를 완전히 대체 (리소스가 있으면 대체, 없으면 생성 -> 덮어쓰기)
- 클라이언트가 리소스 위치를 알고 URI 지정 - POST 와의 큰 차이점
PATCH
- 리소스를 부분적으로 대체
DELETE
- 리소스 제거
HTTP 메서드의 속성
안전
- 호출해도 리소스를 변경하지 않는다.
멱등 (Idempotent)
- 한 번 호출하든 두 번 호출하든 결과가 똑같다.
- POST 는 멱등이 아니다!
- 자동 복구 메커니즘 (서버가 TIMEOUT 등으로 정상적인 응답을 못 주었을 때 판단)
- 외부 요인으로 중간에 리소스가 변경되는 것까지는 고려하지 않는다.
캐시가능 (Cacheable)
- 응답 결과 리소르를 캐시해서 사용해도 되는가
- GET, HEAD 정도만 캐시로 사
참고
모든 개발자를 위한 HTTP 웹 기본 지식 - 김영한 강사님
반응형
'개발 ━━━━━ > CS' 카테고리의 다른 글
[HTTP] IP / TCP / UDP / PORT / URI (0) | 2024.06.13 |
---|