[HTTP] 전형적인 HTTP 세션

2022. 10. 26. 22:44TIL💡/Network

HTTP와 같은 클라이언트-서버 프로토콜에서, 세션은 다음의 세 가지 과정으로 이루어진다.

1. 클라이언트가 TCP 연결을 수립한다.(3 Way Handshake로 할 것 같다.)

2. 클라이언트는 요청을 전송한 뒤 응답을 기다린다.

3. 서버는 요청에 대해 처리하고 그에 대한 응답을 상태 코드 그리고 요청에 부합하는 데이터와 함께 돌려보낸다.

 

HTTP/1.1부터는 세번째 과정 이후 클라이언트가 해당 시점에 또 다른 요청을 보낼 수 있도록 연결을 닫지 않는다.

그러므로 두번째, 세번째 과정이 몇 번에 걸쳐 일어날 수 있다.

 

요청 전송

  1. 첫번째 줄은 파라메터가 따르는 요청 메서드를 포함합니다: The first line contains a request method followed by its parameters:
    • 문서의 경로, 즉 프로토콜과 도메인 이름을 제외한 절대 URL
    • 사용중인 HTTP 프로토콜 버전
💡 HTTP는 주어진 자원에 대해 실행되길 바라는 동작을 가리키는 요청 메서드 집합을 정의합니다. 그것들이 명사가 될 수 있으지라도, 이 요청 메서드들은 때때로 HTTP 동사로써 참조됩니다. 일반적으로 대부분의 요청은 GET과 POST입니다:
- GET 메서드는 지정된 자원의 표시를 요청합니다. GET을 사용하는 요청은 데이터를 가져오는 것 외에는 할 수 없습니다.
- POST 메서드는 서버에 데이터를 전송하여 서버가 상태를 바꾸도록 만듭니다. 이것은 HTML Forms (en-US)에서 자주 사용되는 메서드입니다.

 

2. 바로 다음 줄들은 각각 특정 헤더를 나타내는데, 데이터의 종류가 적합한지(예를 들어, 언어는 무엇인지, MIME 타입은 무엇인지 등) 혹은 서버의 동작을 수정하는 몇 가지 데이터(예를 들어, 이미 캐시되어 있는 경우 응답을 전송하지 않는다든지 하는) 등에 관한 몇 가지 정보를 서버에게 제공합니다. 이런 HTTP 헤더들은 빈 줄로 끝나는 블록을 형성합니다.

3. 마지막 블록은 부가적인 데이터 블록(body)으로, 더 많은 데이터를 포함하며 주로 POST 메서드에 의해 사용됩니다.

 

예제)

Content-Length가 없으므로 데이터블록이 비어있다.

GET / HTTP/1.1
Host: developer.mozilla.org
Accept-Language: fr
POST /contact_form.php HTTP/1.1
Host: developer.mozilla.org
Content-Length: 64
Content-Type: application/x-www-form-urlencoded

name=Joe%20User&request=Send%20me%20one%20of%20your%20catalogue

응답 전송

연결된 에이전트가 자신의 요청을 전송하고 난 뒤에, 웹 서버가 그것을 처리하고 최종적으로 응답을 돌려보내게 된다.

클라이언트 요청과 유사하게, 서버 응답은 세 개의 다른 블록으로 나누어진, CRLF(개행)로 구분된 텍스트 지시자들로 형성된다.

 

  1. 상태 줄인 첫번째 줄은 상태 요청(그리고 인간이 읽을 수 있는 텍스트 내에서의 의미)이 따르도록 사용된 HTTP 버전의 acknowledgment로 구성됩니다.
  2. 다음 줄들은 각각 특정 HTTP 헤더를 나타는데, 전송되는 데이터에 관한 정보(이를테면, 타입, 데이터 크기, 사용된 압축 알고리즘, 캐시에 대한 힌트 등)를 클라이언트에게 제공합니다. 클라이언트의 요청에 대한 HTTP 헤더 블록과 유사하게, 이 HTTP 헤더들은 빈 줄로 끝나는 블록을 형성합니다.
  3. 마지막 블록은 데이터 블록으로 (존재한다면) 데이터를 포함합니다.

예제)

HTTP/1.1 200 OK
Date: Sat, 09 Oct 2010 14:28:02 GMT
Server: Apache
Last-Modified: Tue, 01 Dec 2009 20:18:22 GMT
ETag: "51142bc1-7449-479b075b2891b"
Accept-Ranges: bytes
Content-Length: 29769
Content-Type: text/html

<!DOCTYPE html... (here comes the 29769 bytes of the requested web page)

'TIL💡 > Network' 카테고리의 다른 글

[HTTP] HTTP 쿠키 🍪  (0) 2022.10.27
[HTTP] HTTP/1.x의 커넥션 관리  (0) 2022.10.26
[HTTP] HTTP/2.0 프레임  (0) 2022.10.26
[HTTP] HTTP 진화 과정  (0) 2022.10.26
[HTTP] HTTP 개념 정리 💡  (0) 2022.10.26