HTTP 프로토콜로 의사소통
( ➜ HTTP 서버라고 불리기도 함 )
인터넷의 데이터 저장
HTTP 클라이언트가 요청한 데이터 제공
웹 리소스를 관리 / 제공
웹 콘텐츠의 원천
어떤 종류의 콘텐츠 소스도 리소스가 될 수 있음
( 요청에 따라 정적 파일 / 동적 콘텐츠 등 )
인터넷은 수천가지의 데이터 타입을 다루기 때문에, HTTP는 웹에서 전송되는 객체 각각에 MIME 타입을 붙임
웹 서버는 모든 HTTP 객체 데이터에 MIME 타입을 붙임
Ex. Content-type: image/jpeg
웹브라우저가 서버로 부터 객체를 돌려받을 때,
이 MIME 타입을 통해 다룰 수 있는 객체인지 아닌지 확인
✔️ MIME 타입 (Multipurpose Internet Mail Extenstions, 다목적 인터넷 메일 확장 )
- 데이터 포멧 라벨
- 원래는 각기 다른 전자메일 시스템 사이에서 메시지가 오갈 때 겪는 문제점을 해결하기 위해 설계되었으나, HTTP에서도 멀티미디어 콘텐츠를 기술하고 라벨을 붙이기 위해 채택됨
- 사선(/)으로 구분된 주타입(primary object type)과 부타입(specific subtype)으로 이루어진 문자열 라벨
ㅤ
Ex. HTML로 작성된 텍스트 문서의 MIME 타입 ➜ text/html
Ex. JPEG 이미지의 MIME 타입 ➜ image/jpeg
정보 리소스를 고유하게 식별하고 위치를 지정
프로토콜, 서버, 리소스를 명시
Ex. https://velog.io/@wnguswn7/example.gif
URL과 URN으로 나뉨
리소스 식별자의 가장 흔한 형태
특정 서버의 한 리소스에 대한 구체적인 위치를 서술
< 스킴://서버위치/경로 > 세 부분으로 이루어진 표준 포맷을 따름
✔️ URL 구성요소
- 스킴 (어떻게)
➜ 리소스 접근을 위해 프로토콜을 서술하는 부분 ( 보통 HTTP 프로토콜 (http://) )
ㅤ- 서버의 인터넷 주소 (어디에)
➜ 호스트명 or ip주소
ㅤ- 웹서버의 리소스 (무엇을)
Ex. https://velog.io/@wnguswn7/example.gif
ㅤ스킴ㅤ|ㅤ서버의 인터넷 주소ㅤ|ㅤ웹서버의 리소스
리소스의 위치에 영향을 받지 않는 유일무이한 이름의 역할
위치 독립적이기 때문에 리소스의 위치를 옮기더라도 문제없이 동작
리소스 위치 분석을 위한 인프라 지원이 필요한데 그런 인프라의 부재 때문에 아직 여전히 실험 중인 상태
Ex. urn:ietf:rfc:2141
HTTP 메시지라 불리는 정형화된 데이터 덩어리를 이용해 이루어짐
명령과 URI를 포함하는 요청 명령과 트랜잭션의 결과를 포함하는 응답 결과로 이루어짐
애플리케이션은 보통 하나의 작업을 수행하기 위해 여러 HTTP 트랜잭션을 수행함
Ex. 하나의 웹 페이지는 리소스의 모음이기 때문에 각각의 리소스를 가져오기 위한 여러개의 트랜잭션이 필요
모든 HTTP 요청 메시지는 한개의 메서드를 가짐
서버에게 어떤 동작이 취해져야하는지 말해주는 역할
Ex. GET / PUT / DELETE / POST / HEAD
모든 HTTP 응답 메시지는 상태 코드와 함께 반환됨
숫자 상태코드와 함께 텍스트의 사유 구절도 함께 보냄
Ex. 200 OK / 200 Success 모두 같은 것
- 요청 메시지
➜ 웹 클라이언트 -> 서버로 보낸 HTTP 메시지
ㅤ- 응답 메시지
➜ 서버 -> 웹 클라이언트로 가는 메시지
- 시작줄
➜ 메시지의 첫 줄 / 요청 - 무엇을 해야하는지 / 응답 - 무슨 일이 일어났는지
Ex. GET /example.html HTTP/1.0
⠀- 헤더
➜ 쌍점(:)으로 구분되어있는 하나의 이름과 하나의 값으로 구성
➜ 꼭 빈줄(CRLF)로 끝남
Ex. 응답 본문 길이는 Content-Length 헤더 / 문서의 MIME 타입은 Content-Type 헤더
⠀- 본문
➜ 요청 - 웹 서버로 데이터를 실어 보냄 / 응답 - 클라이언트로 데이터를 반환
HTTP는 애플리케이션 계층 프로토콜이고, 네트워크 통신의 핵심적인 세부사항에 대해서는 신경쓰지 않음
👉 TCP/IP 에게 맡김
TCP와 IP가 층을 이루는, 패킷 교환 네트워크 프로토콜의 집합
대중적이고 신뢰성있는 인터넷 전송 프로토콜
어떤 종류의 컴퓨터/네트워크든 신뢰성있는 의사소통을 가능하게 함
한 번 TCP 커넥션이 맺어지면,
클라이언트 - 서버 간 교환되는 메세지가 실종/손상되고, 불규칙한 순서로 수신되는 일은 결코 없음
TCP/IP 커넥션을 맺기 위해서는 서버 컴퓨터의 인터넷 프로토콜(IP) 주소와 그 서버에서 실행중인 프로그램이 사용 중인 포트번호가 필요
👉 URL을 이용해서 IP 주소와 포트번호를 알아낼 수 있음
- Ex 1. http://207.200.83.29:80/index.html
➜ IP 주소 = 207.200.83.29
➜ 포트번호 = 80
ㅤ- Ex 2. http://www.netscape.com:80/index.html
➜ IP 주소 = 호스트명(www.netscape.com)을 DNS를 통해 IP로 변환
➜ 포트번호 = 80
ㅤ- Ex 3. http://www.netscape.com/index.html
➜ IP 주소 = 호스트명(www.netscape.com)을 도메인 이름 서비스(DNS)를 통해 IP로 변환
➜ 포트번호 = 기본값 80이라고 가정
✔️ 호스트명
- IP 주소에 대한 이해하기 쉬운 형태의 별명
웹브라우저가 서버의 URL에서 호스트명 추출
웹브라우저가 추출한 호스트명을 IP로 변환
웹브라우저가 URL에서 포트번호 추출 ( 있다면 )
웹브라우저가 웹 서버와 TCP 커넥션을 맺음
웹브라우저가 서버에 HTTP 요청
서버가 클라이언트에게 HTTP 응답
커넥션이 닫히고 웹브라우저가 문서를 보여줌
클라이언트 - 서버 사이에 위치한 HTTP 중개자
클라이언트이 모든 HTTP 요청을 받아 서버에 전달 ( 대개 요청을 수정한 뒤에 )
사용자를 대신해 서버에 접근
주로 보안을 위해 사용
요청 / 응답을 필터링
Ex. 성인 콘텐츠 차단
자신을 거쳐가는 문서들 중 자주 찾는 것의 사본을 클라이언트 가까이에 보관하는 HTTP 창고
다음 번에 클라이언트가 같은 문서를 요청하면 서버에서 가져오는 것 보다 훨씬 더 빠르게 사본을 가져올 수 있음
다른 애플리케이션과 연결된 특별한 웹 서버
다른 서버들의 중개자로 동작
주로 HTTP 트래픽을 다른 프로토콜로 변환하기 위해 사용
Ex. HTTP/FTP 게이트웨이
➜ HTTP 클라이언트와 FTP 서버 사이에 위치하여,
HTTP 요청을 받아들인 뒤, FTP 프로토콜을 이용해 문서를 가져오고 /
받아온 문서는 HTTP 메세지에 담겨 클라이언트에게 보냄
단순히 HTTP 통신을 전달하기만 하는 특별한 프락시
두 커넥션 사이에서 데이터를 열어보지 않고 그대로 전달
주로 비 HTTP 데이터를 하나 이상의 HTTP 연결을 통해 그대로 전송해주기 위해 사용
Ex. 암호화된 SSL 트래픽을 HTTP 커넥션으로 전송하여 웹 트래픽만 허용하는 사내 방화벽을 통과시키는 것
➜ HTTP 요청을 받아들여 목적지의 주소와 포트번호로 커넥션을 맺고, 이후부터는 암호화된 SSL 트래픽을 HTTP 채널을 통해 목적지 서버로 전송 가능하게 됨
Ex. 사람의 통제 없이 스스로 웹을 돌아다니며 HTTP 트랜잭션을 일으키고 콘텐츠를 받아오는 스파이더나 웹 로봇
ㅤ
✔️ 스파이더
➜ 웹을 돌아니며, 검색엔진의 디이터베이스나 가격비교 로봇을 위한 제품 카탈로그와 같은 유용한 웹 콘텐츠 보관소를 만듦