1. HTTP
- HTTP 는 신뢰성 있는 데이터 전송 프로토콜을 사용한다. 따라서 전송 중 데이터가 손상되거나 꼬이지 않음을 보장한다.
- 개발자는 인터넷의 결함이나 약점에 대한 걱정 없이 애플리케이션 고유의 기능을 구현하는 데 집중할 수 있다.
2. 웹 클라이언트와 서버
- 웹 서버 :
- HTTP 프로토콜로 의사소통하기 때문에 보통 HTTP 서버라고 불리며, 웹 콘텐츠는 이 웹 서버에 존재한다.
- 인터넷의 데이터를 저장하고, HTTP 클라이언트가 요청한 데이터를 제공한다.
- HTTP 클라이언트와 함께 월드 와이드 웹 (WWW) 의 기본 요소
- 웹 클라이언트
- 가장 흔한 클라이언트는 인터넷 익스플로러, 크롬 등의 웹 브라우저
- 서버에게 HTTP 객체를 요청하고 사용자의 화면에 보여줌
3. 리소스
- 웹 서버는 웹 리소스를 관리하고 제공한다.
- 가장 단순한 웹 리소스는 HTML, PNG, MP4 등의 정적 파일이다.
- 물론 정작 파일만 존재하는 것이 아닌, 동적으로 만들어주는 프로그램이 될 수도 있다.
미디어 타입
- 웹 서버는 모든 HTTP 객체에 MIME (Multipurpose Internet Mail Extensions, 다목적 인터넷 메일 확장) 타입을 붙인다. 이를 통해 웹브라우저는 자신이 다룰 수 있는 객체인지를 확인한다.
Ex) text/html, image/gif
URI
- 웹 서버 리소스는 각자 이름을 갖고 있기 때문에, 클라이언트는 관심 있는 리소스를 지목할 수 있고, 서버 리소스 이름은 통합 자원 식별자(URI : uniform resource identifier) 로 불린다.
Ex) 이미지 리소스에 대한 URI
https://ysjune.github.io/images/whoami/avatar.jpg
- URI 에는 URL 과 URN 이라는 것이 있다.
URI (uniform resource locator)
- 리소스 식별자의 가장 흔한 형태로 위치를 나타낸다.
- 대부분의 URL 은 세 부분으로 이루어진 표준 포멧을 따른다.
첫 번째 부분
스킴(scheme) 라고 불리며, 리소스에 접근하기 위해 사용되는 프로토콜
->> https://
두 번째 부분
서버의 인터넷 주소를 제공
->> ysjune.github.io
세 번째 부분
웹 서버의 리소스를 가리킴
->> /images/whoami/avatar.jpg
- 오늘날 대부분의 URI 는 URL 이다.
URN (uniform resource name)
- 콘텐츠를 이루는 한 리소스에 대해, 그 리소스의 위치에 영향 받지 않는 유밀무이한 이름
- 아직 실험 중인 상태이고, 널리 채택되지 않았음. 인프라의 지원이 늦는 것도 한 몫
4. 트랜잭션
- HTTP 트랜잭션은 요청 명령(클라이언트 -> 서버) 과 응답 결과 (서버 -> 클라이언트) 로 구성
- 이런 상호작용은 HTTP 메시지라고 불리는 정형화된 데이터 덩어리를 이용해 이루어짐
- GET, PUT, DELETE, POST 등의 메서드를 통해 요청 명령을 지원
- 응답을 할 때는
200
,404
등의 상태 코드와 함께 반환된다. - 애플리케이션은 보통 하나의 작업을 수행하기 위해 여러 HTTP 트랜잭션을 수행한다. (한 페이지를 불러오기 위해 HTML 파일, 이미지파일, JSON 데이터 등을 가져옴)
5. 메시지
- HTTP 메시지는 단순한 줄 단위의 문자열으로, 일반 텍스트이기 때문에 사람이 읽고 쓰기 쉽다.
- 웹 클라이언트에서 서버로 보낸 HTTP 메시지를 요청 메시지라고 부르고, 그 반대를 응답 메시지라고 부른다.
- 시작줄, 헤더, 본문 세 단위로 나뉜다.
Ex) 요청 메시지
시작줄 : GET /test/hi.txt HTTP/1.0
헤더 : Accept: text/*
본문 : 없음
<br>
응답 메시지
시작줄 : HTTP/1.0 200 OK
헤더 : Content-type : text/plain
본문 : hi every~
6. TCP 커넥션
HTTP는 애플리케이션 계층 프로토콜이므로 네트워크 통신의 세부사항에 대해 신경쓰지 않는다.
신뢰성 있는 TCP/IP 통신을 사용한다.
TCP 커넥션이 맺어지면, 클라이언트와 서버 컴퓨터 간에 교환되는 메시지가 없어지거나, 손상되거나, 순서가 뒤바뀌어 수신되는 일은 결코 없다.
텔넷 유틸리티를 통해 웹서버와 직접 대화할 수 있다.
Ex) telnet www.joes-hardware.com 80
...
...
GET /tools.html HTTP/1.1
Host: www.joes-hardware.com
7. 프로토콜 버전
- HTTP/0.9 버전부터 HTTP/1.0, 1.1, 2.0 등이 있다.
- (90년대 초부터 후반에 거의 다 나온 것들이다.. 현재는 20년...)
8. 웹의 구성 요소
- 추후에 자세히 다루겠지만, 트랜잭션에서 주고받는 메시지에 중점을 두어 간략히 설명한다.
- 프록시 : 클라이언트와 서버 사이에 위치한 HTTP 중개자
- 캐시 : 많이 찾는 웹페이지를 클라이언트 가까이에 보관하는 HTTP 창고
- 게이트웨이 : 다른 애플리케이션과 연결된 특별한 웹 서버
- 터널 : 단순히 HTTP 통신을 전달하기만 하는 특별한 프록시
- 에이전트 : 자동화된 HTTP 요청을 만드는 준지능적 웹클라이언트