HTTP

Taemin Jang·2024년 9월 11일
0

이번에 학습할 내용

  • 메시지가 어떻게 흘러가는가
  • HTTP 메시지 시작줄, 헤더, 본문
  • 요청과 응답 메시지의 차이
  • 요청 메시지의 메서드들
  • 응답 메시지의 상태 코드들

메시지의 흐름

메시지는 원 서버 방향을 인바운드로 송신하고, 모든 처리가 끝난 뒤에 메시지가 사용자 에이전트 방향인 아웃바운드로 이동한다.

HTTP 메시지는 요청 메시지 또는 응답 메시지에 관계없이 다운스트림으로 흐른다.

즉, 메시지의 발송자는 수신자의 업스트림이 된다.

HTTP 메시지는 시작줄, 헤더 블록, 본문으로 이루어진다.

시작줄은 어떤 메시지인지를, 헤더 블록은 속성을, 본문은 데이터를 담고 있다. 본문은 아예 없을 수도 있다.

시작줄과 헤더는 줄 단위로 분리된 아스키 문자열이다.

각 줄은 캐리지 리턴과 개행 문자로 구성된 두 글자의 줄바꿈 문자열이며, 이를 CRLF라고 쓴다.

메시지 문법

요청 메시지의 형식은 다음과 같다.

<메서드> <요청 URL> <버전>
<헤더>

<엔터티 본문>

응답 메시지의 형식은 다음과 같다.

<버전> <상태 코드> <사유 구절>
<헤더>

<엔터티 본문>
  • 메서드: 클라이언트 측에서 서버가 리소스에 대해 수행하길 바라는 동작으로 GET, HEAD, POST등이 있다.
  • 요청 URL: 요청 대상이 되는 리소스를 지칭하는 완전한 URL 혹은 URL의 경로 구성 요소다. (절대 경로, 상대 경로 해당)
  • 버전: 메시지에서 사용 중인 HTTP의 버전이다. 버전의 형식 HTTP/<메이저>, <마이너>
  • 상태 코드: 요청 중에 무엇이 일어났는지 설명하는 세 자리 숫자이다. 보통 각 코드의 첫 번째 자릿수는 상태의 일반적인 분류를 나타낸다.
  • 사유 구절: 숫자로 된 상태 코드를 사람이 이해하기 위해 설명해주는 짧은 문구다. HTTP/1.0 200 OK
  • 헤더: 헤더는 0개 이상으로 이루어지며 요청과 응답의 추가 정보를 더해준다. 기본적으로 이름/값 쌍의 목록이다.
  • 엔터티 본문: 임의의 데이터 블록을 포함하며, 모든 메시지가 엔터티 본문을 갖는 것은 아니다.

메서드

안전한 메서드 (Safe Method)

GETHEAD 메서드는 안전한 메서드라고 볼 수 있는데, HTTP의 요청의 결과로 서버에 어떤 작용도 없음을 의미한다.

즉, HTTP 요청의 결과로 서버에서 어떠한 일도 일어나지 않는다는 것이다.

안전한 메서드가 서버에 작용을 유발하지 않는다는 보장은 없지만, 안전하지 않은 메서드가 사용될 때 사용자들에게 그 사실을 알려주도록 설계 해야한다.

GET

GET 메서드는 가장 흔히 쓰이는 메서드이며, 주로 서버에게 리소스를 달라고 요청하기 위해 쓰인다.

HEAD 메서드는 정확히 GET처럼 행동하지만, 서버는 응답으로 헤더만 반환한다. 엔터티 본문은 반환되지 않는다.

이는 클라이언트가 리소스를 실제로 가져올 필요 없이 헤더만 조사하는 역할을 한다

  • 리소스를 가져오지 않고, 헤더를 통해 타입 등을 알아낼 수 있다.
  • 응답의 상태 코드를 통해, 리소스가 존재하는지 확인할 수 있다.
  • 헤더를 확인하여 리소스가 변경되었는지 검사할 수 있다.

PUT

GET 메서드는 서버로부터 문서를 읽는 반면에, PUT 메서드는 서버에 문서를 쓰는 역할을 한다.

서버가 요청의 본문을 가지고 새 문서를 만들거나, 이미 URL이 존재한다면 본문을 사용해서 교체해준다.

POST

POST 메서드는 서버에 입력 데이터를 전송하기 위해 설계되었다. 특히 HTML에 Form을 지원할 때 흔히 사용된다.

PUT과 POST에 가장 큰 차이점은 동일한 요청(문서 생성)을 여러번 보낼 때 PUT 메서드는 교체를 하지만, POST는 요청에 맞게 여러번 생성하게 된다.
이런 특성으로 PUT 메서드는 멱등하고, POST는 멱등하지 않다.

입력 받은 Form 데이터는 서버로 전송되며, 서버는 이를 모아 필요로 하는 곳에 보낸다.

TRACE

클라이언트가 어떤 요청을 할 때, 그 요청은 방화벽, 프록시, 게이트웨이 등의 애플리케이션을 통과할 수 있다.

각각을 통과할 때 HTTP 요청을 수정할 수 있는데, TRACE 메서드는 클라이언트에게 자신의 요청이 서버에 도달했을 때 어떻게 보이게 되는지를 알려준다.

따라서 TRACE 메서드는 주로 진단을 위해 사용된다. 예를 들면 요청이 의도한 요청/응답 연쇄 과정을 거쳐가는지 검사할 수 있다.

응답 헤더를 보면 Via헤더가 있는데 이를 통해 1.1 proxy3.company.com 프록시 서버를 거쳐간 것을 알 수 있다.

OPTIONS

OPTIONS 메서드는 웹 서버에게 여러 가지 종류의 지원 범위에 대해 물어보는 역할을 한다. 즉, 서버에게 특정 리소스에 대해 어떤 메서드가 지원되는지 알 수 있다.

DELETE

DELETE 메서드는 서버에게 요청 URL로 지정한 리소스를 삭제할 것을 요청한다. 하지만 클라이언트는 삭제가 수행되는 것을 무조건 보장하지 못한다.

이유는 HTTP 명세 중 서버가 클라이언트에게 알리지 않고 요청에 대해 무시하는 것을 허용하기 때문이다.

확장 메서드

HTTP는 필요에 따라 확장해도 문제가 없도록 설계되어 있다. 새로운 기능을 추가해도 과거에 구현한 소프트웨어들의 오동작을 유발하지 않는다.

profile
하루하루 공부한 내용 기록하기

0개의 댓글

관련 채용 정보