HTTP란?
HTTP(Hyper Text Transfer Protocol): 인터넷 상에서 정보를 주고받을 수 있도록 하는 약속/규칙이다. Hyper Text를 전송하는 Protocol이다. www 상에서 정보를 주고받을 수 있는 프로토콜 클라이언트와 서버 사이에 이루어지는 요청/응답(request/response) 프로토콜
1. HTTP 요청
웹 브라우저와 같은 인터넷 통신 플랫폼에서 웹 사이트를 로드하는 데 필요한 정보를 요청하는 방법이다.
- HTTP 요청 구성
- HTTP 버전 유형
- URL
- HTTP METHOD
- HTTP 요청 헤더
- HTTP 본문(선택 사항)
1.1. HTTP METHOD
HTTP 요청 헤더 중 요청 메소드를 통해 클라이언트가 웹 서버에게 요청의 목적과 종류를 알린다.
Method | 의미 |
GET | 서버 측에 자원 요청 |
HEAD | HTTP 헤더 정보만 수신 |
POST | 서버로 자원 전송 |
PUT | 요청된 자원 갱신 |
DELETE | 요청된 자원 삭제 |
CONNECT | 요청한 자원에 대해 양방향 연결 시작 |
OPTIONS | 응답 가능한 HTTP 메소드 요청 |
TRACE | 원격지 서버에 루프백 테스트 |
PATCH | 자원의 부분적인 수정 |
1.2. HTTP 요청 헤더
HTTP 헤더에는 키값 쌍에 저장된 텍스트 정보가 포함되어 있으며 헤더는 모든 HTTP 요청에 포함된다. 이러한 헤더는 클라이언트가 사용하는 브라우저 및 요청되는 데이터와 같은 핵심 정보를 전달한다.
1.3. HTTP 요청 본문
요청의 본문은 요청에서 전송되는 정보의 ‘본문’을 포함하는 부분이다. HTTP 요청의 본문에는 사용자 이름 및 비밀번호 또는 양식에 입력된 기타 데이터와 같이 웹 서버에 제출되는 모든 정보가 포함된다.
2. HTTP 응답
서버는 클라이언트로부터 요청이 오면 응답 헤더의 정보와 바디의 데이터를 포함해 요청에 대한 응답을 한다.
- HTTP 응답 구성
- HTTP 상태 코드
- HTTP 응답 헤더
- HTTP 본문(선택 사항)
2.1. HTTP 응답 코드(상태 코드)
구분 | 응답 코드 | 응답 메시지 | 의미 |
1xx: 정보 | 100 | Continue | 진행 중 |
2xx: 성공 | 200 | OK | 요청에 대한 성공 |
201 | Created | 요청 자원이 정상적으로 생성이 됨 | |
3xx: 리다이렉션 | 301 | Moved Permanently | 요청한 자원이 새 url에 존재 |
302 | Found | 임시적으로 주소가 바뀌었을 경우 | |
4xx: 클라이언트 오류 | 400 | Bad Request | 잘못된 요청 |
401 | Unauthorized | 권한 없는 요청 | |
403 | Forbidden | 서버에서 해당 자원에 대한 접근 금지 | |
404 | Not Found | 요청 자원이 서버에 존재하지 않음 | |
5xx: 서버 오류 | 500 | Internal Server Error | 내부 서버 오류 |
502 | Bad Gateway | 게이트웨이로부터 잘못된 응답 수신 | |
503 | Service Unavailable | 현재 서버를 사용할 수 없음 | |
504 | Gateway Timeout | 게이트웨이가 응답을 받지 못함 |
2.2. HTTP 응답 헤더란?
HTTP 요청과 마찬가지로 HTTP 응답에는 응답 본문에서 전송되는 데이터의 언어 및 형식과 같은 중요한 정보를 전달하는 헤더가 함께 제공된다.
2.3. HTTP 응답 본문
‘GET’ 요청에 대한 성공적인 HTTP 응답에는 일반적으로 요청된 정보가 포함된 본문이 있다. 대부분의 웹 요청의 경우 이는 웹 브라우저에서 웹 페이지로 변환되는 HTML 데이터다.
HTTP/1.X와 HTTP/2
- HTTP/1.X: 199X년 개발
- HTTP/2: 2015년 개발
- HTTP/1.X에서 HTTP/2로 개발하면서 해결하고자 한 것들
- latency 감소 -> 멀티플렉싱(Multiplexing)
- 서버에서 클라이언트로 먼저 데이터를 보낼 수 있는 방법 -> 서버 푸시(Server Push)
- 네트워크 통신에 필요한 데이터량 감소 -> 헤더 압축(Header Compression)
1. 멀티플렉싱(Multiplexing)
멀티플렉싱이란 여러 개의 입력을 하나의 출력으로 만들어주는 기능이다. N -> 1 http/1.1은 한 개의 연결 당 한 개의 응답만 보낼 수 있었다. http/2에서는 한 개의 연결에서 N 개의 응답을 보낼 수 있다. 1차선에서 8차선 고속 도로된 느낌
2. 서버 푸시(Server Push)
일반적으로 서버는 클라이언트가 요청하는 경우에만 클라이언트 장치에 콘텐츠를 제공한다. 그러나 이 접근 방식은 클라이언트가 요청해야 하는 수십 개의 개별 리소스를 포함하는 최신 웹 페이지에서는 항상 실용적인 것은 아니다. HTTP/2는 클라이언트가 요청하기 전에 서버가 클라이언트에 콘텐츠를 “푸시”할 수 있도록 하여 이 문제를 해결한다. 서버는 또한 Bob이 모든 것을 보내기 전에 Alice에게 소설의 목차를 보낸 경우와 같이, 예상되는 콘텐츠를 푸시한 내용을 클라이언트에게 알려주는 메시지를 보낸다.
3. 헤더 압축(Header Compression)
작은 파일은 큰 파일보다 더 빨리 로드된다. 웹 성능 속도를 높이기 위해 HTTP/1.1 및 HTTP/2는 모두 HTTP 메시지를 압축하여 더 작게 만듭니다. 그러나 HTTP/2는 HTTP 헤더 패킷에서 중복 정보를 제거하는 HPACK이라는 고급 압축 방법을 사용합니다. 이렇게 하면 모든 HTTP 패킷에서 몇 바이트가 제거된다. 단일 웹 페이지를 로드하는 데 관련되는 HTTP 패킷의 양을 고려할 때, 이러한 바이트는 빠르게 합산되어 로드 속도가 빨라집니다.
Q1. http/1.1이랑 http/2랑 호환 X?
ALPN protocol (Application Layer Protocol Negotiation) HTTP2를 사용하는 쪽에서 TLS connection을 통해 상대측에게 ‘야, 너 HTTP2 가능하냐?’라고 물어봐서 무슨 말을 할 수 있는 지 확인하기 때문에 상관이 없다고 한다.