🌰 해당 글은 HTTP 완벽가이드를 정리한 내용입니다.
현대 인터넷의 공용어라고 할 수 는, 웹 브라우저, 서버, 웹 애플리케이션이 대화하는 방식.
어떤 포맷의 파일이더라도 전 세계의 웹 서버로부터 정보를 빠르고, 간편하고, 정확하게 웹 브라우저로 옮겨준다. 신뢰성있는 데이터 전송 프로토콜을 사용하기 때문에, 지구 반대편에서 데이터가 오더라도 전송 중 손상되지 않음을 보장한다.
웹 콘텐츠를 가지고 있고, 웹 클라이언트가 요청했을 때 요청한 콘텐츠를 HTTP응답으로 보내준다.
보통 HTTP프로토콜로 의사소통하기 때문에 HTTP서버라고 부른다.
우리가 인터넷 사용 시 항상 이용하는 것.
흔히, 크롬, 사파리와 같은 웹 브라우저를 통해 클라이언트 요청을 하게 된다.
HTTP 클라이언트라고도 한다.
HTTP 클라이언트 , HTTP 서버는 WWW(월드와이드웹)의 기본 요소다.
더 자세하게 들어가면 브라우저에서 파싱하여 렌더링 하는 과정, 주소창에 입력된 URL에 대해서 얘기해볼 수 있다.
웹 서버는 웹 리소스를 관리하고, 제공한다.
어떤 종류의 콘텐츠 소스도 리소스가 될 수 있다. 스프레드시트데이터도, 공공도서관 서가탐색 웹 게이트웨이도. 인터넷 검잭 엔진도.
인터넷은 수천 가지의 데이터 타입을 다루게 된다.
그렇게 많다면, http 요청과 응답을 주고받을 때 받게 되는 데이터의 타입이 어떤 것인지 알아야 하지 않을까?
⇒ MIME이라는 미디어 타입 라벨을 붙인다.
MIME(Multipurpose Internet Mail Extensions), 다목적 인터넷 메일 확장 : 각기 다른 이메일 시스템 사이에서 메시지가 오갈 때 생기는 문제점을 해결하기 위해 설계되었으나, 워낙 메일 시스템에서 잘 사용되어서 http에서도 멀티미디어 콘텐츠를 기술하고, 라벨을 붙이기 위해 채택되었다고 한다.
웹 서버는 모든 HTTP 객체 데이터에 MIME타입을 붙인다. 웹 브라우저는 서버로부터 응답을 받을 때, 다룰 수 있는 객체인지 확인한다.
ex) Content-Type: image/jpeg
Content-Type: application/json charset-utf-8
웹 서버 리소스는 각자의 고유한 이름을 갖고 있고, 이를 통해 정보 리소스를 고유하게 식별하고 위치를 저장한다. 이 이름을 URI라고 한다.
클라이언트는 원하는 리소스를 지목하기 위해 URI를 사용한다.
URI에는 URL, URN이 있다.
통상적으로 URI = URL로 사용된다.
HTTP 트랜잭션은 요청 명령과 응답 결과로 구성된다. 이는 HTTP 메시지를 사용해서 이루어지며, HTTP메시지는 정형화된 데이터 덩어리이다.
HTTP는 여러가지 종류의 요청 명령을 지원하고, 모든 HTTP 요청 메시지는 무조건 한 개의 메서드를 갖는다. 메소드는 서버에게 어떤 동작이 취해져야 하는지를 말해준다.
HTTP 메소드 | 설명 |
---|---|
GET | 지정한 리소스를 서버에서 클라이언트로 보내라! |
PUT | 클라이언트에서 지정한 이름의 리소스로 서버로 보낸 데이터를 저장해라! |
DELETE | 지정한 리소스를 서버에서 삭제해라! |
POST | 클라이언트 데이터를 서버 게이트웨이 애플리케이션으로 보내라. |
HEAD | 지정한 리소스에 대한 응답에서, HTTP 헤더 부분만 보내라. |
클라이언트에게 요청이 성공했는지, 추가적 조치가 필요한지 알려주는 세 자리 숫자.
모든 HTTP 응답 메시지는 상태 코드와 함께 반환된다.
HTTP 상태 코드 | 설명 |
---|---|
200 | OK 좋다. 문서가 바르게 반환되었음. |
201 | Created 서버 개체 생성요청 성공 |
401 | Unauthorized 클라이언트 인증 필요 |
403 | Forbidden 요청이 서버에 의해 거부됨. |
404 | Page Not Found 없음. 리소스를 찾을 수 없다 |
http는 상태코드와 사유구절(reason phrase)도 함께 보낸다. ex) Forbidden
Page Not Found
등등..
웹페이지는 보통 하나의 리소스가 아니라, ‘리소스의 모음’이다.
html 뼈대를 한번의 트랜잭션으로 가져오고, 그 외 이미지, 그래픽, js 등등을 추가로 가져온다.
이처럼 브라우저는 시각적으로 풍부한 웹페이지를 가져올 때 대량의 http 트랜잭션을 수행한다.
http 요청, 응답 메시지의 형식은 굉장히 비슷하며, 단순한 줄 단위의 일반 텍스트이기 때문에 사람이 읽고 쓰기 쉽다.
:
로 구분되어 이름과 값의 쌍으로 구성된다. 헤더는 빈 줄로 끝난다.(\n\n)Accept: application/json
Content-type: text/plain
...http request message
GET index.html HTTP/1.0
User-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.57 Whale/3.14.133.23 Safari/537.36
Host : www.diggging.com
Accept: text/html, image/gif, image/jpegAccept-language: ko
시작줄에 GET메소드, 로컬 리소스, HTTP프로토콜 1.0버전으로 요청을 보내고 있음.
본문은 없음 - 간단한 문서를 가져올 땐 요청 데이터가 필요 없음 (GET메소드)
http response message
HTTP/1.0 200 OK
Date: Fri, 15 Apr 2022 15:08:47 GMT
server: Vercel
Content-length: 403
Content-Type: text/html
<HTML>
<HEAD><TITLE>Diggging</TITLE></HEAD>
<BODY>
....
</BODY>
버전번호, 성공 상태코드(200), 사유 구절(OK)
응답 헤더 필드 영역
요청한 문서에 대한 응답 본문.(HTML)
응답 본문의 길이는 Content-legnth 헤더에, 문서의 MIME 타입은 Content-Type에 있다.
어떻게 메시지가 TCP(Transmission Control Protocol, 전송제어 프로토콜) 커넥션을 통해 한 곳에서 다른 곳으로 옮겨갈까?
TCP와 IP가 층을 이루는, 패킷 교환 네트워크 프로토콜의 집합. 네트워크와 하드웨어의 특성을 숨기고, 어떤 종류의 컴퓨터나 네트워크든 서로 신뢰성 있는 의사소통을 하게 히준다.
HTTP는 애플리케이션 계층 프로토콜이다. 네트워크 통신의 세부사항에 대해 신경쓰지 않고, 대신 대중적, 신뢰성있는 인터넷 전송 프로토콜인 TCP/IP에게 맡긴다. 일단 TCP커넥션이 맺어지면, 클↔서버 간 교환되는 메시지가 손상되거나 순서가 바뀌는 일은 결코 없다.
사실, 인터넷 자체가 TCP/IP에 기초하고 있다.
HTTP 프로토콜은 TCP위의 계층.(메시지를 전송하기위해 TCP사용)
TCP는 IP위의 계층
HTTP |
---|
TCP |
IP |
네트워크를 위한 링크 인터페이스 |
물리적인 네트워크 하드웨어 |
HTTP클라이언트가 서버에 메시지 전송 전, 인터넷 프로토콜(Internet Protocol, IP)주소와 포트번호를 사용해서 클↔서버간에 TCP/IP 커넥션을 맺어야 한다. → 서로 연결된 상태에서 이후 원하는 요청과 응답을 주고받는다.
TCP 커넥션을 위해 IP주소, 포트번호 필요
⇒ URL을 사용하여 알아낸다. URL은 리소스에 대한 주소이기 때문에 해당 리소스를 갖고있는 장비에 대한 IP주소를 알 수 있다.
(1) http://207.83.29:80/index.html
(2) http://www.netscape.com:80/index.html
(3) http://www.diggging.com/index.html
(1) 주소는 IP주소와 포트번호 80을 갖고있다.
(2) 주소는 IP주소가 없으나, 글자로 된 domain이름 혹은 호스트명 ‘www.netscape.com’을 갖고 있다.
호스트 명은 IP 주소에 대한 별명이라고 생각하면 된다. DNS(Domain Name Service, 도메인 이름 서비스)가 호스트 명을 쉽게 IP주소로 바꿔준다.
(3) 주소는 포트번호가 없다. HTTP URL에 포트번호가 없다면 기본값 80이라고 가정하면 된다.
클라이언트와 서버 사이에 위치하여 클라이언트의 모든 HTTP요청을 받아 요청을 수정하여 서버에 전달한다. 사용자를 대신해서 서버에 접근하며, 주로 보안을 위해 사용된다.
즉, 신뢰할 만한 중개자 역할을 하며 요청과 응답을 필터링한다.
EX) 무언가 다운받을 때 바이러스 검출 / 초등학교 학생들로부터 성인 콘텐츠 차단 . ...
웹 캐시, 캐시 프락시는 자신을 거쳐가는 문서 중 자주 찾는 것의 사본을 저장해두는 특별한 종류의 HTTP 프락시 서버.
클라이언트가 같은 문서를 요청하면, 그 캐시가 갖고 있는 사본을 받을 수 있다.
멀리 떨어진 웹서버보다 근처 캐시에서 훨씬 더 빨리 문서를 다운 받을 수 있다.
HTTP는 캐시를 효율적으로 동작하게하고, 캐시된 콘텐츠를 최신버전으로 유지, 프라이버시 보호를 위한 기능들을 정의한다.
다른 서버들의중개자로 동작하는 특별한 서버.
주로 HTTP트래픽을 다른 프로토콜로 변환하기 위해 사용됨. 언제나 스스로가 리소스를 갖고 있는 진짜 서버인 것 처럼 요청을 다룬다.
클라이언트는 자신이 게이트웨이와 통신하고 있음을 알아채지 못한다.
날 데이터를 열어보지 않고 그대로 전달해주는 HTTP애플리케이션.주로 비 HTTP 데이터를 하나 이상의 HTTP 연결을 통해 그대로 전송해주기 위해 사용함.
(잘 이해가 안 됨..)
에
사용자를 위해 HTTP요청을 만들어주는 클라이언트 프로그램 모두.
웹 브라우저도 에이전트이다.
스스로 웹을 돌아자니며 HTTP 트랜잭션을 일으키고 콘텐츠를 받아오는 자동화된 사용자 에이전트도 있다. = ‘스파이더’, ‘웹 로봇’. → 웹을 돌아다니며 검색엔진 DB나 가격비교 로봇을 위한 유용한 웹 콘텐츠 보관소를 만든다.
🌰 이어지는 장에서 HTTP 프로토콜, 애플리케이션, 리소스의 구조에 대해 자세히 설명할 것입니다.