네트워크 - HTTP

이정인·2022년 2월 7일
0
<기초부터 완성까지 프론트엔드>를 읽고 정리한 내용입니다.

HTTP란 HTML과 같은 하이퍼미디어 문서를 전송하기 위한 프로토콜이다.

프로토콜이란 데이터가 전송되는 방식을 결정하는 규약으로 송신자와 수신자 사이의 통신을 위해 서로 이해할 수 있는 규칙을 만든 것이다.

웹에서 이뤄지는 데이터 통신의 기초이며 주로 TCP를 사용한다.

HTTP 통신은 서버와 클라이언트가 연결되어 있지 않기 때문에 그 전에 처리된 요청과 응답이 통신에 영향을 주지 않고 각각 독립적으로 처리가 된다.

장점

  • 서버디자인을 단순히 할 수 있다.
  • 송수신되는 정보 처리를 위한 공간을 동적 할당 할 수 있고 제거하지 않아도 된다.

단점

  • 필요한 정보를 모두 담아 보내야 한다.

클라이언트와 서버로 전송하는 메시지를 요청(request), 이에 대한 답으로 서버에서 클라이언트 측으로 전송하는 메시지를 응답(response)라고 한다.

현재는 보안이 강화된 HTTPS을 주로 사용한다.

상태 코드

HTTP 상태코드는 HTTP 요청이 성공적으로 완료되었는지 알려주는 세 자리 정수이다.

리다이렉트, 클라이언트, 서버의 에러에 관련된 정보를 알 수 있는 다섯개 그룹의 응답을 가진다.

이 응답을 통해 사용자에게 적절한 안내를 할 수 있으며 사이트의 동작을 제어할 수 있다.

1xx (Informaional) : 서버에서 요청을 수신했으며 현재 처리하고 있거나 정보를 알려줄 필요가 없을 경우

2xx (Successful) : 요청이 성공적으로 완료되었음

3xx (Redirection) : 요청을 마치기 위해 추가적인 동작이 필요함

4xx (Client Error): 요청에 잘못된 구문이 포함되어 있거나 수행할 수 없는 경우

  • 400 (Bad Request) : 요청 오류. 잘못된 문법으로 서버가 해당 응답을 이해할 수 없을 때
  • 401 (Unauthorized) : 권한 없음. 요청을 받기 위해서 인증을 받아야 함
  • 403 (Forbidden) : 접근이 금지될 때 반환됨
  • 404 (Not Found) : 서버가 요청 받은 리소스가 없을 때

5xx (Server Error): 서버가 유효한 요청을 수행하지 못했을 때 반환됨

  • 500 (Internal Server Error) : 서버가 처리 방법을 모를 경우
  • 502 (Bad Gateway) : 게이트웨이나 프록시 작업시 잘못된 응답을 수신한 것
  • 503 (Service Unavailable) : 서버가 요청을 처리할 준비가 되지 않은 경우 반환. 서버에 과부하가 걸리거나 배포 도중 서비스가 중단되는 상황

메서드

클라이언트는 요청 메서드를 통해 웹 서버에 전송할 HTTP 요청의 목적, 종류를 나타낼 수 있다. 9가지의 메서드를 목적에 맞춰 사용한다.

HTTP 메서드의 특징

  • safe

    서버의 상태를 변경하지 않는 메서드를 safe 하다고 한다. 서버에 변경 사항을 동반하지 않기 때문에 불필요한 과부하를 주지 않음

  • 멱등성 (Idempotent)

    동일한 요청을 한 번 보낼 때와 여러 번 연속으로 보낼 때 같은 동작을 하고, 서버의 상태 또한 동일할 때 멱등성을 갖는다. 모든 safe한 메서드는 멱등성을 같지만 멱등성을 가지는 모든 메서드가 safe한 것음 아님 (i.g. PUT, DELETE)

    DELETE/delete/1 HTTP 1.1
    => 멱등성 (O) : 요청을 몇 번을 보내던지 해당 데이터가 존재하면 제거한다
    POST / write HTTP 1.1
    => 멱등성 (x) : 요청을 보낼 때마다 새로운 글이 생김
  • Cachable

    응답을 저장해 향후 재사용을 할 수 있는 것

자주 쓰이는 HTTP 6가지 메서드

  • GET

    특정 리소스를 가져올 때 사용

  • POST

    서버에 데이터를 전송할 때 사용, 서버에서 변경이 일어남

  • PUT

    요청 payload를 사용해 새로운 리소스를 생성하거나, 타깃을 payload로 대체함

    PUT 메서드는 POST 메서드와 다르게 멱등성을 갖는다.

  • PATCH

    리소스의 특정 부분을 수정할 때 사용

  • DELETE

    특정 리소스를 제거할 때 사용

  • OPTIONS

    주어진 URL 또는 서버에 대해 허용된 통신 옵션을 확인할 때 사용

    서버에서 지원하는 메서드를 확인하거나 사전 요청을 보내는 용도로 사용함

헤더

HTTP 헤더는 서버와 클라이언트 사이에서 body 외에 추가적인 정보를 교환하는 방식이다.

헤더는 대소문자를 구분하지 않고 이름 : 값 형태로 이뤄져 있으며 헤더에 사용되는 문맥을 기준으로 Entity, General, Request, Response 헤더로 분류된다.

  • Request, Response

    • Request 헤더 : 요청하는 자원이나 클라이언트 측의 정보를 포함

      Accept-* : 클라이언트가 이해할 수 있는 정보

      If-*: 요청에 조건을 부여

      브라우저의 정보를 나타내는 User-Agent나 Cookie가 요청에 포함될 수 있다.

    • Response 헤더 : 서버의 위치나 응답에 대한 부가 정보를 포함

      요청을 처리하는 서버를 나타내는 Server나 리다이렉트 되어야하는 위치를 나타내는 Location 등의 정보를 갖는다.

  • Entity

    본문에 대한 메타 정보 또는 요청으로 식별된 자원에 대한 메타 정보를 포함

    text/html 같이 리소스 타입을 나타내는 Content-Type 등이 포함됨

  • General

    Request, Response 모두에서 사용되며 전송되는 body의 값과 직접적 관련이 없는 정보를 갖는다. i.g. Date, Cache-Control

0개의 댓글