1. HTTP란 ?
1. HTTP(Hyper Text Transfer Protocol)
💡 하이퍼텍스트 전송 프로토콜을 의미. 웹 상에서 클라이언트와-서버 간에 데이터 통신을 하기 위한 통신규약 입니다.
- 클라이언트가 브라우저를 통해서 어떠한 서비스를 URI로 서버에 요청(Request)하면, 서버에서는 해당 요청에 대한 결과를 응답(Response)하는 형태로 동작한다.
- HTTP/1.1, HTTP/2는 TCP 기반, HTTP/3는 UDP 기반 프로토콜이다.
- TCP 연결은 요청을 보내거나(혹은 여러 개의 요청) 응답을 받는데 사용된다. 클라이언트는 새 연결을 열거나, 기존 연결을 재사용하거나, 서버에 대한 여러 TCP 연결을 열 수 있다.
2. HTTP 메시지 구조
HTTP 메시지는 요청(Requests)과 응답(Responses) 두 가지 타입으로 나뉘어 진다.
1. 요청(Requests)
요청 메세지 구조는 Start Line, Headers, Body 3가지 부분으로 나뉘어 진다.
GET /test.html HTTP/1.1 -> start line
Host: developer.mozilla.org -> headers
Accept-Language: fr -> headers
{
"test_id": "tmp_1234567", -> body
"order_id": "8237352"
}
1. Start Line 시작 라인
- Method : HTTP 메서드
- Path : 가져오려는 리소스 경로 -> 예를 들면 프로토콜 (http://), 도메인 (en-US), 또는 TCP 포트 (en-US) (여기서는 80) 요소들을 제거한 리소스의 URL
- HTTP 프로토콜 버전
2. Headers
- Headers : 서버에 추가 정보를 전달하는 선택적 헤더들 -> Host, Accept-Language 등
- headers도 크게 3가지 부분으로 나뉨(general headers, request headers, entity headers)
General 헤더 : Via와 같은 헤더는 메시지 전체에 적용됩니다.
Request 헤더 : User-Agent (en-US), Accept-Type와 같은 헤더는 요청의 내용을 좀 더 구체화 시키고(Accept-Language), 컨텍스를 제공하기도 하며(Referer), 조건에 따른 제약 사항을 가하기도 하면서(If-None) 요청 내용을 수정합니다.
Entity 헤더 : Content-Length와 같은 헤더는 요청 본문에 적용됩니다. 당연히 요청 내에 본문이 없는 경우 entity 헤더는 전송되지 않습니다.
Host : 요청하려는 서버 호스트 이름과 포트번호
User-agent : 클라이언트 프로그램 정보. 이 정보를 통해 서버는 클라이언트 프로그램(브라우저)에 맞는 최적의 데이터를 보내줄 수 있다.
Referer : 바로 직전에 머물렀던 웹 링크 주소
Accept : 클라이언트가 처리 가능한 미디어 타입 종류 나열
If-Modified-Since : 여기에 쓰여진 시간 이후로 변경된 리소스 취득. 페이지가 수정되었으면 최신 페이지로 교체한다.
Authorization : 인증 토큰을 서버로 보낼 때 쓰이는
HeaderOrigin : 서버로 Post 요청을 보낼 때 요청이 어느 주소에 시작되었는지 나타내는 값. 이 값으로 요청을 보낸 주소와 받는 주소가 다르면 CORS(Cross-Origin Resource Sharing) 에러가 발생한다.
Cookie : 쿠키 값이 key-value로 표현된다.
3. Body
- HTTP Request가 전송하는 데이터를 담고 있는 본문, 보통 post 요청일 경우, HTML 폼 데이터가 포함되어 있다.
2. 응답(Responses)
응답 메세지 구조는 Status Line, Headers, Body 3가지 부분으로 나누어 진다.
HTTP/1.1 200 OK -> Status line
Date: Sat, 09 Oct 2010 14:28:02 GMT -> 여기서부터 headers
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) -> body
1. Status line
- HTTP 프로토콜의 버전
- Status Code : 요청의 성공 여부와, 그 이유를 나타내는 상태 코드
- Status Text : 상태 코드의 짧은 설명을 나타내는 상태 메시지
2. Headers
- 요청 헤더와 비슷한 HTTP 헤더들, 다만 response에서만 사용되는 header 값들이 있다. 예를 들어, User-Agent 대신에 Server 헤더가 사용된다.
3. Body
- HTTP Response가 전송하는 데이터를 담고 있는 본문, 데이터 전송이 없을 경우 body가 비어있다.
<참고>
728x90
반응형
'웹(Web)' 카테고리의 다른 글
모듈 시스템 require와 import의 차이 / commonJs와 ES6 / 웹팩 바벨 (0) | 2023.07.26 |
---|---|
브라우저 저장소의 차이점(Local storage, Session storage, cookie) (0) | 2023.07.25 |
브라우저의 구성 요소와 렌더링 과정 (0) | 2023.07.16 |
REST API란 무엇인가? (1) | 2023.04.28 |
[Web] URL과 도메인의 차이, URL의 구조 (0) | 2023.02.13 |