intro
HTTP는 HTML(HyperText Markup Language)과 같은 문서를 전송하기 위한 Application Layer 프로토콜임
웹 브라우저와 웹 서버의 소통을 위해 디자인됨
HTTP의 특징은 특정 상태를 유지하지 않는 무상태성(Stateless)를 가지고 있음!
비연결성: HTTP 는 연결을 유지하지 않은채 응답과 요청을 처리함. 요청에 대한 응답을 처리하게 되면 연결을 끊어버림
무상태성: 그래서 HTTP는 이전의 정보나 현재의 통신상태가 남아있지 않음
HTTP messages
HTTP messages 는 클라이언트와 서버 사이에서 데이터가 교환되는 방식! 두 가지 유형이 있는데
- 요청(Reuests)
- 응답(Responses)
HTTP message는 몇 줄 정도의 텍스트 정보로 구성되어있음.
내가 건드릴 필요는 거의 없고 구성 파일, API, 기타 인터페이스에서 자동으로 완성시켜줌
그림에서
1. start line: 요청이나 응답의 상태를 나타냄 항상 첫째 줄에 있으며 응답에서는 status line이라 부름
2. HTTP headers: 요청을 지정하거나, 메세지에 포함된 본문을 설명하는 헤더의 집합
3. empty line: 헤더와 본문을 구분하는 빈 줄!
4. body: 요청과 관련된 데이터나 응답과 관련된 데이터 또는 문서 포함. 선택적임
이때 stat line과 HTTP headers를 묶어 head라 하고 payload(사용에 있어 전송되는 데이터)는 body라고 이야기함.!
요청(Requests)
start line
HTTP 요청은 클라이언트가 서버에 보내는 메세지! Start line에는 세 가지 요소가 있음!
1. 수행할 작업(GET, PUT, POST 등) 이나 방식(HEAD or OPTIONS) 을 설명하는 HTTP method.
2. 요청 대상(일반적으로 URL 이나 URI) 또는 프로토콜, 포트 , 도메인의 절대 경로는 요청 컨텍스트에 작성됨
이 요청 형식은 HTTP method마다 다름
- origin 형식 : ?와 쿼리 문자열이 붙는 절대 경로
POST, GET, HEAD, OPTIONS 등의 method와 함께 사용합니다.
POST / HTTP 1.1
GET /background.png HTTP/1.0
HEAD /test.html?query=alibaba HTTP/1.1
OPTIONS /anypage.html HTTP/1.0
- absolute 형식 : 완전한 URL 형식으로, 프록시에 연결하는 경우 대부분 GET method와 함께 사용.
GET http://developer.mozilla.org/en-US/docs/Web/HTTP/Messages HTTP/1.1
- authority 형식 : 도메인 이름과 포트 번호로 이루어진 URL의 authority component 임.
HTTP 터널을 구축하는 경우, CONNECT와 함께 사용할 수 있음.
CONNECT developer.mozilla.org:80 HTTP/1.1
- asterisk 형식 : OPTIONS 와 함께 별표(*) 하나로 서버 전체를 표현함.
OPTIONS * HTTP/1.1
3. HTTP 버전(인터넷에 검색해보셈)에 따라 HTTP message의 구조가 달라지므로 start line에 HTTP 버전을 함꼐 입력
Headers
요청의 Header의 기본 구조를 따름. 헤더 이름(대소문자 구분없는 문자열), 콜론(:), 값을 입력
여러 종류의 헤더가 있는데 그 값은 헤더에 따라 다름.
- General headers : 메시지 전체에 적용되는 헤더로, body를 통해 전송되는 데이터와는 관련이 없는 헤더입니다.
- Request headers : fetch를 통해 가져올 리소스나 클라이언트 자체에 대한 자세한 정보를 포함하는 헤더를 의미합니다. User-Agent, Accept-Type, Accept-Language과 같은 헤더는 요청을 보다 구체화합니다. Referer처럼 컨텍스트를 제공하거나 If-None과 같이 조건에 따라 제약을 추가할 수 있습니다.
- Representation headers : 이전에는 Entity headers로 불렀으며, body에 담긴 리소스의 정보(콘텐츠 길이, MIME 타입 등)를 포함하는 헤더입니다.
Body
요청의 본문은 HTTP messages 구조의 마지막에 위치
모든 요청에 body가 필요하지는 않음.
예를들어 GET, HEAD, DELETE, OPTIONS처럼 서버에 리소스를 요청하는 경우에는 본문이 필요하지 않음.
POST나 PUT과 같은 일부 요청은 데이터를 업데이트하기 위해 사용됨.
body는 두 가지 종류로 나눌 수 있는데
- Single-resource bodies(단일-리소스 본문): 헤더 두개(Content-Type과 Content-Length)로 정의
- Multiple-resource bodies(다중-리소스 본문): 여러 파트로 구성된 본문에서 각 파트마다 다른 정보를 지님
뭔말임?
응답(Responses)
Status line
응답의 첫 줄임.
1. 현재 프로토콜의 버전(HTTP/1.1)
2. 상태 코드 - 요청의 결과를 나타냄(200, 404 등)
3. 상태 텍스트: 짧고 간결하게 상태 코드에 대한 설명을 글로 나타내어 사람들이 이해하기 쉽게 만듬
HTTP/1.1 404 Not Found.
Headers
응답에 들어가는 HTTP headers는 요청 헤더와 동일한 구조를 가지고 있음.
요청의 헤더와 같이 몇 그룹으로 나눌 수 있음
- General headers : 메시지 전체에 적용되는 헤더로, body를 통해 전송되는 데이터와는 관련이 없는 헤더임.
- Response headers : 위치 또는 서버 자체에 대한 정보(이름, 버전 등)와 같이 응답에 대한 부가적인 정보를 갖는 헤더로, Vary, Accept-Ranges와 같이 상태 줄에 넣기에는 공간이 부족했던 추가 정보를 제공함.
- Representation headers : 이전에는 Entity headers로 불렀으며, body에 담긴 리소스의 정보(콘텐츠 길이, MIME 타입 등)를 포함하는 헤더임.
Body
응답의 본문은 HTTP messages 구조의 마지막에 위치
201(Created), 204(No content) 와 같은 상태 코드의 응답같이 본문이 필요하지 않을떄가 있음.
body역시 두 종류로 나눔.
- Single-resource bodies(단일-리소스 본문) :
- 길이가 알려진 단일-리소스 본문은 두 개의 헤더(Content-Type, Content-Length)로 정의함.
- 길이를 모르는 단일 파일로 구성된 단일-리소스 본문은 Transfer-Encoding이 chunked 로 설정되어 있으며, 파일은 chunk로 나뉘어 인코딩되어 있음.
- Multiple-resource bodies(다중-리소스 본문) : 서로 다른 정보를 담고 있는 body.
Stateless
HTTP로 클라이언트와 서버가 통신을 주고받는 과정에서, HTTP가 클라이언트나 서버의 상태를 확인하지 않음.
사용자는 쇼핑몰에 로그인하거나 상품을 클릭해 상세 화면으로 이동하고, 상품을 카트에 담거나 로그아웃을 할 수도 있음
이동안, HTTP 통신은 모든 과정을 추적하지 않음!
만약 쇼핑몰에서 카트에 담기 버튼을 눌렀을때, 카트에 담긴 상품 정보(상태)를 저장해둬야 함.
그러나 HTTP는 통신 규약일 뿐이므로, 상태를 저장하지 않음. 따라서 필요에 따라 다른 방법을 통해 상태를 확인할 수 있어야 함!
HTTP의 큰 특징 중 하나는 Stateless(무상태성)!
'코딩공부 > T.I.L' 카테고리의 다른 글
2022-01-27 CORS (0) | 2022.01.27 |
---|---|
2022-01-27 브라우저의 작동 원리(비지블 AJAX) (0) | 2022.01.27 |
2022-01-27 크롬 개발자도구 Network 사용법 (0) | 2022.01.27 |
2022-01-27 브라우저의 작동 원리(보이지 않는 곳) (0) | 2022.01.27 |
2022-01-27 HTTP를 이용한 클라이언트-서버 통신과 API (0) | 2022.01.27 |