HTTP(Hypertext Transfer Protocol)
웹 브라우저와 웹 서버 간 서로 통신하기 위한 규약이다.
- 서버와 클라이언트가 인터넷상에서 데이터를 주고받기 위한 프로토콜(Protocol)을 뜻한다.
- HTTP는 계속 발전하여 HTTP/2 까지 등장한 상태
- 어떤 종류의 데이터도 전송할 수 있도록 설계되어있다.
HTTP 통신과정
HTTP는 서버/클라이언트 모델을 따른다.
- 클라이언트(client) -> 요청(request) -> 서버(server) -> 응답(response) -> 클라이언트
- 비연결 지향(Connectionless): 클라이언트가 요청을 서버에 보내고, 서버가 요총에 맞는 응답을 보내면 바로 연결을 끊는다.
- 무상태(Stateless) : 연결을 끊는 순간 클라이언트와 서버의 통신은 끝나며 상태 정보를 유지하지 않는다.
HTTP 메세지
HTTP메세지는 서버와 클라이언트 간에 데이터가 교환되는 방식이다. 메세지의 타입은 두가지가 존재하는데 요청(Request)과 응답(response)있다.
Requset : 클라이언트가 서버로 전달해서 서버의 액션이 일어나게 끔 하는 메세지
Response : 요청에 대한 서버의 답변(응답)
HTTP 요청
HTTP 요청은 서버가 특정 동작을 취하게끔 만들기 위해 클라이언트에서 전송하는 메세지이다. HTTP 메세지의 시작 줄과 HTTP 헤더를 묶어서 요청 헤드(head)라고 부르며, 반대로 HTTP 메세지의 페이로드(Payload)는 본문(body)이라고한다.
메소드
메소드 | 설명 | 본문 존재 |
GET | 서버에서 어떤 리소스를 가져온다. | 없음 |
HEAD | 서버에서 어떤 리소스에 대한 헤더만 가져온다. | 없음 |
POST | 서버가 처리해야 할 데이터를 보낸다. | 있음 |
PUT | 서버에 요청 메시지 본문을 저장한다. | 있음 |
TRACE | 메시지가 프록시를 거쳐 서버에 도달하는 과정을 추적한다. | 없음 |
OPTIONS | 서버가 어떤 메서드를 수행할 수 있는지 확인한다. | 없음 |
DELETE | 서버에서 리소스를 제거한다. | 없음 |
HTTP 요청(Requset) 메세지
HTTP Request = Request Headers + Empty line + request Body 구조로 되어있다.
그룹
Request 헤더: User-Agent, Accept-Type와 같은 헤더는 요청의 내용을 조금더 구체화시키고, 조건에 따른 제약사항을 가르키기도 하고, 요청의 내용을 수정한다.
General 헤더: Via와 같은 헤더는 메세지 전체에 적용된다.
Entity 헤더: Content-Length 와 같은 헤더는 요청 본문에 적용된다. 요청내에 본문이 없는 경우 entity 헤더는 전송되지 않는다.
구조
Request-line : 요청 방법(Method: POST, GET...) + 요청 URI(보통 경로(/)), HTTP 버전(Version)
//예시
GET / HTTP/1.1
Request-header : 일련의 요청 헤더 행(header line)으로 구성
Host : www.google.com //요청 받는 페이지가 존재하는 호스트 이름
User-Agent : Mozilla/5.0 // 넷 스케이프 브라우저
Blank-line : 요청 메세지 헤더의 끝을 의미
HTTP-Body: HTTP의 본체이며, POST메소드가 아니면, 항상 비워둔다.
HTTP 응답(Response) 메세지 구조
Respons-line: HTTP 버전 + 요청 성공 여부에 대한 코드
(ex, 1xx: 처리중, 2xx: 성공, 3xx: 리다이렉션, 4xx 클라이언트 오류, 5xx: 서버오류)
HTTP/1.1 200 OK // HTTP 버전이 1.1이고 상태 코드 요청이 성공(200 ok)
HTTP Response Header: 일련의 응답 헤더 행(header line)들로 구성
Connection: Keep-Alive
Content-Length: 6330
Content-Type: text/html
Date: Set, 02 Feb 2021 17:28:30 GMT
Keep-Alive: timeout=5, max=100
HTTP Body: HTTP 몸체
HTTP 상태코드
100-199 정보
200- 299 성공
300-399 리다이렉션
400-499 클라이언트에러
500-599 서버 에러
'FE BE 개발 메모장 > Client Server Architecture' 카테고리의 다른 글
쿠키(Cookie) (0) | 2021.03.05 |
---|---|
HTTPS (0) | 2021.03.04 |
REST API에 대해 이해하기 (0) | 2021.02.05 |
교차 출처 리소스 공유(CORS) (0) | 2021.02.05 |
클라이언트 서버 통신과 HTTP API (0) | 2021.02.03 |