HTTP

한상우·2023년 6월 15일
0

cs

목록 보기
6/8

HTTP 헤더


  • 콜론(:) 으로 서로 구분되는 key-value 형태로 설정된다.
  • 일반헤더, 요청헤더(클라이언트에서 설정되는 헤더), 응답헤더(서버에서 설정되는 헤더)가 자동으로 생성된다.
  • 일반헤더: 요청한 URL, 메서드, Referrer Policy(자원을 요청할 때 해당 자원의 출처를 나타내는 URL을 남길지 여부)
  • 요청헤더: 클라이언트가 서버에 요청할 때 클라이언트가 설정하는 또는 자동으로 설정되는 헤더
  • 응답헤더: 서버가 클라이언트에 응답할 때 서버가 설정하는 또는 자동으로 설정되는 헤더, 일반적으로는 보안상의 이유때문에 서버의 정보를 숨김

HTTP 1.0 / HTTP 1.1

HTTP 1.0

  • 한 연결당 하나의 요청을 처리하도록 설계 (TCP 세션을 유지하지 않음)
  • 매번 데이터를 요청하고 수신할 때마다 TCP 세션을 맺어야 하기에 RTT가 늘어난다.
    - RTT: 데이터가 두 장치 사이를 왕복하는데 걸린 시간

HTTP 1.1

  • keep-alive default : 매 데이터 요청마다 TCP연결이 아닌, 한번 연결하고 계속해서 데이터를 받을 수 있게 함

  • host header : 가상 호스팅을 통해 하나의 IP주소에 여러 도메인을 운영할 수 있다.

  • pipelining : HTTP 1.0은 1번 요청을 보내고 1번 요청을 받아야 2번을 보내는 식으로 동작했지만, HTTP 1.1은 여러 요청을 동시에 보낼 수 있다.
    -go-back-n
    -selective repeat

  • 대역폭 최적화 : 파일이 중간에 끊기면 다운로드 재개를 할 수 있음

HOL

  • HTTP 1.1 은 HOL과 무거운 헤더를 가진 문제점이 있다.
  • HOL: 네트워크에서 같은 큐에 있는 패킷이 첫 번째 패킷에 의해 지연될 때 발생하는 성능저하현상

HTTP 2.0 / HTTP 3.0


HTTP 2.0

  • 멀티플렉싱 : 여러 스트림에서 여러 HTTP 요청과 응답을 비동기적으로 보냄으로써 HOL 해결
    - 리소스를 작은 프레임으로 나누면서 스트림ID와 크기를 나타내는 프레임이 추가되어 응답 데이터가 올바른 순서로 재조립 될 수 있다

  • 헤더 압축 : 중복 헤더 프레임을 압축해 전송한다. 클라이언트와 서버에서 모두 이전 요청에 사용된 헤더 목록을 유지관리하기에, 중복되는 헤더는 제외하고 중복되지 않은 헤더값은 압축 전송한다.

  • 바이너리 포맷 계층 : 텍스트 메시지로 전송하던 HTTP 1.1과 다르게 바이너리를 사용함
    - 데이터 파싱이 빠르고, 작은 정보 패킷으로 인해 데이터 전송의 유연성을 높임

  • 서버 푸쉬 : 서버가 리소스를 클라이언트에 푸시할 수 있다. 향후 요청에서 예상되는 정보를 클라이언트에 전송

  • 우선순위 : 클라이언트는 리소스 간의 의존관계에 따른 우선순위를 설정할 수 있고 서버에서는 우선순위대로 리소스를 전달할 수 있음

HTTP 3.0

  • HTTP2는 TCP 연결을 사용하기에 초기 연결에 대한 RTT 지연시간이 있었고, 이를 해결한 버전
  • UDP 기반의 QUIC 프로토콜을 사용
  • 기존의 연결을 위한 RTT + 보안을 위한 2RTT 때문에 시간이 오래 걸렸지만, QUIC은 연결과 함께 인증정보와 데이터를 보내기에 1RTT만이 소요된다.

HTTPS


암호화

대칭 암호화

  • 암복호화에 사용하는 키를 하나만 사용함
  • 암호화 속도가 빨라 대용량 데이터 암호화에 적합

비대칭 암호화

  • 공개키와 개인키를 사용
  • 공개키로 암호화 개인키로 복호화 -> 너만 써야 해!! (암호모드)
  • 개인키로 암호화 공개키로 복호화 -> 내가 암호화 한거야!! (인증모드)
  • 암호화 속도가 느리다. 키 길이가 길고 암호화 연산이 복잡하다.

=> 첫번째 인증에 비대칭을 쓰고 인증된 이후에는 대칭 암호화를 쓴다.

HTTPS

  • HTTP + TLS 로 암호화된 통신이 가능하다.
  • TLS는 전송계층에서 보안을 제공하는 프로토콜로 TLS를 통해 제 3자가 메시지를 도청하거나 변조하지 못하게 한다.

HTTP 상태코드


1xx (정보)

  • 서버가 요청을 잘 받았으며, 해당 프로세스를 계속 이어 처리하는 것

2xx (성공)

  • 서버가 요청을 잘 받았고, 클라이언트에세 성공적으로 데이터를 보냄
  • 200 OK : 요청이 성공적
  • 201 Created : 새로운 리소스 생성
  • 204 No Content : 요청에 대해 보내줄 콘텐츠 없지만, 성공적

3xx (리다이렉션)

  • 서버가 클라이언트 요청에 대해 추가 작업 조치가 필요함
  • 301 Moved Permanently : 요청한 리소스의 URI가 변경되었음을 의미
  • 302 Found : 리소스의 URI가 일시적으로 변경됨

4xx (클라이언트 오류)

  • 클라이언트가 요청한 페이지를 제공할 수 없거나, 클라이언트의 요청이 잘못된 경우
  • 400 Bad Request : 클라이언트가 잘못된 문법을 보내 서버가 이해할 수 없음
  • 401 Unauthorized : 비인증
  • 403 Forbidden : 권한이 없음
  • 404 Not Found : 요청받은 리소스를 찾을 수 없음
  • 405 Method Not Allowed : 요청한 메소드를 사용할 수 없습니다.

5xx (서버 오류)

  • 서버가 클라이언트의 요청을 처리하지 못함
  • 501 Internal Server Error : 서버에 오류가 있음
  • 502 Bad Gateway : 게이트웨이, 프록시서버에 오류가 생김
  • 504 Gateway Timeout : 게이트웨이, 프록시서버가 정해진 시간동안 클라이언트 요청을 처리하지 못함
profile
안녕하세요 ^^

0개의 댓글