Programming/Web, HTML
HTTP :: 요청 프로토콜(Request Protocol)과 그 형식
WANJIN
2017. 5. 31. 19:50
반응형
미니 Web Application Server(WAS)를 짜려다보니...
HTTP의 요청 프로토콜과 응답 프로토콜에 대한 이해가 먼저 필요했다.
왜냐면 HTTP는 요청과 응답의 한 세트로 모든 일이 일어나기 때문!
그래서 이번 포스트에서는 요청 프로토콜에 대해 다뤄보도록 하겠다.
요청 프로토콜(Request Protocol)
HTTP 요청 형식은 다음과 같다.
Request-Line CRLF |
{ 메시지헤더 CRLF } * |
CRLF |
message-body |
참고로 CRLF는 줄바꿈을 말한다. 그니까 '엔터'치는거 말이다.
Request-Line이 한 줄 오고 줄 바꿈 후, 메시지 헤더가 온다.
메시지 헤더에는 general, request, entity header가 있는데, 이 3개는 여러 개가 올 수 있다.
메서지 헤더는 하나 당 한 번이 줄 바꿈이 있어야 하고 메시지 헤더가 모두 끝나면 빈 줄이 꼭 있어야 한다.
그런 담에 메시지 본문이 오면 끗.
각각을 좀 더 디테일하게 살펴보겠다.
1. Request-Line(요청 라인)
요청 라인은 요청 대상을 가리키는 한 줄의 문자열이다.
이 요청 라인은 이렇게 구성이 되어 있다.
GET |
http://www.tistory.com/index.html |
HTTP/1.1 |
메소드 |
URI |
HTTP 버전 |
메소드
메소드는 요청의 종류를 말한다.
어떤 종류의 요청인지를 가리는 데에 사용된다고 보면 된다.
메소드는 몇 가지 종류가 있는데, GET, POST가 가장 대표적이다.
GET은 자원 조회 요청에 주로 사용되고, POST는 자원을 추가하거나 변경하는 것과 같은 요청에 사용된다.
메소드는 이 두 가지 말고도 몇 개가 더 있다.
HEAD - 생성일, 크기 등 자원의 정보면 요청할 때 사용
PUT - 자원 추가 요청 시 사용
DELETE - 자원 제거 요청 시 사용
뭐 이 정도만 알아도 많이 아는거다. 헿
URI
메소드가 어떤 종류의 요청인지를 알려주는 거라면, 이 친구는 '뭘 요청했나?'를 알려주는 친구다.
우리가 웹브라우저 주소 창에 www.daum.net를 입력하면 그에 대한 응답으로 우리에게 다음 홈 화면을 주는거다.
HTTP 버전
이건 말 그대로 HTTP 버전을 나타낸다.
버전에 따라서 이용할 수 있는 메소드 종류도 다르고, 요청 헤더 종류도 달라지기 때문에 어떤 버전에 따른 요청인지 지정해줘야 한다.
2. Message Header(메시지 헤더)
메시지 헤더는 요청에 대한 부가 설명은 담은 데이터로, 3 가지 종류가 있다.
=> 일반 정보(general header), 요청 정보(request header), 엔티티 정보(entity header)
이걸 쓰는 문법은 이렇다.
=> 헤더명: 값 CRLF
General Header
요청과 응답 모두에 사용되는 정보이다.
Request Header
요청할 때만 전달되는 정보이다.
Entity Header
보내는 데이터에 대한 정보이다.
무언가 데이터를 보낸다는 것은 POST 요청이라는 말이기 때문에, 이 정보는 POST 요청일 때만 보낸다.
참고로 GET 요청은 URL에 보내는 데이터가 포함되기 때문에 entity header가 필요하지 않다.
3. Message-body(메시지 본문)
이것은 말 그대로 요청하는 데이터 본문을 말하는데, 데이터를 보낸다는 것은 POST요청이라는 말이다.
때문에 이것도 POST 요청인 경우에만 추가된다.
이그잼쁠
GET /app/test/list.json HTTP/1.1
Host: localhost:8080
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36
Origin: null
Accept: *
Accept-Encoding: gzip, deflate, sdch, br
Accept-Language: ko-KR,ko;q=0.8,en-US;q=0.6,en;q=0.4
=> 이 예는 GET 방식 요청이기 때문에 Request Line과 메시지 헤더로만 구성되어 있다.
반응형