개발관련 도서/Http&Network Basic

2장. 간단한 프로토콜 HTTP(HTTP1.1)

prden 2021. 7. 10. 12:35

1. Request와 Response

 1) Request 메시지 구성

src = p42 그림으로 배우는 Http Network

2) Response 메시지 구성

src = p40 그림으로 배우는 Http Network

 

 

2. HTTP 프로토콜의 특징

1) HTTP는 상태를 유지하지 않는 stateless 프로토콜이다. HTTP 프로토콜 독자적으로 Request와 Response를 교환하는 동안에 상태를 관리하지 않는다. 이를 보완하기 위해 쿠키가 등장(쇼핑몰에서 로그인 후 다른 사이트로 이동해도 로그인 상태 유지되도록)

 

2) URI를 통해 인터넷 상의 어떤 장소에 있는 리소스도 호출할 수 있다. ( 모든 URI를 리퀘스트 URI에 포함하거나 Host 헤더 필드에 네트워크 로케이션을 포함하거나)

 

3) HTTP 메서드 

 a. GET : 리소스 획득 메서드이다. 

 b. POST : 엔티티 전송 메소드 

 c. PUT : 파일 전송, FTP에 의한 파일 업로드와 같이 리퀘스트 중에 포함된 엔티티를 리퀘스트 URI로 지정한 곳에 보존하도록 요구한다. 

               (상태 코드 204 No Content의 리스폰스를 되돌려준다.)

 d. HEAD : GET과 같은 기능으로 메시지 바디는 돌려주지 않는다. URI 유효성과 리소스 갱신 시간을 확인하는 목적으로 사용됨. 

 e. DELETE : 파일을 삭제하기 위해 사용된다. (상태 코드 204 No Content의 리스폰스를 되돌려준다.)

 f. OPTIONS : 이 메소드는 리퀘스트 URI로 지정한 리소스가 제공하고 있는 메서드를 조사하기 위해 사용된다. 

 g. TRACE : Web서버에 접속해서 자신에게 통신을 되돌려 받는 루프백을 발생시킨다. 이는 리퀘스트 URI로 지정한 리소스가 제공하고

                    있는 메서드를 조사하기 위해 사용된다. (크로스 사이트 트레이싱 같은 공격을 일으키는 보안상 문제로 보통 사용되지 않음)

 h. CONNECT: 프록시에 터널 접속 확립을 요구하면서, TCP 통신을 터널링 시키기 위해서 사용된다. 주로 SSL 이랑 TLS 등의 프로토콜

                         로 암호화된 것을 터널링 시키기 위해 사용된다. 

 

3.TCP의 지속연결

HTTP1.1에서는 TCP문제를 해결하기 위해 지속 연결이라는 방법을 고안했다. 지속 연결이란 어느 한쪽이 명시적으로 연결을 종료하지 않는 이상 TCP 연결을 계속 유지하는 것을 의미한다. 

 1) 지속 연결의 장점 : 

  - 연결과 종료로 반복되는 오버헤드를 줄여주기 때문에 서버에 대한 부하가 경감된다. 오버헤드를 줄인 만큼 리퀘스트와 리스폰스가 바르게 완료된다. 

 2) 파이프라인화: 지속 연결은 리퀘스트를 송신 후 리스폰스를 수신할 때까지 기다리지 않고 다음 리퀘스트를 보낼 수 있는 장점이 있다. 이것을 파이프라인화라고 말한다. 

 

4. 쿠키를 사용한 상태 관리 

HTTP는 stateless 프로토콜이기 때문에, 과거에 교환했던 리퀘스트와 리스폰스의 상태 관리를 하지 않는다. 다시 말해 인증이 필요한 웹페이지에서 인증을 마친 후 상태를 잊어버리기 때문에 새로운 페이지로 이동할 때마다 재차 로그인 정보를 보내던지, 리퀘스트마다 매개 변수나 추가 정보를 붙여서 로그인 상태를 관리해야 한다. 

stateless 프로토콜의 장점은 상태를 유지하지 않아서 서버의 CPU나 메모리 같은 리소스 소비를 억제할 수 있다. 

이를 해결하기 위해 쿠키라는 시스템이 도입되었다. 쿠키는 리퀘스트와 리스폰스에 쿠키 정보를 추가해서 클라이언트의 상태를 파악하기 위한 시스템이다. 쿠키는 서버에서 리스폰스로 보내진 Set-Cookie라는 헤더 필드에 의해 쿠키를 클라이언트에 보존하게 된다. 다음번에 클라이언트가 같은 서버로 리퀘스트를 보낼 때 자동으로 쿠키 값을 넣어서 송신하고 서버는 클라이언트가 보내온 쿠키를 확인해서 어느 클라이언트가 접속했는지 체크하고 서버 상의 기록을 확인해서 이전 상태를 알 수 있다. 

   

src = p60 그림으로 배우는 Http&Network