HTTP(Hyper Text Transfer Protocol)
HTTP는 서버와 클라이언트가 서로 데이터를 주고 받기 위해 사용되는 통신 규약이다.
TEXT, IMAGE, FILE, HTML, JSON 등 다양한 형태의 데이터가 HTTP를 통해 전송된다.
HTTP의 진화 과정
HTTP/0.9
- GET 메서드만 지원
- HTTP 헤더 없음
HTTP/1.0
메서드, 헤더, 상태코드가 추가됐다.
- 요청 헤더 : http 버전이 생김
- 응답 헤더 : 상태 코드와 content-type이 생겨 html파일 외 다른 타입의 파일도 전송
- 단기 커넥션 : connection 하나당 1요청, 1응답만 가능
HTTP/1.1
현재 가장 많이 사용하며, 대부분의 기능이 추가
- Persistent connection : 지정한 timeout 동안 연속적인 요청 사이에 커넥션을 닫지 않음
- 파이프라이닝 : 여러 요청을 순차적으로 보내고 서버의 응답을 기다리지 않고 다음 요청을 바로 보내는 방식
- HOL 블로킹(Head Of Line 블로킹) 문제와 같은 문제점이 많아 널리 채택되지 못함
💡 HOL 블로킹(Head-of-Line Blocking) 문제
파이프라이닝에서는 요청 순서대로 응답해야 하므로, 앞선 요청이 처리되지 않으면 뒤의 요청도 차단됩니다.예를 들어, 요청 A가 느리게 처리되면 요청 B와 C도 응답이 지연됩니다.
HTTP/2.0
HTTP 1.1 성능을 개선 및 확장하는 버전이다.
HTTP/3.0
TCP로 인해 발생하는 문제를 해결하기 위해
TCP 대신에 UDP 기반의 프로토콜인 QUIC를 사용한다.
QUIC는 신뢰성 기능이 제공되는 UDP 기반 프로토콜이다.
HTTP 특징
HTTP는 Stateless이고 Connectionless이다.
HTTP 메시지 구조
HTTP 메시지는 위 그림과 같이 구성되어 있다.
공백 라인은 Message Body 구분을 위한 라인이다.
HTTP 요청 메시지
Start Line은 다음과 같이 구성되어 있다.
- HTTP Method
- 위 그림에서는 GET이다.
- 요청의 의도를 가진 GET, POST, PUT, PATCH, DELETE 등이 있다.
- Create - POST
- Reat - GET
- Update - PUT(전체), PATCH(일부)
- Delete - DLETE
- Path
- 위 그림에서는 /event
- HTTP Request가 전송되는 대상, 절대 경로("/"로 시작하는 경로)
- Query String(= Query Parameter)에 해당하는 값도 포함된다.
- HTTP Version
- 위 그림에서는 1.1
- HTTP Version을 나타낸다.
Header는 다음과 같이 구성되어 있다.
- 위 그림에서는 Host : spartacoding.co.kr
- HTTP 전송에 필요한 부가 정보를 담고 있따.
Empty Line
- 공백 한 줄로 메세지 바디와 구분을 위해 있다.
- 필수 값이다.
Message Body
- 실제 전송하는 데이터가 담겨 있는 부분이다.
- HTML, 이미지, JSON 등 byte로 표현되는 모든 데이터 전송 가능
- 요청 시 GET의 경우 Message Body가 지원되지 않는 경우가 많아 권장하지 않는다.
HTTP 응답 메시지
응답 메시지 구성은 다음과 같다.
Start Line
- HTTP 버전 : HTTP/1.1
- 상태 코드 : 200
- 상태 메시지 : OK
Header
- HTTP 전송에 필요한 모든 부가 정보를 담고 있다.
Empty Line
- 공백 한줄, 필수값
Message Body
- 실제 전송하는 데이터가 담겨 있는 부분
- 전송할 데이터가 없다면 Body가 공백으로 존재한다.
HTTP 메소드
HTTP 메소드는 클라이언트 - 서버 사이에 이루어지는 요청, 응답 데이터를 전송하는 방식이다.
주요 메소드 5가지
- GET : 리소스 조회에 사용, GET의 경우 Message Body가 지원되지 않는 경우가 많다.
- POST : 요청 데이터 처리, 주로 데이터 등록에 사용
- PUT : 리소스를 덮어쓰기, 해당 리소스가 없으면 생성
- PATCH : 리소스를 일부만 변경
- DELETE : 리소스 삭제
기타 메소드 4가지
- HEAD : GET 메서드의 요청과 동일한 응답을 요구하지만, 응답 본문을 포함 X
- OPTION : 대상 리소스에 대한 통신 가능한 Method를 설명한다.
- CONNECT : 대상 자원으로 식별되는 서버에 대한 터널을 설정한다.
- TRACE : 대상 리소스에 대한 경로를 따라 메시지 루프백 테스트를 수행한다.
HTTP Method 속성
📚 HTTP 메소드는 안정선(Safe), 멱등성(Idempotent), 캐시가능성(Cacheable) 속성을 가지고 있다. 각각의 속성이 무엇인지와 어떤 HTTP Method가 해당 특성을 가지고 있는지 알아보자.
안정성
호출해도 리소스 변경이 일어나지 않는 속성이다.
GET은 안전하며 POST, DELETE, PUT, PATCH는 안전하지 않다.
멱등성
동일한 요청을 여러 번 보내도 한 번 보내는 것과 같은 것과 같은 속성을 의미한다.
TimeOut 등으로 클라이언트가 서버로 부터 정상 응답을 받지 못 했을 때 같 요청을 다시 해도 되는지 판단하는 근거이다.
GET, PUT, DELTE, PATCH , POST 중 POST를 제외한 나머지 메소드는 멱등하다.
캐시가능성
재사용을 위해 요청에 대한 응답을 저장할 수 있는가를 의미한다.
- GET, HEAD, POST 메소드는 캐시가 가능하다.
- 일반적으로 GET, HEAD 정도만 캐시로 사용한다.
- 변경 가능성이 적은 정적자원(HTML, CSS, IMAGE, JS 등)을 주로 캐싱한다.
HTTP 상태 코드
상태 코드는 클라이언트가 보낸 요청의 처리 상태를 응답에서 알려주는 기능이다.
100 ~ 500 번대 숫자로 이루어져 있다. 각 백번대 마다 의미가 있다.
1xx(정보)
- 요청 수신 후 처리중인 상태
- 잘 사용하지 않는다.
2xx(성공) : 정상 처리 완료된 상태
3xx(리다이렉션) : 요청을 완료하려면 추가 행동이 필요한 상태
- 3xx 응답 + Location HTTP Header가 있으면 Location 위치로 리다이렉트 한다.
4xx(클라이언트 에러) : 클라이언트 측 오류, 잘못된 문법 등으로 서버가 요청을 수행할 수 없다.
5xx(서버 에러) : 서버 오류, 요청은 정상이지만 서버가 처리하지 못함
참고 문헌
'Web' 카테고리의 다른 글
WAS의 Thread와 MultiThread 이해 (0) | 2024.11.26 |
---|---|
Servlet (1) | 2024.11.26 |
Web Server와 WAS (0) | 2024.11.26 |
Restful API (1) | 2024.11.26 |