2장 간단한 프로토콜 HTTP
2.1 HTTP는 클라이언트와 서버 간에 통신을 한다
리소스를 요청하는 쪽이 클라이언트, 리소스를 제공하는 쪽이 서버가 된다.
HTTP는 클라이언트와 서버의 역활을 명확히 구분하고 있다.
2.2 리퀘스트와 리스폰스를 교환하여 성립
HTTP는 반드시 클라이언트로부터 통신이 시작되고 그 결과가 서버로부터 돌아온다.
서버측은 리퀘스트를 수신하지 않으면 리스폰스가 발생하는 경우는 없다.
2.3 HTTP는 상태를 유지하지 않는 프로토콜이다
HTTP는 상태를 유지하지 않는 stateless 프로토콜이다.
이전에 보냈던 리퀘스트나 리스폰스에 대해서는 전혀 기억하지 못한다.
로그인 상태를 유지하는 등 상태를 유지하기 위해 쿠키라는 기술이 도입되었다.
2.4 리퀘스트 URI로 리소스를 식별
HTTP는 URI를 사용하여 인터넷 상의 리소스를 지정한다.
2.5 서버에 임무를 부여하는 HTTP 메소드
GET
- 리퀘스트 URI로 식별된 리소스 획득한다.
POST
- 엔티티를 전송하기 위해 사용된다.
PUT
- 책에서는 파일을 전송하기 위해서 사용된다고 나와있다.
- 요즘에는 리소스를 수정하기 위해서 사용된다.
PATCH
- 책에는 안나와있는데 PUT은 서버 리소스를 전부 수정, PATCH는 일부 수정하는 것으로 알고 있다.
- 근데 실제로 이렇게 지켜서 사용하기보다는 보통 PUT으로 일괄적으로 많이 사용했었음 (경험)
HEAD
- GET과 같은 기능이지만 메시지 바디는 돌려주지 않고 URI 유효성과 리소스 갱신 시간을 확인하는 목적 등으로 사용된다.
DELETE
- 파일을 삭제하기 위해 사용된다. 리퀘스트 URI로 지정된 리소스의 삭제를 요구한다.
OPTIONS
- 리퀘스트 URI로 지정한 리소스가 제공하고 있는 메소드를 조사하기 위해 사용된다.
TRACE
- 웹 서버에 접속해서 자신에게 통신을 되돌려 받는 루프백을 발생시킨다.
- 프록시 등을 중계하여 오리진 서버에 접속할 때 그 동작을 확인하기 위해서 사용되고 있다.
- 보통은 거의 사용하지 않는다.
CONNECT
- TCP 통신을 터널링 시키기 위해서 사용된다.
2.6 메소드를 사용해서 지시를 내리다
리퀘스트 URI로 지정한 리소스에 리퀘스트를 보내는 경우에는 메소드라는 명령을 사용한다. 메소드는 리소스에 어떠한 행동을 하기 원하는지를 지시하기 위해 존재한다.
메소드는 대문자와 소문자를 구별하기 때문에 대문자로 기재할 필요가 있다.
2.7 지속 연결로 접속량을 절약
HTTP 초기 버전에서는 HTTP 통신을 한 번 할 때마다 TCP에 의해 연결과 종료를 했다.
초기에는 텍스트를 보내는 위주라서 괜찮았지만 여러개의 이미지를 보내는등의 경우에 매번 TCP 연결과 종료를 하게 되어 통신량이 늘어나게 된다.
2.7.1 지속 연결
HTTP/1.1과 일부 HTTP/1.0에서는 TCP 연결 문제를 해결하기 위해 지속 연결(Persistent Connections)이라는 방법을 고안했다. 어느 한 쪽이 명시적으로 연결을 종료하지 않는 이상 TCP 연결을 계속 유지한다.
지속 연결을 하게 되면서 연결과 종료를 반복하는 오버헤드를 줄여서 서버에 대한 부하를 줄일 수 있다. 또한 리퀘스트와 리스폰스가 빠르게 완료되어 웹 페이지를 빨리 표시할 수 있다.
2.7.2 파이프라인화
지속 연결은 여러 리퀘스트를 보낼 수 있도록 파이프라인화를 가능하게 했다.
이전에는 리퀘스트 송신 후에 리스폰스를 수신할 때까지 기다린 뒤에 추가적으로 리퀘스트를 보내야 했는데 지금은 리스폰스를 기다리지 않고 바로 다음 리퀘스트를 보낼 수 있다.
2.8 쿠키를 사용한 상태 관리
HTTP는 stateless 프로토콜이기 때문에 상태를 유지하기 위해 쿠키라는 시스템이 도입되었다.
쿠키는 리퀘스트와 리스폰스에 쿠키 정보를 추가해서 클라이언트의 상태를 파악한다.
쿠키는 서버에서 리스폰스로 보내진 Set-Cookie라는 헤더 필드에 의해 클라이언트에 저장된다.
다음 번에 클라이언트가 같은 서버로 리퀘스트를 보내면 자동으로 쿠키 값을 넣어서 송신한다.
'TIL > 개발' 카테고리의 다른 글
그림으로 배우는 Http & Network Basic - 3장 (0) | 2023.12.15 |
---|---|
Partial Prerendering(PPR)은 어떤 렌더링 방식일까? (0) | 2023.12.10 |
그림으로 배우는 Http & Network Basic - 1장 (0) | 2023.12.06 |
[리팩토링 2판 스터디] 2회차 정리 (0) | 2023.12.05 |
[리팩토링 2판 스터디] 1회차 정리 (0) | 2023.11.18 |