CS
[CS] HTTP
CoderNo.905
2024. 10. 15. 23:02
W3에서 데이터를 주고받기 위한 프로토콜로 주로 HTML 문서를 주고받는데 사용됩니다.
애플리케이션 레벨의 프로토콜로 주로 TCP/IP를 사용하며 HTTP3부터는 UDP를 사용합니다.
HTTP 프로토콜은 어떤 종류의 데이터든 전송할 수 있도록 설계되어있습니다.
특징
HTTP 메시지는 서버와 클라이언트에 의해 해석됩니다.
HTTP는 연결 상태를 유지하지 않는 비연결성 프로토콜 입니다.
비연결성 프로토콜이기에 Request/Response방식으로 동작합니다.
구성
서버
- Request를 받아 접근을 관리하고, 처리하고 Response하는 시스템
- Request에 대한 Response를 한다.
클라이언트
- Request를 보내는 개체(Ex. 웹 브라우저, 앱 등...)
Request(요청)
클라이언트가 서버에 요청을 하는 것으로 메시지 구조는 다음과 같습니다.
GET / HTTP/1.1 -> start line
Host: developer.mozilla.org -> headers
Accept-Language: fr -> headers
-> blank line
page=100&hl=fr -> body
start line
Request의 가장 첫 라인이며, 구성으로 HTTP Method, target, HTTP version이 각각 띄어쓰기로 구분됩니다.
headers
Request에 대한 정보를 담고 있는 부분으로 Key:Value 형식으로 되어있습니다.
Body
Request의 실제 내용으로, body가 없는 Request도 존재합니다.
Response(응답)
클라이언트가 요청한 정보를 담아 처리한 후 반환하는 메시지로 구조는 다음과 같습니다.
HTTP/1.1 200 OK -> start line
Date: Sat, 09 Oct 2010 14:28:02 GMT -> headers
Server: Apache -> headers
Last-Modified: Tue, 01 Dec 2009 20:18:22 GMT -> headers
ETag: "51142bc1-7449-479b075b2891b" -> headers
Accept-Ranges: bytes -> headers
Content-Length: 29769 -> headers
Content-Type: text/html -> headers
<!DOCTYPE html... (here comes the 29769 bytes...) -> body
start line
상태를 나타내는 부분으로 HTTP 버전, 상태 코드, 상태 값이 존재하며 띄어쓰기로 구분됩니다.
headers
Request의 headers와 동일하며, Response에 사용되는 값들만 추가됩니다.
Body
Request에 대한 반환값이 들어있습니다.