HTTP

hyenam·2022년 6월 25일

webserv

목록 보기
2/6

HTTP는 HTTP 문서와 같은 리소스들을 가져올 수 있도록 해주는 클라이언트-서버 프로토콜이다.

클라이언트-서버 프로토콜이란
수신자 측에 의해 요청이 초기화되는 프로토콜을 의미한다.

클라이언터에 의해 전송되는 메시지를 요청(request),
서버에서 응답으로 전송되는 메시지를 응답(reponse) 라고 한다.

HTTP/3전까지는 HTTP는 TCP혹은 TLS를 통해 전송되었다.

TLS
암호화된 TCP 연결

요청과 응답 사이에는 여러 개체들이 존재한다. 게이트웨이, 프록시 등.

  • 사용자 에이전트 - 사용자를 대신하여 동작하는 모든 도구.

웹페이지를 표시하기 위한 절차
1. 브라우저는 페이지의 HTML문서를 가져오기 위한 요청을 전송.
2. 파일을 구문 분석하여 필요한 스크립트나 리소스나 CSS등을 가져온다.
3. 브라우저는 웹 페이지를 표시하기 위해 리소스를 혼합한다.
4. 실행된 스크립트는 이후 리소스들을 추가적으로 가져올 수 있고, 그에따라 웹 페이지를 갱신하게 된다.

HTTP의 특징

  • 사람이 읽을 수 있다. (HTTP/2 이전까지.)
  • HTTP 헤더로 인하여 확장과 실험에 용이하다.
  • 상태를 저장하지 않는다. (쿠키를 통해 상태가 있는 세션을 만들 수 있다.)
  • 신뢰할 수 있는 전송 프로토콜인 연결기반의 TCP를 사용(HTTP/3는 UDP기반의 QUIC사용.)
  • 웹의 많은 기능을 제어 가능.
    • 캐시
    • origin 제약사항 완화
    • 인증
    • 프록시와 터널링
    • 세션

HTTP의 흐름

  1. TCP 연결을 연다.
  • 요청을 보내거나 응답을 받는데 사용.
  • 클라이언트는 새 연결을 열거나, 기존 연결을 재사용하거나 여러 TCP를 연결하는 등 다양한 행동이 가능하다.
  1. HTTP 메시지 전송.
  2. 서버에 의해 전송된 응답을 읽어들인다.
  3. 연결을 닫거나 다른 요청을 위해 재사용한다.

HTTP 메시지

멱등성
동일한 요청을 한 번 보내는 것과 여러번 보내는 것이 같은 효과를 지닌 것을 뜻하는 말

요청

구성 요소

  • HTTP 메서드
  • 리소스 경로
  • HTTP의 프로토콜 버전.
  • 추가정보를 전달하는 선택적 헤더.
  • 몇가지 메서드를 위한 응답의 본문과 유사한 본문.

응답

구성 요소

  • HTTP 프로토콜 버전.
  • 요청의 성공여부와 이유를 나타내는 상태코드.
  • 상태 메시지.
  • HTTP 헤더들
  • 리소스가 포함되는 본문(선택적)

메서드

  • GET - 특정 리소스 표시 요청. 데이터를 받기만 함.
  • HEAD - GET과 동일안 응답을 요구하나, 응답 본문들 포함하지 않음.
  • POST - 요청된 자원을 생성.
  • PUT - 요청된 자원을 수정.(전체)
  • PATCH - 리소스의 부분만 수정하는데 사용.
  • DELETE - 특정 리소스 삭제.
  • CONNECT - 서버로의 터널을 맺음. 보통 프록시 요청시 사용.
  • TRACE - 리소스의 경로를 따라 메시지 loop-back 테스트.
  • OPTIONS - 리소스의 통신을 설정하는데에 사용.

헤더

헤더는 클라이언트와 서버가 요청 또는 응답으로 부가적인 정보를 전송할 수 있게 해줌.
구성으론 이름과 콜론, 그 다음 값으로 이루어져 있다.

헤더는 맥락에 따라 다음과 같이 그룹화될 수 있다.

  • general header - 요청과 응답 모두 적용되지만 전송되는 데이터와는 관련이 없는 헤더.
  • request header - 패치될 리소스나 클라이언트 자체 정보를 포함한 헤더.
  • response header - 응답에 대한 부가적인 정보를 갖는 헤더.
  • entity header - 엔티티 바디에 대한 정보를 포함하는 헤더.

프록시 처리방법에 따라 그룹화 할 수 있다.

상태코드

수신 처리중

  • 100 Continue - 요청에 문제가 없으니 다음 요청을 보내도 된다는 것을 의미. 완료했다면 무시 가능
  • 101 Switching Protocol - 서버에서 프로토콜을 변경할 것을 의미
  • 102 Processing - 요청을 수신하고 처리중이지만 제대로 된 응답을 알려 줄 수 없음을 의미
  • 103 Early Hints - 서버가 응답을 준비하는 동안 사용자 에이전트가 사전 로딩을 시작할 수 있게함.

성공

  • 200 OK - 요청이 성공적으로 완료
  • 201 Created - 새로운 리소스 생성
  • 202 Accepted - 요청그에 응하여 행동할 수 없음
  • 203 Non-Authoritative Information - 서드 파티 복사본이 모여짐
  • 204 No Content - 페이지 변환 없음
  • 205 Reset Content - 문서 뷰 리셋

리다이렉션

  • 300 Multiple Choice - 요청에 대해 하나 이상 응답 가능.
  • 301 Moved Permanently - 영구 URL 변경
  • 302 Found - 일시적 URL 변경
  • 303 See Other - 요청한 리소스를 다른 URI에서 GET 해야함.
  • 304 Not Modified - 응답이 수정되지 않음. (캐시 목적으로 사용.)

클라이언트 에러

  • 400 Bad Request - 잘못된 응답
  • 401 Unauthorized - 비인증 (클라이언트 모름)
  • 403 Forbidden - 접근 권리 없음 (클라리언트 알고있음)
  • 404 Not Found - 리소스 찾을 수 없음
  • 405 Method Not Allowed - 메소드 사용불가
  • 406 Not Acceptable - 콘텐츠 못찾음
  • 407 Proxy Authentication Required - 프록시 인증 필요
  • 409 Conflict - 서버 상태 충돌
  • 410 Gone - 콘텐츠가 영구 삭제됨
  • 411 Length Required - 정의되지 않은 요청
  • 412 Precondition Failed - 적절하지 않은 전제조건
  • 413 Payload Too Large - 엔티티가 서버에서 정의한 한계보다 큼
  • 414 URI Too Long - URI가 너무 김
  • 415 Unsupported Media Type - 지원하지 않는 미디어 포맷
  • 416 Requested Range Not Satisfiable - Range 헤더 필드에 요청한 지정 범위를 만족시킬 수 없음
  • 418 I'm a teapot - 커피를 찻 주전자에 끓이는 것을 거절
  • 422 Unprocessable Entity - 문법 오류
  • 429 Too Many Requests - 너무 많은 요청
  • 431 Request Header Fields Too Large - 너무 큰 헤더 필드
  • 451 Unavailable For Legal Reasons - 불법 리소스

서버 에러

  • 500 Internal Server Error - 처리 방법 모름
  • 501 Not Implemented - 서버에서 지원되지 않음
  • 502 Bad Gateway - 잘못된 응답 수신
  • 503 Service Unavailable - 요청 처리 준비 안됨
  • 504 Gateway Timeout - 적시에 응답받을 수 없음
  • 505 HTTP Version Not Supported - HTTP 버전이 지원되지 않음
  • 508 Loop Detected - 서버 무한 루프
  • 510 Not Extended - 서버 추가 확장 필요
  • 511 Network Authentication Required - 클라이언트의 네트워크 인증 필요

학습에 참고한 사이트

profile
공부한 걸 정리하고 있습니다.

0개의 댓글