-
서론
rest api -> HTTP 프로토콜 순서로 궁금해져서 찾아본 내용들입니다.
한 번에 다 적기에는 글이 너무 길어져서 포스팅을 나눠서 쓸 예정이므로 몇 내용들이 빠질 수 있습니다.
HTTP
HTTP(HyperText Transfer Protocol)는 HTML 문서와 같은 리소스들을 가져올 수 있도록 해주는 프로토콜입니다.
위와 같이 HTTP는 Application 계층 수준에서 사용되는 많은 프로토콜 중 하나일 뿐입니다.
연결은 전송 계층에(TCP, UDP)서 제어되므로 근본적으로 HTTP 영역 밖입니다.
HTTP 1.0~2.0까지는 TCP, HTTP 3.0부터는 UDP를 쓰고 있는데요, 이에 대한 내용은 다음 포스팅에 다루도록 하겠습니다.
HTTP 작동 방식
HTTP의 작동 방법으로는 하나는 전송할 데이터 소스를 가지고 있고 다른 하나는 데이터를 필요로 하는 소스입니다.
쉽게 말하자면 클라이언트(데이터 요청)와 서버(데이터 전송)로 이루어져 있습니다.
연결 설정
서버에는 IP 주소라고하는 고유한 주소와 수신 요청을 수신하기위한 특정 포트가 있습니다. 서버에 IP 주소와 포트가 식별되면이 특정 서버의 데이터가 필요한 모든 클라이언트와 해당 정보를 공유할 수 있습니다.
클라이언트에 서버의 IP 및 포트가 있으면 클라이언트와 서버간에 연결이 설정됩니다. 따라서 서버와 클라이언트 간의 데이터 교환을 시작할 수 있습니다.
데이터 교환
프로토콜은 클라이언트와 서버가 통신할 때 사용할 수 있는 두가지 키워드가 있습니다.
클라이언트는 Request(요청)을 하고 서버는 요청에 대한 Response(응답)을 합니다.
다음은 mozilla.org사이트에서 가져온 request의 예시입니다.
request의 유형
- method클라이언트가 서버에서 원하는것을 정의하는 것입니다.
예를 들어 GET 요청은 서버에서 데이터를 가져오고 POST 요청은 서버에 데이터를 삽입하거나 보냅니다.
* 참고 : https://en.wikipedia.org/wiki/List_of_HTTP_status_codes
- path
데이터가 필요한 위치를 지정합니다. '/'는 현재 경로가 '/'에 위치한 것입니다. - version
현재 사용 중인 HTTP 프로토콜 버전을 의미합니다. 예시는 HTTP 1.1을 사용하고 있습니다. - headers
서버에 대한 대부분의 중요한 정보와 서로에 대한 기대치가 들어있습니다.
각 헤더에는 서로 다른 유형이 있습니다. 헤더는 키:값 쌍으로 정의됩니다.
다른 유형의 헤더는 Mozilla에서 참조하시면 됩니다. - body
Post 같은 일부 요청에는 body가 있거나 payload라고도 합니다.
예를 들어 POST 필드에 대한 매개 변수 또는 키:값 쌍이 포함된 본문과 함께 요청을 보냅니다.
서버가 이것을 수신(request)하면 프로토콜 서버(response)가 다음과 같은 유형으로 응답할 것으로 예상합니다.
response의 유형
- Status Code
프로토콜에는 각각 고유한 의미를 가진 특정 코드 목록이 있습니다. 예시의 200은 요청이 성공했다는 의미입니다.
다른 상태 코드를 보려면 블로그 HTTP 응답 코드 포스팅에 일부 나와있습니다. - Status message
각 코드에는 코드의 의미에 대한 간략한 설명을 사람이 읽을 수 있는 텍스트가 있습니다. OK는 상태 코드 200을 의미합니다. - version
request의 버전과 동일한 양식으로, 프로토콜 버전을 나타냅니다 - headers
키-값 쌍은 동일합니다. 대부분의 응답은 본문에 있기 때문에 content-length 및 content-type의 헤더 유형은 일반적으로 전송된 데이터의 양과 형식을 각각 표시합니다. - body(선택사항)
body는 response의 가장 중요한 부분 중 하나입니다. 본문에는 클라이언트가 요청한 세부 정보가 포함됩니다.
예를 들어 요청이 GET /users 인 경우 모든 user에 대한 페이로드 또는 본문이 있는 응답을 반환합니다.
마치며
HTTP에 대하여 알아보았으나 그에 대한 몇몇 기술들은 서술하지 않았습니다.
HTTP 카테고리의 다음 포스팅은 HTTP의 진화와 변화를 포스팅하겠습니다.
Reference
https://www.tutorialspoint.com/http/http_overview.htm
https://medium.com/@rrugamba/hypertext-transfer-protocol-http-f7c0665f7695
https://developer.mozilla.org/ko/docs/Web/HTTP/Overview#http_%ED%9D%90%EB%A6%84
- method클라이언트가 서버에서 원하는것을 정의하는 것입니다.