HTTP
: HyperText Transfer Protocol로, 클라이언트(웹 브라우저)와 웹 서버간 데이터를 전송하는 프로토콜이다.
- HTTP는 ‘요청-응답’ 모델을 사용한니다. 클라이언트는 서버에게 특정 정보를 요청하고, 서버는 이 요청에 대한 응답을 클라이언트에게 돌려준다. 이 요청과 응답은 HTTP 메소드를 사용한다.
- HTTP 요청과 응답은 패킷으로 나누어져 전송되며, 응답은 주로 HTML 문서의 형태이다.
- Header에는 크게 여러가지 정보와 어떤 메소드를 사용하였는지 명시되고, 어떠한 메소드를 사용했는지에 따라 Body영역의 사용 유무 및 사용 방법이 달라진다.
HTTPS
: Hypertext Transfer Protocol Secure로, 보안 기능이 추가된 HTTP의 확장 버전이다.
- SSL/TLS 를 사용하여 데이터를 암호화하며, 기밀성, 무결성, 인증을 제공한다.
- 현재 대부분의 인터넷 사이트는 HTTPS를 사용하고 있다.
패킷
: 네트워크를 통해 전송되는 데이터의 작은 단위로, 웹 브라우징 과정에서 클라이언트(웹 브라우저)와 웹 서버 간의 모든 통신은 패킷을 통해 이루어진다. 각 패킷은 독립적으로 네트워크를 통해 이동한다.
패킷은 헤더와 페이로드로 구성된다.
- 헤더(Header) : 패킷의 메타데이터를 담고 있으며, 패킷의 출발지와 목적지 주소, 패킷의 크기, 패킷 순서 등의 정보를 포함한다.
- 페이로드(Payload) 또는 바디(body) : 실제로 전송하려는 데이터를 담고 있으며, 이는 웹페이지의 HTML 코드, 이메일의 텍스트, 온라인 게임의 상태 정보 등 다양한 형태의 데이터를 포함한다.
HTTP 통신 과정
- 요청(Request) : 사용자가 웹 브라우저를 통해 특정 웹사이트를 방문하려고 하면, 브라우저는 HTTP 메소드(GET, POST 등)를 통해 해당 웹사이트의 서버에 정보를 요청한다.
- 처리(Processing) : 웹 서버가 웹 브라우저의 요청을 받아 처리하는 단계로, 서버는 요청을 분석하고 필요한 작업을 수행하여 그 결과를 쿨라이언트에게 돌려줄 준비를 한다. 예를 들어, GET 요청의 경우, 서버는 요청된 리소스를 찾아 반환한다.
- 응답(Response) : 웹 서버는 요청을 받아 처리한 후, 요청한 정보를 웹 브라우저에게 돌려준다. 이 정보는 주로 HTML, CSS, JavaScript 등의 형식으로 되어 있으며, 이를 통해 웹페이지의 구조, 스타일, 동작 등이 정의된다.
- 렌더링(Rendering) : 웹 브라우저는 서버로부터 받은 HTML, CSS, JavaScript 등의 파일을 해석하고 실행하여 웹 페이지를 화면에 표현한다.
- 상호작용(Interaction) : 사용자는 웹 페이지 내의 요소를 클릭하거나, 입력을 하거나, 스크롤을 하는 등의 행동을 통해 렌더링된 웹페이지와 상호작용할 수 있으며, 이러한 행동들은 새로운 요청을 발생시키거나 웹페이지의 동작을 변경할 수 있다.
GET Method
: 서버로부터 정보를 가져오기 위해 사용된다.
- 데이터가 Header에 위치, Body영역 사용하지 않는다.
- URL뒤에 ?를 사용하여 Parameter를 작성하고 &를 붙여 여러 Parameter를 구분한다.
- 주소창에 쿼리스트링이 그대로 보여지기 때문에 보안성이 떨어진다.
- 길이에 제한이 있음으로 전송 데이터의 한계가 있다.
- POST방식보다 상대적으로 전송 속도가 빠르다.(캐싱(한번 접근 후, 또 요청할 시 빠르게 접근하기 위해 데이터를 저장시켜 놓음)떄문)
ex) 웹 브라우저 주소창에 https://www.example.com/search?query=web+protocols&results=20 입력 후 이동 시 웹 서버에 보내는 HTTP GET 요청(패킷)
GET /search?query=web+protocols&results=20 HTTP/1.1
Host: www.example.com
- 첫 번째 줄. GET : HTTP 메소드, /search?query=web+protocols&results=20 : 요청 경로 및 파라미터(웹 서버에 web protocols 검색, 결과 20개 보여줘), 1.1 : HTTP 버전
- 두 번째 줄. Host: www.example.com : 요청이 보내지는 서버의 주소
POST Method
: 클라이언트에서 서버로 데이터를 전송하며, 주로 서버의 값이나 상태를 변경하기 위해 사용된다.
- Body에 데이터를 넣어서 보낸다.
- 서버로 보내기 전에 인코딩, 전송 후 서버에서는 다시 디코딩 한다.
- 주소창에 전송 데이터의 정보가 노출되지 않아서 GET방식에 비해 보안성이 높다.
ex)
POST /signup HTTP/1.1
Host: www.example.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 43
username=testuser&email=test@example.com
- 첫 번째 줄. POST : HTTP 메소드, /signup : 요청 경로, 1.1 : HTTP 버전
- 두 번째 줄. 요청이 보내지는 서버의 주소
- 세 번째 줄. 요청 본문의 데이터 형식
- 네 번째 줄. 요청 본문의 길이
- 마지막 줄(body 부분). 실제로 서버에 전송되는 데이터
이 외 Method
- HEAD Method: GET 메소드와 동일하지만, 메시지 본문을 반환하지 않고, 메시지 헤더만을 반환한다.
- PUT Method: URL에 자원을 생성하거나 변경하기 위해 사용됩니다. 클라이언트가 정확히 어떤 리소스를 업데이트할지 알고 있을 때 사용한다.
- DELETE Method: URL의 자원을 삭제하기 위해 사용됩니다. 클라이언트가 정확히 어떤 리소스를 삭제할지 알고 있을 때 사용한다.
- PATCH Method: 리소스의 부분적인 업데이트를 위해 사용된다.
- OPTIONS Method: 웹 서버가 지원하는 메소드의 종류를 반환합니다.
HTTP 응답 메시지
: 웹 브라우저가 웹 서버로부터 받는 패킷은 HTTP 응답 메시지의 형식을 따른다.
HTTP 응답 메시지는 상태 줄(Status Line), 헤더(Header), 그리고 본문(Body)으로 구성된다.
- 상태 줄(Status Line) : HTTP 응답의 첫 줄로, HTTP 버전, 상태 코드, 그리고 상태 메시지를 포함한다.
- 헤더(Header) : 응답에 대한 메타데이터를 포함한다.
- 본문(Body) : 실제 응답 데이터로, HTML 문서, 이미지, JSON 데이터 등 다양한 형태가 될 수 있다.
ex)
HTTP/1.1 200 OK
Date: Sun, 12 May 2024 21:27:53 GMT
Content-Type: text/html; charset=UTF-8
Content-Length: 111
<html>
<head>
<title>Example Page</title>
</head>
<body>
<h1>Welcome to the Example Page!</h1>
</body>
</html>
- 첫 번째 줄(상태 줄). HTTP 1.1 : 버전, 200 : 상태 코드(요청이 성공적으로 처리됨을 나타냄), OK : 상태 메시지
- 두 번째 줄(헤더). 응답이 생성된 날짜와 시간
- 세 번째 줄(헤더). 본문의 데이터 형식과 문자 인코딩
- 네 번째 줄(헤더). 본문의 길이
- 나머지 줄(본분). 실제 응답 데이터를 포함(HTML 문서)