2022. 10. 26. 22:44ㆍTIL💡/Network
HTTP와 같은 클라이언트-서버 프로토콜에서, 세션은 다음의 세 가지 과정으로 이루어진다.
1. 클라이언트가 TCP 연결을 수립한다.(3 Way Handshake로 할 것 같다.)
2. 클라이언트는 요청을 전송한 뒤 응답을 기다린다.
3. 서버는 요청에 대해 처리하고 그에 대한 응답을 상태 코드 그리고 요청에 부합하는 데이터와 함께 돌려보낸다.
HTTP/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(개행)로 구분된 텍스트 지시자들로 형성된다.
- 상태 줄인 첫번째 줄은 상태 요청(그리고 인간이 읽을 수 있는 텍스트 내에서의 의미)이 따르도록 사용된 HTTP 버전의 acknowledgment로 구성됩니다.
- 다음 줄들은 각각 특정 HTTP 헤더를 나타는데, 전송되는 데이터에 관한 정보(이를테면, 타입, 데이터 크기, 사용된 압축 알고리즘, 캐시에 대한 힌트 등)를 클라이언트에게 제공합니다. 클라이언트의 요청에 대한 HTTP 헤더 블록과 유사하게, 이 HTTP 헤더들은 빈 줄로 끝나는 블록을 형성합니다.
- 마지막 블록은 데이터 블록으로 (존재한다면) 데이터를 포함합니다.
예제)
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 |