1. Overview of HTTP
HTTP(Hyper Text Transper Protocol) 은 서버와 클라이언트 사이에서, 데이터를 주고 받을 수 있는 프로토콜 중 하나입니다. 클라이언트는 HTTP를 이용해 서버에 요청을 보내고, 서버는 요청에 대해 응답할 수 있습니다.
HTTP 요청은 크게 Method
, Path
, Version of Protocol
, Headers
로 구성됩니다.
- Method : HTTP 메소드로 클라이언트가 수행하고자 하는 동작을 정의합니다. GET, POST 등이 있습니다.
- Path : 리소스의 경로입니다.
- Version of Protocol : HTTP의 버전입니다.
- Headers : 요청에 대해 추가적인 정보를 전달할 수 있습니다.
이 네 개 외에도, 요청 시 서버에 데이터를 보낼 수 있는데, 이 경우 본문이 추가됩니다.
클라이언트는 서버에 요청을 통해 응답을 받아들일 수 있습니다.
HTTP/1.1 200 OK
ETag: "51142bc1-7449-479b075b2891b"
Content-Length: 29769
Content-Type: text/html
<!DOCTYPE html... (here comes the 29769 bytes of the requested web page)
응답의 첫번째 줄은 프로토콜 버전과, 상태코드
상태 텍스트
로 구성됩니다. 여기서 상태코드
는 요청의 결과(성공, 실패 등)을 나타내주는 코드입니다.
다음줄부터는 헤더
로, 응답에 대해 여러가지 정보를 담고 있습니다. 헤더
다음부터는, 응답의 본문
이 존재합니다. 모든 응답에 본문이 존재하지는 않습니다.
2. 주소창에 naver.com 을 검색했을 때 무슨 일이 일어날까
주소창에 주소를 검색한다는 것은, 내부적으로는 해당 주소(도메인) 서버에 HTTP GET 요청을 보내는 것입니다. 서버는 결과를 text/html
등을 응답함으로써, 브라우저에 화면을 그립니다.
서버와 통신하기 위해서는 서버의 IP를 알아내야 하는데, 도메인 자체로는 IP를 알아낼 수 없습니다. 이 때 DNS(Domain Name System) 란 개념이 필요합니다. 도메인을 IP로 매핑 시켜 주는 역할이 DNS 서버인데, 브라우저나 OS는 이 도메인을 찾기 위해 캐싱 되어있는지 확인하고, Local DNS 서버, Root Name 서버, TLD(Top Level Domain, 여기선 .com) 서버, 마지막으로 해당 도메인을 관리하는 네임서버 에 차례대로 querying 하여 IP 를 찾아냅니다.
이 과정을 통해 서버의 IP를 알아낸다면, 이제 통신 과정이 시작됩니다. 처음으로, TCP 연결을 통해 서버와 클라이언트를 연결합니다.(HTTP 1.1 기준, HTTP/3 은 QUIC 이란 UDP 사용) 이후 HTTP 메시지를 서버에 전송합니다.
이 때 서버는, Apache
나 nginx
등을 이용해 80번 포트로 들어오는 요청들을 적절하게 처리하여 클라이언트에 응답을 보내줍니다.
이 때, 웹서버가 직접 요청을 처리할 수도 있고, node
같은 다른 프로세스에 요청을 위임할 수도 있습니다.
3. HTTPS 란 ?
HTTP 요청과 응답은 모두 정보를 평문으로 전송합니다. 이렇게 전송되는 정보들은, 네트워크 중간에서 정보를 엿볼 수 있습니다. 이런 문제를 해결하기 위해 TCP 연결에 보안을 추가한게 SSL
, TLS
이고 이와 함께 HTTP 메시지를 전송하여 정보 유출을 막는게 HTTPS
(HTTP + Secure) 입니다.
4. References
- Overview of HTTP
- Computer Networking a top-down approach
- Understanding the flow of http request