프로토콜은 어떤 시스템이 원할하게 통신할 수 있도록 하는 통신기약이다. 다양한 규격과 데이터들을 주고받기 위해서 만들어진 약속이라고 생각하면 된다. 그 중 오늘 공부할 HTTP 프로토콜은 주로 HTML문서를 주고 받는데에 사용되고 클라이언트와 서버를 통해 요청과 응답이 이루어진다. 클라이언트-서버 모델에서 클라이언트가 HTTP messages 양식에 맞춰 요청을 보내면, 서버도 HTTP messages 양식에 맞춰 응답한다.
UDP - 전화 라이브방송
TCP - 이메일 파일 전송 안전하게 정보를 전달 (http)
1.start line : 요청이나 응답의 상태를 보여주는데 첫 번째 줄에 위치하고 응답에서는
status line이라고 한다.
2.HTTP headers : 요청을 지정하거나, 메세지의 포함된 본문을 설명하는 헤더이다.
- Host : localhost 는 웹서버의 주소
- user-Agent : 어떤 유저가 접근하는지에 대해서
- accept encoding : 웹브라우저가 지원하는 압축방식
3.empty line : 헤더와 본문을 구분하는 빈 줄이 있다.
4.body : 요청과 관련된 데이터나 응답과 관련된 데이터 또는 문서를 포함한다. 요청과 응답의 형태에 따라서 선택적으로 사용한다.
이 중 start line과 HTTP headers를 묶어 요청이나 응답의 헤드(head)라고 하고, payload는 body라고 한다.
1. HTTP 메서드로 수행할 작업인 (GET, PUT, POST 등) 또는 방식(HEAD or OPTIONS)을 설명한다.
GET
: GET을 사용하는 요청은 오직 데이터를 받기만 한다.
POST
: POST 메서드는 특정 리소스에 엔티티를 제출할 때 쓰인다. 이는 종종 서버의 상태의 변 화나 부작용을 일으킨다.
PUT
: 목적 리소스 모든 현재 표시를 요청 payload로 바꾼다.
DELETE
: 특정 리소스를 삭제한다.
mdn 링크
http://developer.mozilla.org/en-US/docs/Web/HTTP/Messages
2. 요청 대상(일반적으로 URL이나 URI) 또는 프로토콜, 포트, 도메인의 절대 경로는 요청 컨텍스트에 작성된다. 이 요척 형식은 HTTP method마다 다르다.
- absolute 형식 : 완전한 URL 형식으로, 프록시에 연결하는 경우 대부분 GET method와 함께 사용한다.
- authority 형식 : 도메인 이름과 포트 번호로 이루어진 URL의 authority component 이다. HTTP 터널을 구축하는 경우, CONNECT와 함 께 사용할 수 있다.
3. HTTP 버전은 메시지의 다른 구조를 결정한다. 이를 위해 HTTP 버전을 함께 입력해야 한다.
Headers
요청의 Headers는 기본 구조를 따른다. 대소문자 구분 없는 문자열과 콜론(:), 값을 입력한다. 값은 헤더에 따라 다르다. 여러 종류의 헤더가 있고, 다음과 같이 그룹을 나눌 수 있다.
General headers : 메시지 전체에 적용
Request headers : User-Agent, Accept-Type, Accept-Language과 같은 헤더는 요청을 보다 구체화합니다. Referer처럼 컨텍스트를 제공하거나 If-None과 같이 조건에 따라 제약을 추가할 수 있다.
Entity headers : Content-Length와 같은 헤더는 body에 적용된다. body가 비어있는 경우, entity headers는 전송되지 않는다.
Body
요청의 본문은 HTTP messages 구조의 마지막에 위치한다. 본인이 원하는 요청에 따라 body를 사용하거나 안쓸 수 있다. GET, HEAD, DELETE, OPTIONS처럼 서버에 리소스를 요청하는 경우에는 본문이 필요하지 않는다. POST나 PUT과 같은 일부 요청은 데이터를 업데이트하기 위해 사용한다. body는 다음과 같이 두 종류로 나눌 수 있다.
Single-resource bodies(단일-리소스 본문) : 헤더 두 개(Content-Type과 Content-Length)로 정의된 단일 파일로 구성된다.
Multiple-resource bodies(다중-리소스 본문) : 여러 파트로 구성된 본문에서는 각 파트마다 다른 정보를 지닙니다. 보통 HTML form과 관련이 있다.
Status line: 응답의 첫줄이다.
ex) HTTP/1.1 404 Not Found.
Headers
응답에 들어가는 HTTP headers는 요청 헤더와 동일한 구조를 가지고 있다. 대소문자 구분 없는 문자열과 콜론(:), 값을 입력한다. 값은 헤더에 따라 다르다. 요청의 헤더와 마찬가지로 몇 그룹으로 나눌 수 있다.
General headers : 메시지 전체에 적용된다.
Response headers : Vary, Accept-Ranges와 같이 상태 줄에 넣기에는 공간이 부족했던 추가 정보를 제공한다.
Entity headers : Content-Length와 같은 헤더는 body에 적용됩니다. body가 비어있는 경우, entity headers는 전송되지 않는다.
Body
Single-resource bodies(단일-리소스 본문) :
Multiple-resource bodies(다중-리소스 본문) : 서로 다른 정보를 담고 있는 body