HTTP
HTTP(HyperText Transfer Protocol)는 인터넷을 통해 웹 브라우저가 서버와 통신하고 인터넷에서 정보를 얻을 수 있도록 하는 것입니다.
특징
HTTP는 상태를 저장하지 않습니다(Stateless). 동일한 연결 상에서 연속하여 전달된 두 개의 요청 사이에는 연결고리가 없습니다.
HTTP의 핵심은 상태가 없는 것이지만, HTTP 쿠키(HTTP cookie)
는 상태가 있는 세션을 만들도록 해줍니다.
HTTP 쿠키
HTTP의 일종으로, 인터넷 사용자가 어떠한 웹사이트를 방문할 경우 사용자의 웹 브라우저를 통해 인터넷 사용자의 컴퓨터나 다른 기기에 설치되는 기록 정보 파일
HTTP는 TCP(Transmission Control Protocol)
를 기반으로 만들어진 프로토콜 입니다.
메시지의 형식에 대해 HTTP가 표준을 제시해주고 이 메시지를 TCP 방식으로 전달합니다.
TCP
인터넷상에서 데이터를 메세지의 형태로 보내기 위해 IP와 함께 사용하는 프로토콜
HTTP 흐름
- 웹 페이지 URL 정보와 전달받은 IP 주소는 HTTP 프로토콜을 사용하여 HTTP 요청 메시지 생성(이렇게 생성된 HTTP 요청 메시지는 TCP 프로토콜을 사용하여 인터넷을 거쳐 해당 IP 주소의 컴퓨터로 전송됨)
GET / HTTP/1.1
Host: developer.mozilla.org
Accept-Language: fr
- 도착한 HTTP 요청 메시지는 HTTP 프로토콜을 사용하여 웹 페이지 URL 정보로 변환
- 웹 서버는 도착한 웹 페이지 URL 정보에 해당하는 데이터 검색
- 검색된 웹 페이지 데이터는 또 다시 HTTP 프로토콜을 사용하여 HTTP 응답 메시지 생성
이렇게 생성된 HTTP 응답 메시지는 TCP 프로토콜을 사용하여 인터넷을 거쳐 원래 컴퓨터로 전송
HTTP/1.1 200 OK
Date: Sat, 09 Oct 2010 14:28:02 GMT
Server: Apache
Last-Modified: Tue, 01 Dec 2009 20:18:22 GMT
ETag: "51142bc1-7449-479b075b2891b"
Accept-Ranges: bytes
Content-Length: 29769
Content-Type: text/html
<!DOCTYPE html... (here comes the 29769 bytes of the requested web page)
- 도착한 HTTP 응답 메시지는 HTTP 프로토콜을 사용하여 웹 페이지 데이터로 변환
HTTP Protocol
HTTP Message
HTTP 메시지는 서버와 클라이언트 간에 데이터가 교환되는 방식입니다. 메시지 타입은 두 가지가 있습니다.
요청(request)은 클라이언트가 서버로 전달해서 서버의 액션이 일어나게끔 하는 메시지고, 응답(response)은 요청에 대한 서버의 답변입니다.
구조
- 시작 줄(start-line)에는 실행되어야 할 요청, 또은 요청 수행에 대한 성공 또는 실패가 기록되어 있습니다. 이 줄은 항상 한 줄로 끝납니다.
- 옵션으로 HTTP 헤더 세트가 들어갑니다. 여기에는 요청에 대한 설명, 혹은 메시지 본문에 대한 설명이 들어갑니다.
- 요청에 대한 모든 메타 정보가 전송되었음을 알리는 빈 줄(blank line)이 삽입됩니다.
- body에는 요청과 관련된 내용(HTML 폼 콘텐츠 등)이 옵션으로 들어가거나, 응답과 관련된 문서(document)가 들어갑니다. 본문의 존재 유무 및 크기는 첫 줄과 HTTP 헤더에 명시됩니다.
HTTP Request
Request Line
HTTP Method
: 요청시 보내는 HTTP 메소드 형태
- Request Target: 어디로 보내는지에 대한 URI
- HTTP Version: HTTP 버젼으로 현재까지는 대부분이 HTTP/1.1
HTTP Method
GET: 특정 리소스의 조회를 요청.(데이터를 받기)
POST: 특정 리소스에 엔티티를 등록
PUT: 리소스를 대체, 해당 리소스가 없으면 생성
DELETE:특정 리소스를 삭제
PATCH: 리소스의 부분만을 수정
...
- Host: 호스트 URL
- Accept: 서버에서 해당 타입에 데이터를 보내달라고 요청하는 헤더
- User-Agent: 클라이언트 정보
- Authorization: JWT 같은 인증 토큰을 서버로 보낼 때 사용하는 헤더
- Cookie: 클라이언트 로컬에 저장되는 key-value쌍의 데이터 파일
- Referer: 경유한 웹 사이트에 대한 정보
- ...
Blank Line
요청 헤더와 요청 바디를 구분하는 라인
Request Body
클라이언트가 서버에 실제 요청한 내용
HTTP Response
Status Line
- HTTP Version: 응답 온 메세지의 HTTP 버젼 정보
- Status Code: 응답 코드
- Status text: 응답 상태
- Date: 응답 온 일시
- Server: 서버에 대한 정보
- Last-Modified: 최근 수정 일시
- ETag: 특정 버전에 대한 식별자
- Content-Type: 응답 데이터의 타입
- ...
Responese Body
실제 응답받은 메시지(데이터)
참고
Basics of HTTP
웹의 작동 원리
HTTP의 이해