HTTP 웹 기본 지식 - HTTP 메시지
HTTP 메시지
HTTP는 거의 모든 형태의 데이터를 전송 할 수 있다는 것을 다시한번 이해하자.
서버간에 데이터를 주고 받을 때도 대부분 HTTP를 사용한다.
HTTP는 요청 메시지와 응답 메시지의 구조가 약간 다르다.
HTTP 메시지의 구조는 위 그림과 같다.
시작 라인 이라는 것이 있다.
그다음 헤더가 있다.
그다음 공백 라인이 있다. 공백은 무조건 있어야 한다.
그리고 마지막으로 메시지 바디가 들어간다.
먼저 HTTP 요청 메시지를 살펴보자.
GET/search?q=hello&hl=ko HTTP/1.1 이 부분이 요청메시지의 시작라인이다.
그다음에 헤더가 들어간다.
그다음에 만약에 내가 전송할 데이터가 없어서 메시지 바디가 없으면,
공백라인만 넣고 끝내면 된다.
메시지 바디가 있으면 body본문을 넣으면 된다.
이것이 HTTP 요청메시지이다.
HTTP 요청 메시지와 HTTP 응답 메시지는 시작라인만 다르다.
HTTP 응답 메시지를 살펴보면,
처음에 시작라인에 HTTP버전이 나오고, 요청한클라이언트가 200OK이런식으로 작성을 한다.
그다음에 헤더값이 들어간다.
그다음에 무조건 공백라인이 하나 오고,
필요한 HTML응답 메시지가 메시지바디에 들어가게 된다.
HTTP rfc7230스펙이다.
start-line 그리고 여러개의 헤더필드들, 그리고 공백라인, 그리고 메시지바디가 올수도 있고 안올수도 있다 라고 되어있다.
시작라인을 자세히 알아보자.
시작라인은 크게 request-line과 status-line으로 되어있다.
요청메시지는 request-line이라고 한다.
request-line은 제일 처음에는 GET,POST같은 HTTP메서드를 넣고,
request-target에 path가 들어간다. 아마도 요청하는 대상이 될 것이다.
그다음에 HTTP-version이 들어간다.
HTTP메서드에는 GET, POST, PUT, DELETE 등이 있는데,
이것은 서버가 수행해야할 동작을 지정하는 메서드들이다.
GET은 서버에게 해당 리소스를 조회해줘 라는 동작을 지정하고,
POST는 이 리소스의 데이터를 내가 줄테니까 너가 처리해줘 라는 동작을 지정하는 것이다.
요청 대상이 있다.
보통 absolute_path라고 하는 절대 경로로 시작을 한다.
절대경로에 쿼리를 합쳐서 들어간다.
그리고 요청메시지의 마지막은 HTTP버전이 들어간다.
이번에는 응답메시지를 살펴보자.
응답 메시지는 start-line이 statue-line이다.
status-line은 처음에 HTTP버전이 들어가고,
한칸띄우고 status-code가 들어간다. 상태코드라고해서, 클라이언트가 보낸 요청이 성공했는지 실패했는지를 나타낸다.
(보통 200은 성공이고, 400은 클라이언트가 잘못보냇어라는 뜻이고, 500은 서버에 장애가 있거나 문제가 있어서 서버내부에 오류가 있다는 뜻이다.
마지막에 OK는 200이라고 나타내면 사람이 알아보기 힘들수도 있기 때문에 상태코드를 나타내는 사람이 읽을 수 있는 짧은 글이라고 이해하면 된다.
이번에는 HTTP 헤더다.
header-filed는 filed-name과 ":"가 들어가고, 띄어쓰기를 허용하고, field-value가 들어간다.
그래서 HOST: 한칸띄우고 www.google.com이 들어갔다.
그런데 HOST :는 안되는 것이다.
참고로 filed-name은 대소문자를 구분하지 않는다.
하지만 당연히 value는 대소문자를 구분한다.
HTTP 헤더의 용도는 뭐냐면, HTTP 전소엥 필요한 모든 부가정보가 들어있다.
예를 들어서 메시지바디가 html이야, xml이야 라는 설명도 들어가있고, 메시지 바디의 크기 라든가, 압축이 되어있어 안됐어, 인증정보 라든가 요청 클라이언트의 웹부라우져 정보도 들어있다.
응답에서는 서버 애플리케이션이 뭐야 라는 정보도 들어있고, 캐시에 대한 정보도 들어있다.
그래서 이렇게 이해하면 된다.
HTTP 헤더에는 메시지 바디를 제외하고, 필요한 메타정보가 다 들어가 있다.
표준헤더가 너무 많고,
필요시 임의의 헤더도 추가할 수 있다. 물론 임의의 헤더를 추가하면, 약속한 서버와 클라이언트만 이해를 할 것이다.
공백라인 이후에 메시지 바디가 들어간다.
메시지 바디에는 실제 전송할 데이터가 들어있다.
byte로 표현할 수 있는 모든 데이터를 전송할 수 있다.
HTTP는 단순하다. HTTP 메시지도 매우 단순하다.
크게 성공하는 표준 기술은 단순하지만 확장 가능한 기술이다!!
HTTP 를 정리해보면,
HTTP 메시지에 모든 것을 전송한다.
HTTP/1.1을 기준으로 학습하면 된다.
HTTP는 클라이언트 서버 구조이다.
HTTP는 무상태 프로토콜 ( Stateless)를 지향한다.
HTTP 메시지 (시작라인, 헤더, 공백, 바디)
HTTP는 단순하고, 확장가능하다.
지금은 HTTP의 시대이다.
'HTTP' 카테고리의 다른 글
HTTP 웹 기본 지식 - HTTP 메서드 - GET, POST (0) | 2022.06.16 |
---|---|
HTTP 웹 기본 지식 - HTTP API를 만들어 보자 (0) | 2022.06.16 |
HTTP 웹 기본 지식 - 비 연결성 (connectionless) (0) | 2022.06.15 |
HTTP 웹 기본 지식 - Stateful, Stateless (0) | 2022.06.15 |
HTTP 웹 기본 지식 - 클라이언트 서버 구조 (0) | 2022.06.15 |
댓글
이 글 공유하기
다른 글
-
HTTP 웹 기본 지식 - HTTP 메서드 - GET, POST
HTTP 웹 기본 지식 - HTTP 메서드 - GET, POST
2022.06.16 -
HTTP 웹 기본 지식 - HTTP API를 만들어 보자
HTTP 웹 기본 지식 - HTTP API를 만들어 보자
2022.06.16 -
HTTP 웹 기본 지식 - 비 연결성 (connectionless)
HTTP 웹 기본 지식 - 비 연결성 (connectionless)
2022.06.15 -
HTTP 웹 기본 지식 - Stateful, Stateless
HTTP 웹 기본 지식 - Stateful, Stateless
2022.06.15