HTTP는 HTML과 같은 문서를 전송하기 위한 Application Layer Protocol (애플리케이션 계층 프로토콜) 이다.
HTTP는 웹 브라우저(클라이언트)와 웹 서버의 소통을 위해 디자인되었다.
웹통신 : 서버(웹서버)와 클라이언트(웹브라우저) 간의 데이터 주고받기 위한 대화
프로토콜 : 웹에서 서버 ↔ 클라이언트간 주고 받은 상호간의 약속(프로토콜)을 HTTP 프로토콜
HTTP는 특정 상태를 유지하지 않는 특징(비동기 프로토콜)이 있다.
HTTP는 실제로 요청을 주고 받을 때만 연결을 유지하고 응답을 주고나면 서버와의 연결을 끊는다.
확장 가능하다. 상태가 없지만, 세션은 있다

클라이언트와 서버 사이에 데이터가 교환되는 방식
요청(request), 응답(response)의 두가지 메시지 타입이 있다.
ASCII로 인코딩된 텍스트 정보로 여러 줄로 작성되어 있다.

HTTP Request Message는 공백(blank line)을 제외하고 3가지 부분으로 나누어진다.

HTTP Request Message의 시작 라인으로 크게 3가지 부분으로 구성되어 있다.
GET /test.html HTTP/1.1
[HTTP Method][Request target] [HTTP version]
해당 request에 대한 추가 정보(addtional information) 를 담고 있는 부분
예를 들어, request 메세지 body의 총 길이 (Content-Length) 등 Key:Value 형태로 구성
headers도 크게 3가지 부분으로 나뉨(general headers, request headers, entity headers)
- Host: google.com
- Accept: text/html
- Accept-Encoding: gzip, deflate
- Connection: keep-alive
Host : 요청하려는 서버 호스트 이름과 포트번호
User-agent : 클라이언트 프로그램 정보. 이 정보를 통해 서버는 클라이언트 프로그램(브라우저)에 맞는 최적의 데이터를 보내줄 수 있다.
Referer : 바로 직전에 머물렀던 웹 링크 주소
Accept : 클라이언트가 처리 가능한 미디어 타입 종류 나열
If-Modified-Since : 여기에 쓰여진 시간 이후로 변경된 리소스 취득. 페이지가 수정되었으면 최신 페이지로 교체한다.
Authorization : 인증 토큰을 서버로 보낼 때 쓰이는 Header
Origin : 서버로 Post 요청을 보낼 때 요청이 어느 주소에 시작되었는지 나타내는 값. 이 값으로 요청을 보낸 주소와 받는 주소가 다르면 CORS(Cross-Origin Resource Sharing) 에러가 발생한다.
Cookie : 쿠키 값이 key-value로 표현된다.
HTTP Request가 전송하는 데이터를 담고 있는 부분
전송하는 데이터가 없다면 body 부분은 비어있습니다.
보통 post 요청일 경우, HTML 폼 데이터가 포함되어 있습니다.
POST /test HTTP/1.1
Accept: application/json
Accept-Encoding: gzip, deflate
Connection: keep-alive
Content-Length: 83
Content-Type: application/json
Host: google.com
User-Agent: HTTPie/0.9.3
{
"test_id": "tmp_1234567",
"order_id": "8237352"
}

응답의 첫 줄은 Status line이라고 부르며, 다음의 정보를 포함한다.
현재 프로토콜의 버전(HTTP/1.1)
상태 코드 – 요청의 결과를 나타냅니다. (200, 302, 404 등)
상태 텍스트 – 상태 코드에 대한 설명
Status line은 HTTP/1.1 404 Not Found. 처럼 생겼다.
응답에 들어가는 HTTP headers는 요청 헤더와 동일한 구조를 가지고 있다.
대소문자 구분 없는 문자열과 콜론(:), 값을 입력한다.
값은 헤더에 따라 다르다.
HTTP_Response_Headers
요청의 헤더와 마찬가지로 몇 그룹으로 나눌 수 있다.
- General headers
메시지 전체에 적용된다.
- Response headers
Vary, Accept-Ranges와 같이 상태 줄에 넣기에는 공간이 부족했던 추가 정보를 제공한다.
- Entity headers
Content-Length와 같은 헤더는 body에 적용된다.
body가 비어있는 경우, entity headers는 전송되지 않는다.
응답의 본문은 HTTP messages 구조의 마지막에 위치한다.
모든 응답에 body가 필요한 것은 아니다.
201, 204와 같은 상태 코드를 가지는 응답에는 본문이 필요하지 않다.
응답의 body는 다음과 같이 두 종류로 나눌 수 있다.
- Single-resource bodies(단일-리소스 본문)
길이가 알려진 단일-리소스 본문은 두 개의 헤더(Content-Type, Content-Length)로 정의한다.
길이를 모르는 단일 파일로 구성된 단일-리소스 본문은 Transfer-Encoding이 chunked 로 설정되어 있으며, 파일은 chunk로 나뉘어 인코딩되어 있다.
- Multiple-resource bodies(다중-리소스 본문)
서로 다른 정보를 담고 있는 body이다.

웹에서 어느 사이트에 접속하기 위해 입력해야 하는 주소를 포함한 일련의 문자
(도메인을 포함한 경로로, 도메인의 상위 개념)
| 구조 | 설명 |
|---|---|
| URL | 전체 주소 |
| https | 프로토콜 |
| www.~ | 도메인 |
| path | 파일의 경로를 가리키며, / 뒤에 나온다. 컴퓨터의 폴더와 비슷한 개념이다. |
| parameter | 쿼리 스트링이라고 부르며, key(파라미터의 이름) = value(파라미 터의 값) 형태로 이루어진다. |
| ? | 뒤에 나열되고, & 기호로 구분되어 여러 개가 존재할 수 있다. |
| fragment | 해시태그(hashtag), 앵커(ancher)라고도 부른다. 특정 요소를 지시할 수 있으며 파일 디렉토리 및 파일 이름과 유사한 역할로 쓰이기도 한다. |
❓ URI(Uniform Resource Identifier) : 자원의 위치 뿐만 아니라 자원에 대한 고유 식별자로서 URL의 의미를 포함
❓ URL(Uniform Resource Locator) : 자원이 실제로 존재하는 위치
❗ URI는 식별하고, URL은 위치를 가리킨다.
GET - 조회
POST - 생성
PUT, PATCH - 수정(변경)
DELETE - 삭제
클라이언트가 서버에 어떤 요청(request)을 하고 나면, 서버는 그에 맞는 응답(response)을 제공한다. 그 때 각 응답은 상태코드를 갖는다.
https://developer.mozilla.org/en-US/docs/Web/HTTP/Messages
https://hanamon.kr/%eb%84%a4%ed%8a%b8%ec%9b%8c%ed%81%ac-http-%eb%a9%94%ec%84%b8%ec%a7%80-message-%ec%9a%94%ec%b2%ad%ea%b3%bc-%ec%9d%91%eb%8b%b5-%ea%b5%ac%ec%a1%b0/