HTTP(HyperText Transfer Protocol)

yshjft·2022년 1월 2일
0

네트워크

목록 보기
4/18

HTTP (HyperText Transfer Protocol)

웹 상에서 클라이언트와 서버간에 요청과 응답으로 정보를 주고 받을 수 있는 프로토콜

특징

✔︎ 주로 HTML 문서를 주고받는데 사용
✔︎ 주로 TCP를 사용하며 80번 포트를 사용한다.
✔︎ 비연결(connectionless): 클라이언트가 요청을 서버에 보내고 서버가 응답을 클라이언트에게 보내면 연결을 끊어진다.
✔︎ 무상태(stateless): 연결을 끊는 순간 클라이언트와 서버의 통신은 끝나며 상태 정보를 유지하지 않는다.

HTTP 1.0

✔︎ 새로운 HTTP 헤더의 도움으로, 평이한 HTML 파일들 외에 다른 문서들을 전송하는 기능이 추가되었습니다(Content-Type 덕분에).
✔︎ connection 당 하나의 요청만 처리 → 매번 연결을 새로 생성 → 속도 느림

HTTP 1.1

✔︎ 커넥션 유지 가능

  • 필요 없는 경우에만 연결을 종료한다.
  • Connection: keep-alive
  • HTTP 1.1에서는 이를 default로 사용한다.

✔︎ 파이프라이닝

  • 한번 연결에서 여러 요청이 가능하다. → 속도 개선
  • 파이프라이닝 적용 가능
    (Before)

    요청1 → 응답1 → 요청2 → 응답2 …
    요청1에 대한 응답이 되기 전까지 요청2 진행 할 수 없다(비효율적)

    After(파이프라이닝 적용)

    요청1 → 요청2 → 응답1 → 응답2 …
    속도 향상 but 순차적으로 처리해야 함

✔︎ Host 헤더

  • 하나의 IP 주소에 여러 도메인을 적용할 수 있다.

HTTP 2.0

현재 까지는 1.1이 주류지만 점점 HTTP 2.0으로 변경되는 추세

✔︎ 멀티플렉싱(multiplexed streams)

  • HTTP/1.1의 persistent와 pipelining →여러개 요청 처리 가능 but 순차적으로 처리해야함 → HOLB(Head Of Line Blocking)

  • HOLB(Head of Line Blocking)

    • 패킷이 순차적으로 도착해야 하므로, 패킷이 도착할 때 까지 그 이후의 패킷은 전송되지 못한다
    • 선행된 요청이 처리(응답)되지 못하면 이후의 요청 또한 응답되지 못한다.
  • 여러 요청과 응답들을 병렬적으로 보낸다 → 속도 향상

    • 요청1 → 요청2 → 요청3 → 응답2 → 응답3 → 응답1

✔︎ Stream prioritization

응답에 대한 우선 순위를 지정하고 우선순위가 높을 수록 응답을 빨리한다.

✔︎ Server Push

서버가 클라이언트의 요청이 없어도 필요하게될 특정 파일들을 서버에서 단일 HTTP 요청 응답 시 함께 전송할 수 있다.

  • Server push X

    HTML 요청 → 응답 → css 요청→ 응답 → jpg 요청 → 응답 ….

  • Server push O

    HTML 요청 → 응답(HTML, CSS, JPG)

✔︎ HTTP Header Data Compression(HTTP 헤더 데이터 압축)

이전 Header의 내용과 중복되는 필드를 재전송 하지 않도록 하여 데이터를 절약하고 HTTP Header를 문자열 전송 방식에서 HTTP/2에서는 Huffman Coding을 사용하는 HPACK이라는 Header 압축방식을 이용하여 데이터 전송 효율을 높였다.

HTTP 응답 코드 종류

  • 1xx(조건부 응답), 요청을 받았으며 작업을 계속한다.
  • 2xx(성공), 클라이언트가 요청한 동작을 수신하여 이해했고 승낙했으며 성공적으로 처리했음을 가리킨다.
  • 3xx(리다이렉션 완료), 클라이언트는 요청을 마치기 위해 추가 동작을 취해야 한다
  • 4xx(요청 오류), 클라이언트에 오류가 있음을 나타낸다.
  • 5xx(서버 오류), 서버가 유효한 요청을 명백하게 수행하지 못했음을 나타낸다

HTTP 메서드 종류

주요

GET: 리소스 조회
POST: 요청 데이터 처리(주로 데이터 추가)
PUT: 리소스를 수정(update)
PATCH: 리소스를 일부 수정
DELETE: 리소스 삭제

PUT VS PATCH

PUT

  • 자원 전체 교체
  • 새로운 리소스를 생성하거나 이미 존재하는 데이터를 대체하기 위해 사용

PATCH

  • 자원 부분 교체
  • 리소스의 부분적인 수정은 PUT 보다는 PATCH 사용을 권장한다.

멱등성

멱등성이란?

동일한 요청을 여러번 보냈을 때 서버의 상태도 동일하게 남는다.

멱등 메서드

  • GET
    • 조회를 목적으로 하는 만큼 서버의 상태를 변경하지 않도록 해야한다.
    • 게시물 조회시 조회수가 올라가게 된는데 GET을 사용해도 괜찮을까?
      • 게시물 자체에 대한 수정이 아니기 때문에 GET 메서드를 사용해도 괜찮다.
      • 참고
  • PUT
    • 데이터를 덮어쓰는 메서드로서 여러번 요청해도 상태를 변경하지 않는다.
    • 첫번째 PUT 요청과 두번째 PUT 요청은 같은 서버 상태를 가진다.
  • DELETE
    • 리소스를 삭제하는 메서드로서 여러번 요청해도 서버의 상태를 변경시키지 않는다.
    • 첫번째 DELETE 요청과 두번째 DELETE 요청은 같은 서버 상태를 가진다.

비멱등 메서드

  • POST

    • 새로운 자원을 생성하는 메서드로서 같은 요청을 여러번 보내는 경우 매번 새로운 자원이 생성될 수 있다.
  • PATCH

    • 리소스를 부분 수정하는 메서드로서 구현 방법에 제한이 없다.

      • 수정할 데이터를 보내주는 것이 아니라 행위를 명시하여 수정할 수 있다.

        기존 리소스 {id : 1, count : 1}
        
        PATCH /users/1 {type : increase}
        
        수정된 리소스 {id : 1, count : 2}

        이러한 PATCH 메서드의 경우 같은 요청일지라도 매번 서버의 상태를 변경하게 된다.

추가 자료

HTTP Method의 멱등성

기타

✔︎ HEAD
GET과 동일하지만 서버에서 Body를 return 하지 않는다.

  • Resource를 받지 않고 오직 찾기만 원할 때
  • object가 존재할 경우 응답의 상태 코드를 확인할 때
  • 서버의 응답 헤더를 봄으로써 resource가 수정 되었는지 확인

✔︎ OPTIONS
웹서버에서 지원되는 메소드의 종류를 확인할 경우 사용.

✔︎ CONNECT
Client가 Proxy를 통해서 Server와 SSL통신을 하고자 할 때 사용된다.

✔︎ TRACE
대상 리소스에 대한 경로를 따라 메시지 루프백 테스트를 수행

  • 요청 리소스가 수신되는 경로를 보여줌
  • 루프백 테스트는 다른 시스템에 실제로 링크하지 않고 통신 링크를 테스트할 수 있는 기술

참고

profile
꾸준히 나아가자 🐢

0개의 댓글