안녕하세요.

오늘은 웹 통신에 사용되는 프로토콜인 HTTP에 대해서 알아보겠습니다.

 


HTTP이란, ( = Hyper Text Transfer Protocol )

1. 웹에서 데이터를 주고받기 위해 사용되는 프로토콜입니다.

2. 상태가 없는 스테이트리스(Stateless) 프로토콜입니다.

3. TCP/IP 프로토콜 위에서 동작하며 80번 포트를 사용합니다.

- 여기서 TCP/IP 프로토콜이란, 인터넷에서 사용되는 표준 프로토콜입니다. 서로 다른 시스템을 가진 기기들을 연결하여 데이터를 전송하기 위해 사용됩니다.

 

 

[ HTTP Request와 Response ]

출처: https://joshua1988.github.io/web-development/http-part1/

Client가 Server로 데이터를 요청하는 것을 HTTP Request

Server가 Client로부터 받은 요청에 따라 이에 대한 응답을  HTTP Response라고 합니다.

요청을 보내는 쪽을 Client, 요청을 받고 이에 대한 응답(데이터)를 반환하는 쪽을 서버라고 합니다.

 

 

[ HTTP의 구조 ] 

HTTP Request의 구조는 크게 3부분으로 구성됩니다.

  • Start line
  • Headers
  • Body

아래 명령어를 통해 HTTP 요청을 보내보았을 때, 다음과 같은 HTTP Request와 Response를 확인할 수 있었습니다.

curl -v http://localhost:8000/test

> GET /test?a=1 HTTP/1.1
> Host: localhost:8000
> User-Agent: curl/7.55.1
> Accept: */*
>

 

여기서 아래 부분을 HTTP Request의 startline이라고 합니다.

> GET /test?a=1 HTTP/1.1

Startline은 HTTP Method + Request Target + HTTP Version 으로 이루어져있습니다.

 

HTTP Method란,

해당 Request의 자원에 대한 행위를 정의하며 종류로는 GET, POST, PUT, DELETE 등이 있습니다.

예를 들어 GET은 자원을 얻는 것, POST는 등록을 목적으로 사용합니다.

 

Request Target이란,

해당 Request의 목표 URI를 의미합니다. 여기서 URI란 인터넷의 자원을 칭하는 통합 고유 자원 식별자를 말합니다.

 

 

그리고 아래 부분을 HTTP Request Headers라고 합니다.

> Host: localhost:8000
> User-Agent: curl/7.55.1
> Accept: */*

Header는 Request에 대한 추가 정보를 담고있습니다. 자주 사용되는 header의 정보는 다음과 같습니다.

 

Host: 요청이 전송되는 Target의 Host URL을 말합니다.

User-Agent: 요청을 보낸 클라이언트의 정보를 말합니다.

Accept: 해당 타입의 Response를 보내달라고 요청합니다.

Content-Type: Request의 body 타입을 말합니다.

Content-Length: 메세지 Body의 길이를 말합니다.

Authorization: JWT 같은 인증 토큰을 서버로 보낼 때 사용하는 헤더입니다.

 

그리고 지금은 비어있지만, 해당 Request의 내용이 위치하는 Body가 있습니다.

 

 

아래는 HTTP Response의 구조입니다.

< HTTP/1.1 200
< Vary: Origin
< Vary: Access-Control-Request-Method
< Vary: Access-Control-Request-Headers
< X-Content-Type-Options: nosniff
< X-XSS-Protection: 1; mode=block
< Cache-Control: no-cache, no-store, max-age=0, must-revalidate
< Pragma: no-cache
< Expires: 0
< Content-Type: text/plain;charset=UTF-8
< Content-Length: 9
< Date: Sun, 05 Sep 2021 07:26:31 GMT
<
HTTP test* Connection #0 to host localhost left intact

구조는 거의 동일하지만, 정보가 조금씩 다릅니다.

 

# StartLine

HTTP Version + Status Code + Status Text 로 이루어져있습니다.

Status Code: 응답 코드로, 200은 성공을 의미합니다.

Status Text: 응답 코드에 대한 메세지로, 200이면 OK가 담겨있습니다.

 

# Header

Date: 응답 일시

Content-type: 응답 데이터의 타입

 


 

HTTP에 대해서, 그리고 구조에 대해서 알아보았습니다.

 

참조:

https://programmer93.tistory.com/60

'IT 지식' 카테고리의 다른 글

REST, REST API란?  (0) 2021.09.08
[MicroService] Eureka Server  (0) 2021.08.29
[MicroService] MSA란? Micro Service Architecture  (1) 2021.08.28

+ Recent posts