[웹 개념] HTTP 통신의 과정
오늘은 HTTP 통신이 이루어지는 과정에 대해서 알아봅시다.
'통신(Communication)'이라는 것은 소식을 전하는 것입니다. 일상에서는 전화, 메일, 쪽지, 편지, 수신호 등을 이용해 소식을 주고 받습는다. 통신에는 까다로운 조건이 붙습니다. 내가 전하려고 하는 사람에게 정확하게 전달 되어야 하고, 정확한 시간에 맞춰서, 그리고 내가 전하고자 하는 내용을 다른 사람이 알면 곤란하죠.
인터넷 상의 통신도 마찬가지입니다. 특히 수 많은 개인 정보들이 오가는 만큼 더 엄격한 조건이 따릅니다. 그렇기 때문에 사람들은 인터넷 통신에 까다로운 규약(Protocol)을 만들었습니다.
우리가 일상 속에서 흔히 사용하는 프로토콜들은 이런 것들이 있습니다.
- HTTP : Hyper Text Transfer Protocol
- HTTPS : Secure Hyper Text Transfer Protocol
- FTP : File Transfer Protocol
- SFTP : Secure File Transfer Protocol
- SSH : Secure Shell
- Telnet : Terminal Network
- SSL : Secure Socket Layer
- POP3 : Post Office Protocol version 3
- SMTP : Simple Mail Transfer Protocol
- TCP/UDP : Transmission Control Protocol/User Datagram Protocol
- IP : Internet Protocol
HTTP 통신
HTTP 통신은 Hyper Text Transfer Protocol입니다. 말 그대로 Hyper Text를 전송하기 위한 프로토콜입니다.
Hyper Text는 웹 문서를 구성하고 있는 언어인 HTML을 의미합니다.
HTML
HTML은 Hyper Text Markup Language의 줄인말로, Hyper Text, 즉 단순하게 text 의미를 넘어서(Hyper) 링크, 이미지 등 다양한 것들을 표현할 수 있다는 의미입니다. HTML은 웹 문서의 뼈대를 구성하는 언어입니다. 모든 웹 문서는 HTML로 이루어져 있고, HTML로 이루어진 문서 만이 브라우저를 통해 웹 문서로서 읽어질 수 있습니다.
HTML과 관련되서는 정말 정리를 쉽게 잘 해놓은 글이 있어서 링크해드릴께요!
HTTP 통신은 기본적으로 '요청(Request)'과 '응답(Response)'으로 이루어져 있습니다.
클라이언트가 서버에 요청을 보내면, 그에 맞는 응답 결과를 돌려주고, 클라이언트는 사용자에게 서버로부터 응답받은 결과를 보여주는 것입니다.
도표로 정리하면 다음과 같습니다.
(출처 : https://dzone.com/articles/web-performance-101-http-headers)
예를 들어서 우리가 http://naver.com으로 요청을 보내면, 우리는 클라이언트인 웹 브라우저를 통해서 네이버 서버에 네이버 시작 페이지를 보여달라는 요청을 하는것이고, 네이버 서버는 요청을 받으면 네이버 시작페이지에 해당하는 html 페이지를 클라이언트에 돌려줍니다.(응답합니다)
그렇기 때문에 HTTP 통신은 기본적으로 연결이 되어 있지 않습니다. 연결이 되어 있지 않다는 것은 클라이언트가 서버에 요청을 보내고 응답을 받으면, 그것으로 통신이 종료된다는 것을 의미합니다. 서버는 클라이언트가 웹 사이트에 접속해 있는지, 알 수 없습니다.
(출처 : https://cascadingmedia.com/insites/2015/03/http-2.html)
사진에서 확인할 수 있듯이 서버에 요청을 보내고, 서버로부터 필요한 파일을 모두 받고 나면 접속이 종료(Connection Close)됩니다.
커넥션(Connection)이 계속 연결되어있지 않다는게 HTTP 통신의 특징입니다.
요청을 보내고 응답을 받을 때 우리는 그 정보들을 패킷(Packet)이라는 작은 조각에 실어서 보내게 됩니다.
패킷은 크게 '헤더(Header)'와 '바디(Body)'로 되어 있는데, Header에는 보내는 사람의 주소, 받는 사람의 주소, 패킷의 생명 시간 (TTL, Time To Live) 등이 담겨 있고, Body에는 우리가 전하고자 하는 실제 내용이 들어 있습니다.
<패킷의 구조>
그렇다면 요청과 응답에는 어떤 정보가 담겨 있을까요?
크롬 브라우저의 '검사' 기능을 이용하면 쉽게 확인해 볼 수 있습니다.
아무 웹 페이지나 열고 -> 마우스 우 클릭 -> '검사'를 누르면 '크롬 브라우저 개발자 도구'를 열 수 있습니다.
우리는 상단의 탭 중에서 'Network'에 들어가야합니다.
<크롬 개발자 도구 네트워크 화면>
처음 탭에 들어가면 아무것도 떠 있지 않을거에요. 그러면 웹 페이지를 새로고침 해주세요.
탭을 보면 위에는 어떤 리소스들을 얼마나 걸려서 가져 오는지, 언제 가져오는지 타임라인으로 볼 수 있습니다.
그 밑에는 리소스들의 목록이 있고, 그 리소스들 중 하나를 클릭하면 패킷 정보를 볼 수 있습니다.
- General : 요청 url 정보와 메소드, 상태 코드를 확인할 수 있습니다.
- Response Headers : 응답 헤더. 응답 온 패킷의 헤더를 확인할 수 있습니다. 서버의 종류, 연결 상태 등이 담겨 있습니다.
- Request Headers : 요청 헤더. 요청을 보낸 패킷의 헤더를 확인할 수 있습니다. 보낸 클라이언트의 종류, 요청한 파일의 종류 등을 알 수 있습니다.