HTTP는 신뢰성 있는 데이터 전송 프로토콜(TCP/IP)을 사용
→ 전송 중 데이터가 손상되거나 왜곡되는 일이 없음
웹 서버(HTTP 서버)는 HTTP 프로토콜로 의사소통
예를 들어 [www.naver.com/index.html](http://www.naver.com/index.html)
페이지에 접속하는 경우, 웹 브라우저가 www.naver.com
에 HTTP 요청을 보냄. 해당 서버에서 요청한 파일 (index.html
)을 찾아 파일과 파일 정보를 함께 HTTP 응답으로 클라이언트에 보내줌.
웹 서버는 모든 리소스를 관리하고 제공
리소스는 정적 파일인 텍스트파일, HTML 파일, 워드 파일, 이미지파일, 동영상 파일 등 부터 동적 콘텐츠 리소스인 라이브영상, 데이터베이스 검색 등이 있음.
→ 어떤 종류의 콘텐츠 소스도 리소스가 될 수 있음.
HTTP는 웹에서 전송되는 객체 각각에 MIME 타입이라는 데이터 포맷 라벨을 붙여 수천가지 데이터 타입을 구분함. MIME 타입은 주타입과 부타입이 사선으로 구분된 형태를 띄며, 수백가지로 이루어져 있음.
클라이언트가 원하는 특정 서버 리소스를 고유하게 식별하고 위치를 지정하기 위해 웹 서버 리소스는 이름을 가짐. 이를 URI라고 함. URI는 URL과 URN으로 나뉨.
특정 서버의 한 리소스에 대한 구체적인 위치를 서술
URL은 크게 세가지로 나뉨
리소스의 위치에 영향을 받지 않는 유일무이한 이름 역할
하지만 기술적인 이슈로 잘 사용되지 않음.
HTTP 트랜잭션은 “요청 명령”과 “응답 결과”로 구성
요청 명령과 응답 결과는 HTTP 메시지라고 불리는 정형화된 데이터 덩어리를 이용해 이뤄짐.
모든 HTTP 요청 메세지는 한 개의 메서드를 가지며, 메서드는 서버에게 어떤 동작이 취해져야 하는지 알려주는 역할을 함.
모든 HTTP 응답 메세지는 상태 코드와 함께 반환. 반환된 상태 코드에 텍스트로 된 사유 구절도 함께 포함
애플리케이션을 수행하기 위해 여러 HTTP 트랜잭션이 수행됨. 따라서 웹페이지는 하나의 리소스가 아닌 리소스 모음
HTTP 메시지는 단순한 줄 단위의 문자열
웹 클라이언트 → 웹 서버 : 요청 메시지
웹 서버 → 웹 클라이언트 : 응답 메시지
메시지는 다음 세가지 요소로 구성
어떻게 메시지가 TCP 커넥션을 통해 한 곳에서 다른 곳으로 옮겨지는 지
HTTP는 애플리케이션 계층 프로토콜. 네트워크 통신의 핵심적인 세부사항에 대해 신경쓰지 않음.
TCP는 다음과 같은 특성을 가짐
TCP/IP는 각 네트워크와 하드웨어의 특성을 숨기고, 어떤 종류의 컴퓨터나 네트워크든 서로 신뢰성 있는 의사소통을 하도록 도와줌
트랜잭션을 발생시키기 전에 인터넷 프로토콜 주소와 포트번호를 사용해 클라이언트와 서버 사이에 TCP/IP 커넥션이 필요
TCP에선 이 두가지가 필요
→ 이를 알아내기 위해 URL
사용
❓ 그럼 매 요청때마다 커넥션이 이뤄져야 하는건가?
기존에는 요청시마다 커넥션이 새롭게 생성되어야 했지만, 1.1에서는 커넥션을 유지해 커넥션 생성에 드는 시간을 절약
클라이언트와 서버 사이에 위치, 클라이언트의 모든 HTTP 요청을 받아 서버에 전달.
보안을 위해 사용되며 요청과 응답을 필터링해 불필요하거나 위험한 리소스를 차단
자주 찾는 것의 사본을 클라이언트 가까이 저장해두는, 특별한 종류의 HTTP 프락시 서버
다른 서버들의 중재자로 동작하는 특별한 서버로 HTTP 트래픽을 다른 프로토콜로 변환하기 위해 사용
단순히 HTTP 통신을 전달하기만 하는 특별한 프락시
두 커넥션 사이에서 날것의 데이터를 열어보지 않고 그대로 전달해주는 HTTP 어플리케이션
주로 비HTTP 데이터를 하나 이상의 HTTP 연결을 통해 그대로 전송해주기 위해 사용하며 암호화된 SSL 트래픽을 HTTP 커넥션으로 전송
자동화된 HTTP 요청을 만드는 준지능적 웹 클라이언트
사용자를 위해 HTTP 요청을 만들어주는 클라이언트 프로그램
예) 웹 크롤링 봇 → user-agent 속성을 이용해 크롤링 설정하기