이 글은 HTTP를 참고하여 작성된 글입니다.
🤝 HTTP (Hyper Text Transfer Protocol)
클라이언트와 서버가 콘텐츠(주로, html 문서)를 주고받기 위해서 사용하는 공통의 약속이다. HTTP는 주로 평문 텍스트로 데이터를 주고받기 때문에 서버와 클라이언트가 주고받는 메시지의 보안이 매우 취약하다는 단점이 있다.
🤔 HTTP의 대표적인 특징은 무엇이 있을까?
👋 비연결 지향
클라이언트가 서버에게 자원을 요청한 후, 응답을 받게 되면 연결을 끊어버린다. 이는, 많은 클라이언트와 연결이 지속되면 서버에 부하가 발생할 수 있는 문제를 예방하기 위해서이다. 하지만, 요청할 때마다 연결해야 하는 비용이 발생한다는 단점이 있다.
HTTP 1.1 버전부터는 지속적인 연결 속성인 Connection : keep-alive 이 기본값으로 요청 해더에 포함되어 있으며, 이를 해제하기 위해서 명시적으로 요청 해더를 수정해야 한다.
💁♂️ 무상태성
각각의 요청을 독립적으로 여겨지는 특징이다. 즉, 서버는 클라이언트의 상태를 유지하지 않기 때문에 서버의 자원은 클라이언트의 상태에 맞게 응답하는 것이 불가능하다. 이는, 로그인 유지, 개인 쇼핑 카트 등에 관한 클라이언트의 상태에 관여하지 않고 자원을 제공하는 것과 같다. 이러한 문제는 쿠키나 세션이 담당한다.
🙋♂️ HTTP의 메서드는 어떤 것이 있을까?
우선 HTTP의 메서드란, 클라이언트가 서버에게 요청하는 방법을 정의한 것으로, 주워진 자원에 일어나기를 바라는 행위를 나타낸다.
GET, 서버의 자원을 조회하고 싶어 (READ)
클라이언트가 서버의 자원을 조회하는 요청이다. 여기서 서버의 값이나 상태의 변경이 일어나지 않는다.
POST, 서버의 자원을 추가하고 싶어 (CREATE)
클라이언트가 추가하고자 하는 데이터를 요청 본문(body)에 추가하고, 서버로 요청하여 서버의 자원을 추가하는 요청이다. 여기서 서버의 값이나 상태의 변경이 일어난다.
PUT, 서버의 자원을 수정하고 싶어 (UPDATE)
클라이언트가 수정하고자 하는 데이터를 요청 본문(body)에 추가하고, 서버로 요청하여 서버의 자원을 수정하는 요청이다. 여기서 요청 본문(body)에는 서버가 가지고 있는 자원의 모든 필드에 대한 데이터가 존재해야 한다.
예를 들어, 서버의 자원이 name과 age로 구성되어 있다면, 요청 본문(body)에는 모든 필드의 정보 즉, name과 age의 값이 포함되어 있어야 한다. 만약, age의 정보만 요청 본문(body)에 포함되어 있다면, name은 null 값으로 처리된다.
DELETE, 서버의 자원을 삭제하고 싶어 (DELETE)
서버의 자원을 삭제하는 요청이다.
PATCH, 서버의 자원을 수정하고 싶어 (UPDATE)
PUT과 같이 서버의 자원을 수정하는 요청이다. 하지만, PUT과 달리, 요청 본문(body)에는 변경하고자 하는 일부분의 필드만 포함되어 있어도 문제없이 동작한다.
예를 들어, 서버의 자원이 name과 age로 구성되어 있고, 요청 본문(body)에는 age의 값만을 포함하고 있다면, name은 유지되고 요청 본문(body)에 포함되어 있는 age만을 수정한다.
🧐 HTTP 해더에는 어떤 정보들이 들어 있을까?
👉 요청 해더
아래 사진은 요청 해더의 예시이다.
🔎 Request Line
요청 해더의 첫째 줄은 요청행(Request Header)이라 부르며, HTTP 메서드, URL, HTTP 버전이 포함되어 있다.
🔎 Request Headers
요청 해더들(Request Headers)에는 요청의 자세한 속성들이 포함되어 있다.
주요 속성들에 대해 알아보자. (위의 요청 해더는 예시로 주요한 속성이 포함되어 있지 않을 수 있습니다.)
Host
서버의 도메인 이름과 TCP 포트번호를 명시한다.
Content-Type
POST, PUT 메서드를 사용할 때 요청 본문(body)을 통해 전달할 데이터의 타입을 명시한다.
If-Modified-Since
명시되어 있는 날짜 이후에 갱신된 자원만을 획득하겠다 명시한다.
Accept-Encoding
서버에 요청한 데이터양이 많다면 압축해서 받는 것이 가능하고 클라이언트에서 사용 가능한 압축방식을 명시한다.
Origin
요청이 어느 도메인에서 왔는 지를 명시한다.
Cookie
서버의 set-cookie로 설정된 쿠키 값을 명시한다.
👈 응답 해더
아래 사진은 응답 해더의 예시이다.
🔎 Status Line
응답 해더의 첫째 줄은 상태를 표현하는 줄이며, HTTP 버전, 상태 코드, 상태 코드에 대한 간단한 설명이 포함되어 있다.
상태 코드에 대한 정보는 이 곳을 참고하길 바란다.
🔎 Response Headers
응답 해더들(Response Headers)에는 응답의 자세한 속성들이 포함되어 있다.
주요 속성들에 대해 알아보자. (위의 응답 해더는 예시로 주요한 속성이 포함되어 있지 않을 수 있습니다.)
Access-Control-*
CORS( Cross-Origin-Resource-Sharing )를 허용하기 위한 웹사이트를 명시한다.
Set-Cookie
클라이언트에 전달하고자 하는 쿠키들을 명시한다.
Last-Modified
마지막으로 자원이 변경된 시각을 명시한다.
Location
응답 코드가 3xx 일 때, 리다이렉션 되는 주소를 명시한다.
Allow
요청한 자원에 대해 가능한 HTTP 메서드를 명시한다.
'네트워크' 카테고리의 다른 글
[네트워크] 브라우저 주소창에 URL 입력시 일어나는 일들 (0) | 2020.08.30 |
---|---|
[네트워크] 쿠키와 세션에 대해 알아보자. (0) | 2020.08.29 |
[네트워크] URI, URL, URN 그 차이를 알아보자. (0) | 2020.08.29 |
[네트워크] REST API란 무엇인가? (0) | 2020.08.29 |
[네트워크] HTTPS란 무엇인가? (0) | 2020.08.28 |