본 내용은 책 'HTTP 완벽 가이드'를 참고해 작성했습니다.
1-1. HTTP(HyperText Transfer Protocol이란?)
클라이언트와 서버 사이에서 대량의 정보를 빠르고 간편하고, 정확하고, 신뢰성 있게 데이터 전송을 수행하는 프로토콜.
HTTP는 OSI 7계층(애플리케이션 계층) 프로토콜. 현재는 HTTP/1.1 버전이 상용화되어있다.
- HTTP/1.1의 특징
- keep-alive 설정으로 지속적 연결(persistent connection) 가능
- HTTP는 무상태, 비연결성이기 때문에 응답 받으면 연결이 끊어진다. 매번 연결과 해제를 해야하는 과정을 줄이기 위해 연결에 성공하면 keep-alive에 설정한 시간만큼 연결이 유지된다
- PipeLining
- 하나의 커넥션에서, 여러 요청을 응답을 기다리지 않고 연속적으로 보내,그 순서에 맞춰 응답을 받는 방식으로 지연 시간을 줄이는 방법
- keep-alive 설정으로 지속적 연결(persistent connection) 가능
웹 클라이언트(HTTP 클라이언트)와 서버(HTTP 서버)
월드 와이드 웹의 기본 요소, 웹 클라이언트로는 인터넷 익스플로러나 구글 크롬 같은 브라우저가 있다.
- 클라이언트와 서버의 통신
1-2. 리소스란?
리소스는 콘텐츠의 원천으로, 서버에서 관리한다.
- 예시
- 정적 파일
- 부스타 샘플 엑셀
- 텍스트 파일, HTML파일, JPEG 이미지 파일 등
- 동적 파일
- 요청에 따라 달라지는 파일
- 사용자, 요청한 정보, 몇 시 인지에 따라 각기 다른 리소스를 생성
- 라이브 영상, 주식 거래, 온라인 쇼핑몰 선물 구입
- 요청에 따라 달라지는 파일
- 정적 파일
→ 어떤 종류의 콘텐츠도 리소스가 될 수 있다!
미디어 타입
HTTP는 웹 서버에서 전송되는 데이터에는 MIME(Multipurpose Internet Mail Extensions) 타입이라는 데이터 포맷 라벨을 붙인다. 웹 브라우저는 서버로부터 받은 MIME 타입으로 핸들링 여부를 결정한다.
- MIME 타입
- 포맷 : 주 타입 / 부 타입
- HTML : text/html
- plain ASCII : text
- JPEG 이미지 : image/jpeg
- GIF 이미지 : image/gif
- 포맷 : 주 타입 / 부 타입
Content-type: image/jpeg
URI, URL, URN
URI(Uniform Resource Identifier)
웹 서버의 리소스는 각자 이름을 갖고 있기에 클라이언트는 특정 리소스를 지정할 수 있다. 이 서버 리소스를 지정하기 위해서는 위치와 식별자가 필요한데, 이를 URI라고 한다.
이런 URI에는 URL과 URN이 있다.
- URL (Uniform Resource Locator)
- 리소스 식별자의 가장 흔한 형태
- 특정 서버에 있는 하나의 리소스에 대한 구체적인 위치를 서술함
- 프로토콜, 서버, 리소스를 명시
- URL 분석
- scheme
- 리소스에 접근하기 위해 사용되는 프로토콜, 주로 http 혹은 https
- 서버의 인터넷 주소
- 웹 서버 리소스
- scheme
<http://www.joes-hardware.com/specials/saw-blade.gif>
- http : HTTP 프로토콜을 사용하라
- www.joes-hardware.com : www.joes-hardware.com으로 이동하라
- /specials/saw-blade.gif : 라고 불리는 리소스를 가져와라
- URN(Uniform Resource Name)
- 리소스의 위치에 영향 받지 않는 유일무이한 리소스의 이름 역할
- 위치 독립적이라 어디에 있더라도 리소스를 가져올 수 있음
- 여전히 실험 중인 상태이고, 아직 널리 채택되지 않았음
- 예시
- urn:ietf:rfc:2141 인터넷 표준 문서 'RFC 2141'이 어디에 있는지 상관없이 그것을 지칭하기 위해 사용 가능
1-3. HTTP 트랜잭션이란?
요청 명령(클라이언트 → 서버)과 응답 결과(서버 → 클라이언트)로 구성되어 있다. 요청을 보내고 응답을 받는 일련의 과정을 의미한다. 이 과정에서 메서드, 상태 코드를 주고 받는다.
- 메서드
- 서버에게 어떤 동작을 실행해야하는지 알려주는 명령어
- HTTP 요청 메시지 : 메서드 = 1 : 1
- 예시
- Get, Post, Put, Patch, Delete, Head(상태 코드 확인할 때 사용)
- 상태 코드
- 응답 메시지에 필수로 포함되어 있는 정보
- 클라이언트 요청의 결과를 간략하게 알려주는 세 자리 숫자
- 예시
- 200(요청 성공), 302(리다이렉션), 404(리소스 찾을 수 없음), 500(서버 에러), 502(gateway error), 400(Bad Reqeust)
메시지
- 시작줄
- 요청 : 무엇을 해야하는지 알려줌
- 응답 : 무슨 일이 일어났는지 알려줌
- 헤더(다다익선!)
- 제어권 있음, 디버깅, 크롤링에 용이
- 타입 : 정보 형태로 메시지에 대한 정보를 알려줌
- 본문
- 임의의 이진 데이터 포함 가능
- 이미지, 비디오, 오디오 트랙 등
1-4. TCP란?
HTTP의 네트워크 통신을 대신 해주는 대중적이고, 신뢰성 있는 전송 계층 프로토콜이다.
오류없는 데이터 전송, 순서 보장, 조각나지 않는 데이터 스트림을 제공한다.
일단 TCP 커넥션이 맺어지면, 클라이언트와 서버 컴퓨터 간에 교환되는 메시지가 없어지거나, 손상되거나, 순서가 뒤바뀌어 수신되는 일은 결코 발생하지 않는다.
HTTP와 TCP로 메시지를 주고 받으려면 서버의 IP 주소와 포트번호를 알아야한다. 이는 URL로 알아낼 수 있다!
IP주소와 포트번호 알아내고 통신하기
HTTP 포트 : 80
HTTPS 포트 : 443
SSH 포트 : 22
FTP 포트 :
<http://www.netscape.com>(호스트명)/index.html(리소스)
- 웹 브라우저는 서버의 URL에서 호스트명 추출
- 호스트 명 → IP 주소, URL에 포트 번호도 있다면 추출
- 클라이언트와 서버가 TCP 커넥션을 맺고
- 서버에 HTTP 요청 전송
- 서버가 클라이언트에 HTTP 응답
- 클라이언트에서 문서 보여줌
'네트워크 > HTTP' 카테고리의 다른 글
[HTTP] 4장 : 커넥션 관리 (2) | 2023.12.04 |
---|---|
[HTTP] 3장 : HTTP 메시지 (0) | 2023.12.04 |
[HTTP] 2장 : URL (0) | 2023.12.04 |