Interaction With Server - HTTP

Verba volant, scripta manent·2021년 2월 6일

HTTP란?

풀네임은 HyperText Transfer Protocol
(원래 Hypertext의 text는 소문자인데 강조를 위해서 일부러 대문자로 썻다.ㅋㅋ).
번역하면 하이퍼텍스트 전송 프로토콜.
HTML과 같은 하이퍼미디어 문서를 교환하기 위해 만들어진 프로토콜이다.
클라이언트가 요청을 생성하기 위한 연결을 연다음 응답을 받을때 까지 대기하는 전통적인 클라이언트-서버 모델을 따른다.
프론트엔드와 백엔드 간의 소통에 필요한 통신규약 이라고 하면 쉬울것같다.

HTTP 특징

  1. 서버와 클라이언트에 의해 해석된다.
  2. TCP/IP를 이용한 응용 프로토콜이다.
  3. 비연결성 프로토콜이며 무상태성인데 아래에서 자세히 설명하겠다.
  4. 기본적으로 클라이언트에서 요청하면 서버가 응답하는 구조로 되어있다.

HTTP 특성

1. 비연결성(connectionless)

연결을 유지하지 않은 채 응답과 요청을 처리하는 특성을 말한다.
요청에 대한 응답을 처리하게 되면 연결을 끊어 버리며, 연결 상태 역시 유지시키지 않는다.

2. 무상태성(stateless)

이전의 정보나 현재 통신의 상태가 남아 있지 않는 특성을 말한다.
특정 상태를 담고 있지 않으며, 이전 요청이나 다음 요청을 기억하지 않음(그냥 1회성 이라고 생각하시면 편할수도 있겠다.)

아래는 Request-Response Cycle 그림이다.

대체적으로 웹페이지는 HTML+CSS+JS 로 구성되어있다.
기존의 http 방법 :
1. 연결 시작
2. index.html 조회요청
3. 2번에 대한 응답
4. style.css 조회요청
5. 4번에 대한 응답
6. scripts.js 조회요청
7. 6번에 대한 응답
8. 클라이언트에 페이지가 render됨
9. 연결 종료

개편된 http 방법 :
1. 연결 시작
2. index.html 조회요청
3. 2번에 대한 응답
4. style.css와 scripts.js에 대한 각각 조회요청
5. 4번에 대한 응답
6. 클라이언트에 페이지가 render됨
7. 연결 종료

절차가 좀 줄어들었음을 알 수 있는 그림이었다.

HTTP 공통구조

시작 줄(Start-line)

실행되어야 할 요청, 또는 요청 수행에 대한 성공 또는 실패가 기록되어 있으며 이 줄은 항상 한 줄로 끝난다.

HTTP 헤더 세트(HTTP headers)

옵션으로 HTTP 헤더 세트가 들어가는데 여기에는 요청에 대한 설명, 혹은 메시지 본문에 대한 설명이 들어간다.

빈 줄(Blank line)

요청에 대한 모든 메타 정보가 전송되었음을 알린다.(head와 body 구분)

본문(Body)

HTTP 메시지의 페이로드

HTTP Request 구조

시작 줄(Start-line)

서버가 특정 동작을 취하게끔 만들기 위해 클라이언트에서 전송하는 메시지

시작 줄을 이루는 3가지 요소

  1. HTTP 메서드
    영어 동사(GET, PUT,POST) 혹은 명사(HEAD, OPTIONS)를 사용해 서버가 수행해야 할 동작을 나타낸다.

  2. 요청 타겟
    주로 URL, 또는 프로토콜, 포트, 도메인의 절대 경로로 나타낼 수도 있으며 이들은 요청 컨텍스트에 의해 특정지어진다.
    요청 타겟 포맷은 HTTP 메소드에 따라 달라지며 포맷에는 아래의 종류가 있다.

origin 형식: 끝에 '?'와 쿼리 문자열이 붙는 절대 경로.
가장 일반적인 형식이며, GET, POST, HEAD, OPTIONS 메서드와 함께 사용한다.
absolute 형식: 완전한 URL 형식이며 프록시에 연결하는 경우 대부분 GET과 함께 사용된다.
authority 형식: 도메인 이름 및 옵션 포트(':'가 앞에 붙음)로 이루어진 URL의 authority component 이다. HTTP 터널을 구축하는 경우에만 CONNECT와 함께 사용할 수 있다.
asterisk 형식: OPTIONS와 함께 별표('*') 하나로 간단하게 서버 전체를 나타낸다.

  1. HTTP 버전
    메시지의 남은 구조를 결정하기 때문에, 응답 메시지에서 써야 할 HTTP 버전을 알려주는 역할을 한다.

헤더(Header)

Request에 대한 추가 정보를 담고 있는 부분으로 대소문자 구분없는 문자열 다음에 콜론(':')이 붙으며(key:value), 그 뒤에 오는 값은 헤더에 따라 달라진다.

자주 사용되는 헤더의 정보

Host : 요청이 전송되는 target의 host url
User-Agent : 요청을 보내는 클라이언트의 대한 정보
Accept : 해당 요청이 받을 수 있는 응답(response) 타입
Connection : 해당 요청이 끝난후에 클라이언트와 서버가 계속해서 네트워크 컨넥션을 유지 할것인지 아니면 끊을것인지에 대해 지시하는 부분
Content-Type : 해당 요청이 보내는 메세지 body의 타입
Content-Length : 메세지 body의 길이

본문(Body)

Request의 실제 메세지 혹은 내용이다.

HTTP Response 구조

상태 줄(Status-line)

Response의 상태를 간략하게 나타낸다.

Status-line의 구성

프로토콜 버전: 보통 HTTP/1.1이다.
상태 코드: 요청의 성공 여부
상태 텍스트: 짧고 간결하게 상태 코드에 대한 설명을 글로 나타낸다.
ex) HTTP/1.1 404 Not Found

헤더(Header)

Response에 대한 추가 정보를 담고 있는 부분으로 대소문자 구분없는 문자열 다음에 콜론(':')이 붙으며(key:value), 그 뒤에 오는 값은 헤더에 따라 달라진다.

Response Header의 종류

General 헤더: Via와 같은 헤더는 메시지 전체에 적용된다.
Response 헤더: VaryAccept-Ranges와 같은 헤더는 상태 줄에 미처 들어가지 못했던 서버에 대한 추가 정보를 제공한다.
Entity 헤더: Content-Length와 같은 헤더는 요청 본문에 적용되며 요청 내에 본문이 없는 경우 entity 헤더는 전송되지 않는다.

본문(Body)

Request에 대한 Response

HTTP Method

메소드 목적
GET 특정 resource를 가져오도록 요청(조회)
POST 데이터를 서버로 제출하는 용도로 사용하며, 서버 상태의 변화를 일으킨다.(추가)
PUT 전체 resource를 업데이트한다.(전체갱신)
PATCH 특정 resource를 업데이트한다.(부분갱신)
DELETE resource의 삭제를 요청할 때 사용(삭제)

HTTP Status Codes

자주 쓰이는 대표적인 상태코드만 정리하겠다.

Code 의미
200 요청 성공
304 요청에 대한 응답이 수정되지 않음(Cache)
403 컨텐츠에 접근할 권한 없음
404 요청받은 리소스를 사용할 수 없음
500 서버가 처리할 수 없는 요청

여기서 400번대는 클라이언트 오류, 500번대는 서버 오류라고 생각하면 된다!

profile
말은 사라지지만 기록은 남는다

0개의 댓글