HTTP [네트워크/기초2]

전예훈·2023년 3월 30일
0

HTTP

HTTP는 HyperText Transfer Protocol의 줄임말로, HTML과 같은 문서를 전송하기 위한 프로토콜입니다. HTTP는 웹 브라우저와 웹 서버의 소통을 위해 디자인되었습니다. 전통적인 클라이언트-서버 모델에서 클라이언트가 HTTP Messages 양식에 맞춰 요청을 보내면, 서버도 HTTP Messages 양식에 맞춰 응답합니다.

  • GET
    GET 메서드는 특정 리소스의 표시를 요청. GET을 사용하는 요청은 오직 데이터를 받기만 한다.

  • HEAD
    HEAD 메서드는 GET 메서드의 요청과 동일한 응답을 요구하지만, 응답 본문(body)을 포함하지 않는다.

  • POST
    POST 메서드는 특정 리소스에 엔티티를 제출할 때 쓰인다. 이는 종종 서버의 상태의 변화나 부작용을 일으킬수있다.

  • PUT
    PUT 메서드는 목적 리소스 모든 현재 표시를 요청 payload로 바꾼다.

  • DELETE
    DELETE 메서드는 특정 리소스를 삭제.

  • CONNECT
    CONNECT 메서드는 목적 리소스로 식별되는 서버로의 터널을 맺는다.

  • OPTIONS
    OPTIONS 메서드는 목적 리소스의 통신을 설정하는 데 쓰인다.

  • PATCH
    PATCH 메서드는 리소스의 부분만을 수정하는 데 쓰인다.


HTTP Messages

HTTP 메세지에서는 클라이언트와 서버 사이에서 데이터가 교환되는 방식입니다.

HTTP 두가지 유형이 존재합니다.

  • 요청(Request)
  • 응답(Responses)

start line : start line에는 요청이나 응답의 상태를 나타냅니다. 항상 첫 번째 줄에 위치합니다. 응답에서는 status line이라고 부릅니다.

HTTP headers : 요청을 지정하거나, 메시지에 포함된 본문을 설명하는 헤더의 집합입니다.

empty line : 헤더와 본문을 구분하는 빈 줄이 있습니다.

body : 요청과 관련된 데이터나 응답과 관련된 데이터 또는 문서를 포함합니다. 요청과 응답의 유형에 따라 선택적으로 사용합니다.

Stateless

statless는 말 그대로 상태를 가지지 않는 것을 뜻합니다.
HTTP로 클라이언트와 서버가 통신을 주고 받는 과정에서 HTTP가 클라이언트나 서버의 상태를 확인 하지 않습니다.

클라이언트에서 발생한 모든 상태를 HTTP 통신이 추적하지 않는다는 특징이 있습니다.


HTTP 요청

시작줄

HTTP 메서드 URL, 또는 프로토콜, 포트, 도메인의 절대 경로(슬래쉬는 전체페이지를 가리킨다) HTTP 버전
HTTP 메서드 URL, 또는 프로토콜, 도메인의 절대 경로(슬래쉬는 전체페이지를 가리킨다) HTTP 버전

헤더

  • General headers : 메시지 전체에 적용되는 헤더로, body를 통해 전송되는 데이터와는 관련이 없는 헤더입니다.

  • Request headers : fetch를 통해 가져올 리소스나 클라이언트 자체에 대한 자세한 정보를 포함하는 헤더를 의미합니다. User-Agent, Accept-Type, Accept-Language와 같은 헤더는 요청을 보다 구체화합니다.

  • Referer처럼 컨텍스트를 제공하거나 If-None과 같이 조건에 따라 제약을 추가할 수 있습니다.

  • Representation headers : 이전에는 Entity headers로 불렀으며, body에 담긴 리소스의 정보(콘텐츠 길이, MIME 타입 등)를 포함하는 헤더입니다.

바디

모든 요청에 본문이 들어가지는 않습니다. GET, HEAD, DELETE,OPTIONS처럼 리소스를 가져오는 요청은 보통 본문이 필요가 없고 일부 요청은 업데이트를 하기 위해 서버에 데이터를 전송. 보통 (HTML 폼 데이터를 포함하는) POST 요청일 경우에 사용됩니다.


HTTP 응답

상태줄

프로토콜 버전 상태코드(200, 302, 404)상태텍스트(상태코드에 대한설명)

Status line의 한 예시로 HTTP/1.1 404 Not Found가 있습니다

헤더

  • General headers : 메시지 전체에 적용되는 헤더로, body를 통해 전송되는 데이터와는 관련이 없는 헤더입니다.

  • Response headers : 위치 또는 서버 자체에 대한 정보(이름, 버전 등)와 같이 응답에 대한 부가적인 정보를 갖는 헤더로, Vary, Accept-Ranges와 같이 상태 줄에 넣기에는 공간이 부족했던 추가 정보를 제공합니다.

  • Representation headers : 이전에는 Entity headers로 불렀으며, body에 담긴 리소스의 정보(콘텐츠 길이, MIME 타입 등)를 포함하는 헤더입니다.

바디

응답의 본문은 HTTP messages 구조의 마지막에 위치합니다. 모든 응답에 body가 필요하지는 않습니다. 201, 204와 같은 상태 코드를 가지는 응답에는 본문이 필요하지 않습니다. 응답의 body는 다음과 같이 두 종류로 나눌 수 있습니다.

  • Single-resource bodies(단일-리소스 본문) :

  • 길이가 알려진 단일-리소스 본문은 두 개의 헤더(Content-Type, Content-Length)로 정의합니다.

  • 길이를 모르는 단일 파일로 구성된 단일-리소스 본문은 Transfer-Encoding이 chunked 로 설정되어 있으며, 파일은 chunk로 나뉘어 인코딩되어 있습니다.

  • Multiple-resource bodies(다중-리소스 본문) : 서로 다른 정보를 담고 있는 body입니다.


HTTP 상태 코드

이런식으로 외우면 눈에 잘 들어옴!

1xx : 잠깐만 기다려봐
2xx : 자,여기있어
3xx : 저리 가(반복된 요청)
4xx : 너(클라이언트)가 망침
5xx : 내(서버)가 망침

profile
더욱더 QA스럽게!

0개의 댓글