솜이의 데브로그

2장 ) 간단한 프로토콜 HTTP 본문

CS/Network

2장 ) 간단한 프로토콜 HTTP

somsoming 2021. 9. 18. 22:27

Reference : 그림으로 배우는 HTTP&Network Basic

 

클라이언트와 서버간에 통신

  • 텍스트와 이미지 등과 같은 리소스를 필요하다가 요구하는 쪽이 클라이언트
  • 리소스를 제공하는 쪽이 서버
  • http 프로토콜에서는 반드시 한쪽은 클라이언트, 다른 한 쪽은 서버 역할을 담당한다.
  • 클라이언트로부터 Request 송신, 그 결과가 서버로부터 response로 되돌아온다. 즉, 클라이언트로부터 통신이 시작.

 

클라이언트 request 예시

GET /index.html HTTP /1.1
Host : www.hackr.jp

 

GET은 메소드. 서버에 요구하는 종류

문자열 "/index.html" 은 요구 대상인 리소스. 리퀘스트 URI라고 한다.

HTTP/1.1 은 클라이언트 기능을 식별하기 위한 HTTP 버전 번호.

→ 리퀘스트 메시지는 메소드, URI, 프로토콜 버전, 옵션 리퀘스트 헤더필드와 엔티티로 구성되어 있다.

 

서버 Response 예시

HTTP /1.1 200 OK
Date : Tue. 10 Jul 2012 06:50:15 GMT
Content-Length: 362
Content-Type: text/html


<html>
...

 

첫 줄의 HTTP /1.1은 서버의 http 버전을 나타낸다.

200 OK는 리퀘스트의 처리 결과를 나타내는 상태 코드와 설명이다.

Date 줄은 리스폰스가 발생한 일시로, 헤드 필드라고 불리는 것 중 하나이다.

그 아래는 body라고 불리는 리소스 본체가 된다.

→  response 메시지는 프로토콜 버전, 상태 코드, 상태코드를 설명한 phrase, 옵션의 리스폰스 헤더필드와 바디로 구성되어 있다.

 

 

HTTP는 상태를 유지하지 않는 프로토콜

HTTP는 상태를 계속 유지하지 않는 stateless 프로토콜이다.

이전에 보냈던 리퀘스트나 이미 되돌려준 리스폰스에 대해서는 전혀 기억하지 않는다. (범위성을 확보하기 위해)

따라서 쿠키를 사용한다.

 

 

리퀘스트 URI로 리소스 식별

  • HTTP는 URI를 사용하여 리소스를 지정
  • 리소스를 호출할 때 마다 리퀘스트를 송신할 때에 리퀘스트 안에 URI를 리퀘스트 URI라고 불리는 형식으로 포함해야함.
    • 모든 URI를 리퀘스트 URI에 포함
    • Host 헤더필드에 네트워크 로케이션을 포함

 

HTTP 메소드

  • GET : 리소스 획득
    • 리퀘스트 URI로 식별된 리소스를 가져오도록 요구
  • POST : 엔티티 전송
  • PUT : 파일 전송
    • FTP 파일 업로드와 같이 리퀘스트 중에 포함된 엔티티를 리퀘스트로 URI로 지정한 곳에 보존.
    • 인증 기능이 없어 보안상의 문제가 있으므로 일반적인 웹사이트에서는 사용하지 않음. 인증 기능과 짝을 이루는 경우나 REST같이 웹끼리 연계하는 설계 양식을 사용할 때 이용
  • HEAD : 메시지 헤더 취득
  • DELETE : 파일 삭제
    • 역시 인증기능이 없기 때문에 일반적인 웹사이트에서는 사용 안함.
  • OPTIONS : 제공하고 있는 메소드 문의
  • TRACE : 경로 조사
    • 루프백 발생
  • CONNECT : 프록시에 터널링 요구
    • 프록시에 터널 접속 확립을 요함으로써, TCP 통신을 터널링 시키기 위해 사용
    • SSL, TLS 등의 프로토콜로 암호화된 것을 터널링 시키기 위해 사용

 

위 메소드들을 사용해 지시를 내리며, 대문자와 소문자를 구분하므로 대문자로 기재해야한다.

 

 

지속 연결 (Persistent Connection)

HTTP 초기버전에서는 통신을 한번 할 때마다 TCP에 의해 연결과 종료를 해야했다.그러나 다량의 이미지를 포함한 문서등이 늘어나면서 지속 연결 방법이 고안되었다.

  • 어느 한 쪽이 명시적으로 연결을 종료하지 않는 이상 TCP 연결을 계속 유지한다.
  • TCP 커넥션의 연결과 종료를 반복하는 오버헤드를 줄여주어 서버 부하가 경감된다.
  • HTTP 리퀘스트와 리스폰스가 빠르게 완료되어 웹 페이지를 빨리 표시할 수 있다.

 

파이프라인화

지속 연결은 여러 리퀘스트를 보낼 수 있도록 파이프라인화를 가능하게 한다.리스폰스를 기다리지 않고 바로 다음 리퀘스트를 보낼 수 있다.

 

 

쿠키를 사용한 상태 관리

  • HTTP는 stateless 프로토콜이므로 과거 상태를 이용하려면 쿠키를 사용한다.
    • ex) 인증이 필요한 웹 페이지에선 인증정보를 기억해야함.
  • 서버에서 리스폰스로 보내진 Set-Cookie 라는 헤더필드에 의해 클라이언트에 보존한다.
  • 클라이언트가 같은 서버로 리퀘스트를 보낼 때 자동으로 쿠키 값을 넣어서 송신. 서버는 쿠키를 확인해 어느 클라이언트가 접속했는지 체크하고 서버상의 기록을 확인.

 

 

 

느낀점

http 메소드 안써본것들은 생소하다! 알고 있는 내용들이 이미 있어서 이해하기에 괜찮은 부분도 많았지만 모르는 개념은 설명이 적어서 좀 더 찾아봐야겠다.

'CS > Network' 카테고리의 다른 글

3장 ) HTTP 정보는 HTTP 메시지에 있다  (0) 2021.09.22
3장 ) 물리계층  (0) 2021.09.22
2장 ) 네트워크 기본 규칙  (0) 2021.09.18
1장 ) 웹과 네트워크의 기본  (0) 2021.09.12
1장 ) 네트워크 첫걸음  (0) 2021.09.12