[네트워크] HTTP(2)

oldshoe·2024년 4월 17일

네트워크

목록 보기
8/34

HTTP messages

HTTP message에는 두 가지 종류가 있다.
requestresponse가 있다.

HTTP request message

HTTP request message는 아스키 코드로 보낸다. 실제 예시를 보면 다음과 같다.

그리고 일반적인 request message의 format을 보면 다음과 같다.

그리고 format에서 header file 맨 앞에 오는 'Method' 부분은 이 메시지가 어떤 요청을 뜻하는 메시지인지 알려주는 부분이므로 중요하다. 메소드의 종류에는 다음과 같은 것들이 존재한다.

  • GET : 원하는 정보를 서버에 요청
  • POST : 정보를 생성 및 추가
  • HEAD : 메시지 헤더 정보를 얻음. 이에 대한 응답은 body 없이 헤더만 전송됨.
  • PUT : POST와 비슷하지만 주로 수정 작업에 사용됨.

HTTP response message

status line을 보면 status code와 text가 있지 않은가?
이는 요청에 대한 응답이 어떠한 것을 나타내는지를 알려준다.

  • 200 : OK, 요청이 성공적으로 받아들여졌고 그에 대한 응답 또한 정상적으로 되돌려줄 수 있는 상태
  • 301 : Permanetly Moved, 요청한 객체가 영구적으로 이동했다는 의미. 이동한 새 주소를 알려줌
  • 400 : Bad request, 서버가 요청의 내용을 파악할 수 없는 상태
  • 404 : Not found, 요청한 정보가 서버에서 찾을 수 없는 상태
  • 505 : HTTP Version Not Supported, 서버에서 지원되지 않는 HTTP 버전을 클라이언트가 요청

Cookie

HTTP는 이전 상태 정보를 저장하지 않는 stateless 특징을 지니고 있다.
클라이언트 또는 서버의 상태를 부분적으로 유지할 수 있도록 하는 것이 Cookie이다.

Cookie는 작은 데이터 조각으로 사용자의 클라이언트에 저장된다.

다음과 같은 작동 방식을 따른다

  1. 클라이언트가 서버로 request 메시지를 보낸다.
  2. 서버에서는 ID를 하나 만들어서 쿠키로 세팅하고 클라이언트로 response 해준다. 동시에 관련 정보들을 데이터베이스에 저장한다.
  3. 다시 접속할 때 쿠키 번호를 request 메시지에 담아서 보낸다.
  4. 서버에서는 해당 쿠키 번호에 맞는 것을 데이터베이스에서 찾아서 response 해준다.

HTTP가 state를 저장하고 있다기 보다, 쿠키가 state를 저장하는 것이고 HTTP는 쿠키를 전달만 하는 것이다.

Proxy Server

Proxy Server라는 개념도 있다. 이것을 Web Cache라고도 부른다.
간단하게 말하면 서버를 거치지 않고 Proxy Server에서 요청하는 것을 찾아 클라이언트로 응답하기 때문이다.
이는 Proxy Server의 존재 이유와 같다.

클라이언트가 서버에게 특정 객체를 요청하면, 서버는 클라이언트에게 응답을 돌려줌과 동시에 Proxy server에도 객체를 저장한다.
만약 다음 요청에 동일한 객체를 클라이언트가 요청하면 서버를 굳이 거치지 않고 proxy server에서 바로 응답을 줄 수 있다.

  • response time 감소
  • 성능 향상
  • 트래픽 감소

Conditional GET

Web cahce는 origin 서버의 파일의 객체가 업데이트 됐을 수도 있다. 실시간으로 보여주는 객체들은 cache에서 가져오는 것은 의미가 없다. 따라서 해당 리소스가 변경된 경우에만 다시 보내달라고 요청할 수 있다.

HTTP response는 마지막 수정 시간 정보를 가지고 있다.
클라이언트가 서버에게 '이 수정 시간 이후에 수정된 내용이 있는가?'라고 물어보면 서버는 아래 두 가지 응답을 할 수 있다.

  • 수정 사항이 있을 경우 : 200, OK, 수정한 내용을 알려 줌
  • 수정 사항이 없을 경우 : 304, Not modified, 본 서버 말고 proxy server를 이용해도 문제 없으니 그 내용을 사용하라고 전달

객체가 변했는지 확인하려면 GET Method의 옵션에 if문을 달아서 보낸다.
만약 날짜 기준으로 바뀌지 않았으면 web cache에서, 바꼈으면 origin 서버에서 받는다.

profile
toomuxi : There are many things in the world that I want to do

0개의 댓글