1장 HTTP 개관
미디어 타입
- HTTP는 웹에서 전송되는 객체 각각에 MIME 타입이라는 데이터 포맷 라벨을 붙인다.
- MIME 타입은 '/' 으로 구분된 주 타입과 부 타입으로 이루어진 문자열 라벨이다. MIME 타입의 목록은 Mozilla MDN 에서 확인 가능하다.
URI(Uniform Resource Identifier)
- URI는 정보 리소스를 고유하게 식별하고 위치를 지정하며, URL과 URN으로 나뉜다.
- URL(Uniform Resource Locator, 통합 자원 지시자)
* 특정 서버의 한 리소스에 따라 구체적인 위치를 서술한다. 그렇기 때문에 리소스가 정확히 어디에 있고 어떻게 접근할 수 있는지 알려준다.
* 대부분의 URL은 세 부분으로 이루어진 표준 포맷을 따른다.
https://logical-code.tistory.com/103
① 스킴(Scheme) : 리소스에 접근하기 위해 사용되는 프로토콜. 보통 http:// 였으나 보안 이슈로 인한 SSL 적용으로 https:// 가 많다.
② 서버의 인터넷 주소
③ 웹 서버의 리소스
* 대부분의 URI는 URL이다.
- URN(Uniform Resource Name)
* 콘텐츠를 이루는 한 리소스에 대해 그 리소스의 위치에 영향을 받지 않는 유일무이한 이름
* 리소스를 옮기더라도 문제없이 동작한다.
* 리소스의 이름을 유지하는 한 여러 종류의 프로토콜로 접근해도 문제가 없다.
메서드
- 모든 HTTP 요청 메시지는 한 개의 메서드를 갖는다.
- 보통 아래 메서드를 이용한다.
HTTP 메서드 |
설명 |
|
GET |
서버에서 클라이언트로 지정한 리소스를 보낸다. |
|
PUT |
클라이언트에서 서버로 보낸 데이터를 지정한 이름의 리소스로 저장한다. |
|
DELETE |
지정한 리소스를 서버에서 삭제한다. |
|
POST |
클라이언트 데이터를 서버 게이트웨이 애플리케이션으로 보낸다. |
|
HEAD |
지정한 리소스에 대한 응답에서 HTTP 헤더 부분만 보낸다. |
메시지
- 시작줄 : 요청이라면 무엇을 해야하는지, 응답이라면 무슨 일이 일어났는지 나타낸다.
- 헤더
* 각 헤더 필드는 ':' 으로 구분되어있는 하나의 이름과 하나의 값으로 구성된다.
* 헤더 필드를 추가하려면 그냥 한 줄을 더하기만 하면 된다.
* 빈 줄로 끝난다.
- 본문
* 요청의 본문은 웹 서버로 데이터를 실어 보내고 응답의 본문은 클라이언트로 데이터를반환한다.
* 헤더와 달리 임의의 이진 데이터를 포함할 수 있다.(이미지, 비디오, 오디오 등)
TCP/IP
- HTTP는 애플리케이션 계층 프로토콜이다.
- TCP/IP는 아래 세가지 항목을 보장한다.
* 오류 없는 데이터 전송
* 순서에 맞는 전달 → 데이터는 언제나 보낸 순서대로 도착한다.)
* 조각나지 않는 데이터 스트림
- TCP와 IP가 층을 이루는 패킷 교환 네트워크 프로토콜의 집합
- 일단 TCP 커넥션이 맺어지면 클라이언트와 서버 간의 교환되는 메시지가 없어지거나 손상되거나 순서가 뒤바뀌어 수신되는 일은 결코 없다.
HTTP |
애플리케이션 계층 |
|
TCP |
전송 계층 |
|
IP |
네트워크 계층 |
|
네트워크를 위한 링크 인터페이스 |
데이터 링크 계층 |
|
물리적인 네트워크 하드웨어 |
물리 계층 |
- HTTP를 이용해서 서버의 HTML 리소슬르 보여주는 과정
1. 서버의 URL에서 호스트명을 추출한다.
2. 서버의 호스트명을 IP로 변환한다.
3. URL에 포트번호가 있다면 추출한다.
4. 웹 서버와 TCP 커넥션을 맺는다.
5. 서버에 HTTP 요청을 보낸다.
6. 서버로부터 HTTP 응답을 받는다.
7. 커넥션이 닫히면 문서를 보여준다.
웹의 구성요소
- 프락시
* 클라이언트와 서버 사이에 위치한 HTTP 중개자
* 클라이언트와 서버 사이에 위치해 클라이언트의 모든 HTTP 요청을 받아 서버에 전달한다.
* 주로 보안을 위해 사용되며 요청과 응답을 필터링한다.
- 캐시
* 많이 찾는 웹 페이지를 클라이언트 가까이 보관하는 HTTP 창고
* 웹 캐시와 캐시 프락시는 자신을 거쳐가는 문서들 중 자주 찾는 것의 사본을 저장해두는 HTTP 프락시 서버
* 다음번에 클라이언트가 같은 문서를 요청하면 그 캐시가 갖고있는 사본을 받을 수 있다.
* 클라이언트는 멀리 떨어진 웹 서버보다 근처의 캐시에서 훨씬 더 빨리 문서를 다운받을 수 있다.
- 게이트웨이
* 다른 서버들의 중개자로 동작하는 특별한 서버
* 주로 HTTP 트래픽을 다른 프로토콜로 변환하기 위해 사용된다.
* 스스로가 리소스를 갖는 진짜 서버인 것처럼 요청을 다루기 때문에 클라이언트는 자신이 게이트웨이와 통신하고 있음을 알아채지 못한다.
- 터널
* 단순히 HTTP 통신을 전달하기만 하는 특별한 프락시
* 주로 비 HTTP 데이터를 하나 이상의 HTTP 연결을 통해 그대로 전송해주기 위해 사용된다.
* SSL에 이용되며, HTTP/SSL 터널은 HTTP 요청을 받아들여 목적지의 주소와 포트 번호로 커넥션을 맺고 이후에는 암호화된 SSL 트래픽을 HTTP 채널을 통해 목적지 서버로 전송할 수 있게 된다.
'🚽 Deprecated > HTTP 완벽가이드' 카테고리의 다른 글
4장 : 커넥션 관리 (0) | 2019.08.25 |
---|---|
2장 : URL과 리소스 (0) | 2018.12.24 |