Web Network 공부를 기본기부터 다시 정리하고자 합니다.
요번 글에서는, 김영한 님의 Http 강의를 듣고, 정리해야할 내용들을 이어서 정리해보도록 하겠습니다.
HTTP 메세지를 구성하는 뼈대부터 알아봅시다.
Start-line (시작라인)
Header (헤더)
Empty line 공백라인(CRLF - 필수 )
message body (본문)
공식문서 RFC7230을 보시게 되면,
HTTP-message =
start line
*(header-filed crlf)
crlf
[Message-body]
로 정의되어있습니다.
#cf) 스펙에 정의된 기호들의 의미
스펙에 정의된 기호들의 의미가 궁금해 찾아보았습니다.
스펙 2번째줄에 있는 *의 의미는 0 이상을 의미하고 여러개가 올 수 있음을 의미합니다.
(crlf는 개행문자 enter라고 생각하시면 되겠습니다.)
Message-body에 써진 대괄호 의미는 선택적인 요소를 의미합니다.
선택적 사용이 가능하다는 의미입니다.
이런식으로 구성됩니다. 이렇게 형태를 띄는데 실제 메세지 형태를 보도록 합시다.
본격적으로 예시를 들어가며 알아봅시다.
HTTP Message는 두가지로 나뉩니다.
각 HTTP메시지 형태는 Spec을 따르고 상황에 맞춰 스펙대로 다양하게 보낼 수 있습니다.
보통 GET 메시지 같은경우는 본문을 보낼수도 있지만, 서버에 따라 GET의 본문을 처리하지 않는 경우가 있어서, 대체로 본문을 보내지 않고 처리하는 경우가 대부분입니다.
예시를 통해 알아봅시다.
startLine : GET /search?q=heelo HTTP/1.1
*(header-filed crlf): Host: www.google.com
crlf : 공백
다음으로 HTTP 응답 메세지를 보도록 하겠습니다.
startLine : HTTP/1.1 200 OK
*(header-filed crlf): Content-type:text/html;charset=UTF-8
: Content-Length:3423
crlf : 공백
[Message-Body] : <html><body>...</body></html>
각 내용에 해당하는 디테일한 것들은 차차 알아가보도록 하겠습니다 :)
위의 두예시를 보시면 spec에 적용되서 잘 나타내지는 것을 볼 수 있습니다.
Message-body부분도 스팩 내용에 맞게 없어도, 있어도 됩니다.
(스팩정리된 기호의 의미를 보면 이것이 스펙에 맞게 작성된 HTTP 메세지라는것을 알 수 있습니다.)
간단한 예시를 봤으니 각 Spec에 디테일한 내용들도 알아보도록 하겠습니다.
start-line에 대해 알아보겠습니다. (말 그대로 HTTP 메세지의 시작을 나타냅니다)
strat-line 은 request-line(요청시)/status-line(응답시) 두가지로 구성됩니다.
정해진 형식 : method(공백)request-target(공백)HTTP-versoin(엔터)
위의 요청메시지 예시를 다시 가져와 확인해보겠습니다.
GET /search?q=heelo HTTP/1.1
(method)(공백)(requset-target)(공백)(HTTP-version)(CRLF)
스팩과 동일하다는 것을 알 수 있습니다.
정해진 형식: HTTP-version(공백)status-code(공백)reason-phrase(CRLF)
위의 응답 메시지 예시를 다시 가져와 확인해보겠습니다.
HTTP/1.1 200 OK
(HTTP-version)(공백)(status-code)(공백)(reason-pharse)(CRLF)
동일한 것을 확인할 수 있습니다.
다음으로 헤더를 알아보겠습니다.
HTTP 전송에 필요한 모든 부가정보를 담고 있습니다.
표준헤더가 굉장히 많으니.. 사용하는거 위주로 추후에 따로 설명하는 글을 작성하도록 하겠습니다.
header-field = field-name":"OWS filed-value OWS
(OWS는 띄어쓰기 허용의 의미를 갖는다. field-name 뒤에는 띄어쓰기 x 주의!)
실제 전송할 데이터
HTML 문서, 이미지, 영상 JSON 등등 byte로 표현할 수 있는 모든 데이터 전송가능...
(사실상 다 가능하다고 생각할 수 있겠다. 컴퓨터의 최소 저장단위는 byte잖아..?)
앞으로 정리할 내용들은 다음과 같습니다.
4 PUT,PATCH 차이 활용법
5 HTTP Post Method 컬렉션 방식, 스토어 방식
6 HTTP 상태코드 정리
7 HTTP 헤더별 정리
8 쿠기 개념 간단정리
이어서 또 정리하도록 하겠습니다.
감사합니다 :)