[HTTP] 웹 기초
2021. 9. 3. 15:36
[TOC]
HTTP : 웹의 기초
01. HTTP 개관
- HTTP에 대한 개략적인 이야기를 담은 챕터
- 주요 포인트
- 얼마나 많은 클라이언트와 서버가 통신하는가
- 리소스가 어디서 오는가
- 웹 트랜잭션의 작동방식
- HTTP 통신을 위해 사용하는 메시지 형식
- HTTP 기저의 TCP 네트워크 전송
- 여러 종류의 HTTP 프로토콜
- 인터넷 곳곳에 설치된 다양한 HTTP 구성요소
1.1 HTTP: 인터넷의 멀티미디어 배달부
- HTTP(Hypertext Transfer Protocol)
- HTTP는 신뢰성 있는 데이터 전송 프로토콜을 사용하기 때문에 데이터가 손상되거나 꼬이지 않음을 보장
- 개발자는 인터넷의 결함이나 약점에 대한 걱정 없이 애플리케이션 고유의 기느을 구현하는데 집중할 수 있음
1.2 웹 클라이언트와 서버
- 서버는 HTTP 프로토콜로 소통하기 때문에 HTTP 서버라고 불림
- 클라이언트가 요청한 데이터를 제공함
- 가장 흔한 클라이언트는 인터넷 익스플로러나 크롬
- 서버는 클라이언트의 요청을 받은 객체를 찾고 성공했다면 그것의 타입, 길이 등의 정보와 함께 HTTP 응답에 실어서 클라이언트에 보냄
1.3 리소스
- 웹 서버가 웹 리소스를 관리하고 제공함
- 가장 단순한 웹 리소스는 웹 서버 파일 시스템의 정적파일(text, html, jpeg, avi 등)
- 동적 컨텐츠는 사용자가 누구인지, 어떤걸 요청했는지에 따라 결과물이 달라진다.
- 미디어타입
- HTTP는 웹에서 전송되는 객체 각각에 신중하게 MIME 타입이라는 데이터 포맷 라벨을 붙임
- MIME = Multipurpose Internet Mail Extensions, 다목적 인터넷 메일 확장
- EMAIL 시스템에서 사용하다가 HTTp에서 멀티미디어 콘텐츠를 기술하고 라벨을 붙이기 위해 채택됨
- HTTP는 웹에서 전송되는 객체 각각에 신중하게 MIME 타입이라는 데이터 포맷 라벨을 붙임
- 웹 서버는 모든 HTTP 객체 데이터에 MIME 타입을 붙인다.
- 웹 브라우저는 MIME 타입을 통해 다룰 수 있는 객체인지 확인한다.
- 종류 (Content-type : 주타입/부타입)
- HTML -> text/html
- plain ASCII -> text/plain
- JPEG -> image/jpeg
- GIF -> image/gif
- 애플 퀵타입 동영상 -> video/quicktime
- MS ppt -> application/vnd.ms-powerpoint
- URI
- 웹 서버 리소스는 각자 이름을 갖고 있기 때문에 식별자를 사용한다
- URI = Uniform Resource Identifier, 통합 자원 식별자
- 식별자는 URL과 URN이 있음
- URL
- URL = Uniform Resource Locator, 통합 자원 지시자
- URL은 특정 서버의 한 리소스에 대한 구체적인 위치를 서술함
- URN
- URN = Uniform Resource Name, 유니폼 리소스 이름
- 콘텐츠를 이루는 한 리소스에 대해, 그 리소스의 위치에 영향 받지 않는 유일무이한 이름 역할을 함
- urn:ietf:rfc:2141 --> 'RFC 2141'이 어디에 있든 지칭하는 URN임
1.4 트랜잭션
- HTTP 트랜잭션은 요청 명령(Request)과 응답 결과(Response)로 구성되어 있음
- 이 상호작용은 HTTP 메시지라고 불리는 정형화된 데이터 덩어리를 통해 이뤄짐
- 메소드
- HTTP는 HTTP메소드라고 불리는 여러 가지 종류의 요청 명령을 지원
- 모든 HTTP 요청 메시지는 한개의 메소드를 갖는다.
HTTP 메소드 | 설명 |
---|---|
GET | 서버에서 클라이언트로 지정한 리소스를 보내라 |
PUT | 클라이언트에서 서버로 보낸 데이터를 지정한 이름의 리소스로 저장하라 |
DELETE | 지정한 리소스를 서버에서 삭제하라 |
POST | 클라이언트 데이터를 서버 게이트웨이 어플리케이션으로 보내라 |
HEAD | 지정한 리소스에 대한 응답에서, HTTP 헤더 부분만 보내라 |
- 상태코드
- 모든 HTTP 응답 메시지는 상태 코드와 함께 반환됨
HTTP 상태 코드 | 설명 |
---|---|
200 | 좋다. 문서가 바르게 반환되었다. |
302 | 다시 보내라, 다른 곳에 가서 리소스를 가져가라 |
404 | 없음 리소스를 찾을 수 없다 |
- 웹 페이지는 여러 객체로 이루어질 수 있다.
- 한 페이지 내에서 여러가지 HTTP 트랜잭션이 수행 될 수 있다는 말이다.
1.5 메시지
- HTTP 메시지는 단순한 줄 단위의 문자열이다.
- 웹 클라이언트에서 웹 서버로 보낸 HTTP 메시지를 요청 메시지라고 부른다.
- 서버에서 클라이언트로 가는 메시지는 응답 메시지라고 부른다.
- 요청 메시지
GET /test/hi-there.txt HTTP/1.0 시작줄
---------------------------------
Accept: text/* 헤더
Accept-Language: en, fr
- 응답 메시지
HTTP/1.0 200 OK 시작줄
---------------------------------
Content-type: text/plain 헤더
Content-length: 19
---------------------------------
Hi! I'm a Message 본문
- 시작줄
- 메시지의 첫줄
- 요청 -> 무엇을 해야하는지 표현
- 응답 -> 무슨일이 일어났는지 표현
- 헤더
- 시작줄 다음으론 0개 이상의 헤더가 이어짐
- 구문분석을 위해 콜론(:)으로 구분됨
- 헤더는 빈 줄로 끝남
- 본문
- 헤더에서 끝난 빈 줄 다음에는 어떤 종류의 데이터는 들어갈 수 있는 메시지 본문이 필요에 따라 온다.
- 요청의 본문은 웹 서버로 보낼 데이터를 담음
- 응답의 본문은 웹 클라이언트로 데이터를 반환
- 문자열이며 임의의 이진 데이터를 포함할 수 있음(이미지, 비디오 오디오 트랙 등)
1.6 TCP 커넥션
- TCP : Transmission Control Protocol, 전송 제어 프로토콜
- TCP / IP
- HTTP는 어플리케이션 계층 프로토콜이다.
- HTTP는 네트워크 통신의 핵심적인 세부사항은 신경쓰지 않는다.
- TCP /IP에게 맡긴다.
- 오류 없는 데이터 전송
- 순서에 맞는 전달 (데이터는 보낸 순서대로 도착)
- 조각나지 않는 데이터 스트림 (언제는 어떤 크기로 보낼 수 있음)
- TCP / IP는 TCP와 IP가 층을 이루는, 패킷 교환 네트워크 프로토콜의 집합이다.
- 각 네트워크와 하드웨어의 특성을 숨기고, 어떤 종류의 컴퓨터나 네트워크든 서로 신뢰성 있는 의사소통을 하게 해준다.
- 일단 TCP 커넥션이 맺어지면, 클라이언트와 서버 컴퓨터 간에 교환되는 메시지가 없어지거나, 손상되거나, 순서가 뒤바뀌어 수신된느 일은 결코 없다.
- 접속, IP 주소 그리고 포트번호
- HTTP 클라이언트가 서버에 메시지를 전송할 수 있게 되기전에 IP주소와 포트번호를 사용해 TCP / IP 커넥션을 맺어야 함
- TCP는 서버 컴퓨터에 대한 IP 주소와 그 서버에서 실행 중인 프로그램이 사용 중인 포트번호가 필요함
- 앞서 말한 URL로 주소를 알아낼 수 있음
http://207.200.83.29:80/index.html
: IP주소 207.200.83.29
port번호 80
http://www.netscape.com:80/index.html
: 도메인 이름 or 호스트명 www.netscape.com --> DNS를 통해 IP로 변환 가능
port 번호 80
http://www.netscape.com/index.html
: 도메인 이름 or 호스트명 www.netscape.com
port번호가 생략되면 default가 80이다.
통신 순서
1. 웹브라우저는 서버의 URL에서 호스트 명 추출
2. 웹브라우저는 서버의 호스트명을 IP로 반환 (DNS)
3. 웹브라우저는 URL 포트번호(있다면) 추출
4. 웹브라우저는 웹 서버와 TCP 커넥션 맺음
5. 웹브라우저는 서버에 HTTP 요청 보냄
6. 서버는 웹브라우저에 HTTP 응답 리턴
7. 커넥션이 닫히면 웹브라우저는 문서를 보여줌
1.7 프로토콜 버전
- HTTP/0.9
- 1991년에 잠깐 사용
- GET메소드만 지원, HTTP 헤더 X
- HTTP/1.0
- 버전 번호, HTTP 헤더, 추가 메소드, 멀티미디어 객체 처리 추가됨
- HTTP/1.1
- 가장 많이 사용됨
- HTTP 설계의 구조적 결함 교정, 두드러진 성능 최저고하, 잘못된 기능제거에 집중
@@ 1.0 vs 1.1 https://it-mesung.tistory.com/146
- HTTP/2.0
- HTTP/1.1 성능 문제를 개선하기 위해 구글의 SPDY 프로토콜을 기반으로 설계 진행
1.8 웹의 구성요소
- 프록시 (proxy)
- 프록시서버는 웹 보안, 어플리케이션 통합, 성능 최적화를 위한 중요한 구성요소
- 클라이언트와 서버 사이에 위치하여 클라이언트의 모든 HTTP 요청을 받아 서버에 전달
- 주로 보안을 위해 사용, 신뢰 할 만한 중개자 역할
- 모든 요청과 응답을 필터링(바이러스 검출 및 콘텐츠 차단 기능)
- 캐시(cache)
- 자주 찾는 문서의 사본을 저장해두는 일종의 프록시 서버
- 클라이언트가 같은 문서를 요청하면 캐시에서 사본을 보냄
- 서버까지 요청이 안가도 되서 응답이 빠름
- 게이트웨이
- 다른 서버들의 중개자로 동작하는 특별한 서버
- HTTP 트래픽을 다른 프로토콜로 변환하기 위해 사용
- HTTP/FTP 게이트웨이는 FTP URI에 대한 HTTP 요청을 받아 FTP 프로토콜을 이용해 문서를 받아옴
- 터널
- 터널은 두 커넥션 사이에서 raw 데이터를 열어보지 않고 그대로 전달해주는 HTTP 어플리케이션
- HTTP 터널은 주로 비 HTTP 데이터를 하나 이상의 HTTP 연결을 통해 그대로 전송해주기 위해 사용
- 대표적인 예시는 암호화된 SSL 트래픽을 HTTP 커넥션으로 전송하여 방화벽을 통과시킴
- 에이전트
- 사용자 에이전트는 사용자를 위해 HTTP 요청을 만들어주는 클라이언트 프로그램
reference : HTTP 완벽 가이드
'CS > 네트워크' 카테고리의 다른 글
[HTTP] 커넥션 관리 (0) | 2021.09.17 |
---|---|
[HTTP] HTTP 메시지 (메소드, 상태코드, 헤더) (0) | 2021.09.12 |
[HTTP] URL과 리소스 정리 (0) | 2021.09.05 |
[HTTP] GET,POST 정리 및 차이점 (0) | 2021.07.13 |
[네트워크] OAuth 2.0이란? (0) | 2021.04.17 |