웹 클라이언트와 서버
클라이언트는 서버에서 HTTP요청을 보내고 서버는 요청된 데이터를 HTTP응답으로 돌려준다. HTTP 클라이언트와 HTTP 서버는 월드와이드웹(WWW)의 기본요소다.
http://tistory.com/123.html 을 요청한다고 해보자. 브라우저는 tistory.com으로 요청을 보내고 서버는 123.html을 찾고 성공했다면 성공한 결과를 리턴한다.
리소스
정적 파일 : 텍스트, html, 워드, jpg 등
하지만 리소스는 반드시 정적일 필요 없다. 동적 콘텐츠 리소스는 사용자가 누구인지, 어떤 정보를 요청했는지 등에 따라 다른 콘텐츠를 생성한다.
미디어 타입
MIME(Multipurpose Internet Mail Extensions) :
원래는 각기 다른 전자메일 시스템 사이에서 메시지가 오갈 때 겪는 문제점을 해결하기 위해 설계되었다가 이메일에서 매우 잘 동작했기때문에 HTTP에서도 contents를 기술하도록 채택되었다
primary_object_type/specific_subtype으로 이루어져있다
- text/html
- text/plain : plain ASCOO
- image/jpeg
URI (uniform resource identifier)
리소스를 고유하게 식별하고 위치를 지정할 수 있다
URI에는 URL과 URN이 있다.
URL (uniform resource locator)
리소스 식별자의 가장 흔한 형태로 리소스에 대한 구체적인 위치를 서술한다.
http://tistory.com/123.html <- 요것이 URI
프로토콜://이동할호스트/리소스
오늘날 대부분의 URI는 URL이다
URN (uniform resource name)
콘텐츠를 이루는 한 리소스에 대해 그 리소스의 위치에 영향받지 않는 유일무이한 이름 역할.
독립적인 URN은 리소스를 여기저기 옮기더라도 문제없이 동작한다. 이름을 변하지 않게 유지하는 한, 여러종류의 네트워크 접속 프로토콜로 접속해도 문제가 없다.
트랜잭션
클라이언트에서 서버로 보내는 요청
메소드
GET : 서버에서 클라이언트로 지정한 리소스를 보내라
PUT : 클라이언트에서 서버로 보낸 데이터를 지정한 이름의 리소스로 저장하라.
DELETE : 지정한 리소스를 서버에서 삭제하라
POST : 클라이언트 데이터를 서버 게이트웨이 애플리케이션으로 보내라
HEAD : 지정한 리소스에 대한 응답에서 HTTP헤더 부분만 보내라
상태 코드
200 : good
302 : redirect
404 : not found
웹페이지는 여러 객체로 이루어질 수 있다
애플리케이션은 보통 하나의 작업을 수행하기 위해 여러 HTTP 트랜잭션을 수행한다.
아마 SPA를 설명하는게 아닐까...?
메시지
시작줄 : 요청이라면 무엇을 해야하는지 응답이라면 무슨일이 일어났는지 나타냄, 이미지는 요청의 이미지임
헤더 : 0개 이상의 헤더필드들 콜론으로 구분 된 key-value쌍임
본문 : 한 줄 띄고 웹서버로 보낼 데이터
TCP커넥션
TCP/IP
HTTP는 애플리케이션 계층 프로토콜이다. HTTP는 통신의 핵심적인 세부사항에 대해서 신경쓰지 않고 TCP/IP에게 맡긴다
TCP/IP는
- 오류없는 데이터 전송
- 순서에 맞는 전달
- 조각나지 않는 데이터 스트림
위의 3개를 보장한다.
TCP/IP는 각 네트워크와 하드웨어의 특성을 숨기고 어떤 종류의 컴퓨터/네트워크든 서로 신뢰성 있는 의사소통을 하도록 해준다.
일단 TCP커낵션이 맺어지면 클라이언트와 서버 간에 메시지의 손상/유실이 없다.
접속, IP주소 그리고 포트번호
HTTP 클라이언트가 서버에 메시지를 전송할 수 있게 되기전에 Internet Protocol (IP) 주소와 포트번호를 사용해 클라이언트와 서버 사이에 TCP/IP커넥션을 맺어야 한다.
TCP에서는 서버에 대한 IP주소와 실행 중인 프로그램이 사용중인 포트번호가 필요하다.
웹브라우저는
서버의 URL에서 호스트명을 추출 -> 호스트명을 IP로 변환 -> 포트 추출 (없으면 80이 기본) -> 웹 서버와 TCP커넥션을 맺는다 -> 서버에 HTTP요청을 보낸다 ->
서버는
웹브라우저에 HTTP응답을 돌려준다
웹브라우저는
커낵션이 닫히면 문서를 보여준다
Telnet을 이용한 실제 예제
텔넷 유틸리티는 키보드를 목적지의 TCP포트로 연결해주소 출력 TCP포트를 화면으로 연결해준다. 텔넷은 원격 터미널 세션을 위해 흔히 사용되지만 HTTP 서버를 포함한 일반적인 TCP서버에 연결하기 위해 사용될 수도 있다.
직접 컴퓨터의 포트로 TCP 커넥션을 연결해서 타이핑할 수 있게 도와준다.
텔넷 설치 후 terminal에서 해보자
프로토콜 버전
HTTP/0.9
이거 설마 mime으로 표현한건가...?
오직 GET메소드만 지원했음 금방 1.0으로 대체되었음
HTTP/1.0
처음으로 널리 쓰이기 시작한 버전
버전번호, 헤더, 추가메서드GET, POST...?, 멀티미디어 객체 처리MIME...?를 추가했다.
결코 잘 정의된 명세는 아니다. 잘 동작하는 용례들의 모음에 가깝다 (왜...?)
HTTP/1.0+
keep-alive 커넥션, 가상 호스트 지원, 프록시 연결 지원을 포함해 많은 기능이 공식적이지는 않지만 디펙토스텐다드로 HTTP에 추가되었다
HTTP/1.1
HTTP 설계의 결함 교정, 성능 최적화, 잘못된 기능 제거에 집중했다. 더 복잡해진 웹 애플리케이션과 배포를 지원하고 현재의 HTTP 버전이다
HTTP/2.0
HTTP/1.1의 성능 문제를 개선하기 위해 구글의 SPDY 프로토콜을 기반으로 설계가 진행중인 프로토콜이다.
웹의 구성요소
프록시
서버와 클라이언트 사이에 위치하여 클라이언트의 모든 HTTP요청을 전달바다 서버에 전달하는 역할
주로 보안을 위해 사용된다.
캐시
자주 찾는 요청의 응답을 저장해두는 HTTP 프록시 서버.
게이트웨이
다른 서버들의 중재자로 동작하는 특별한 서버
주로 HTTP트래픽을 다른 프로토콜로 변환하기 위해 사용된다. 언제나 스스로가 리소스를 갖고 있는 진짜 서버인 것처럼 요청을 다룬다. 클라이언트는 자신이 게이트웨이와 통신하고 있음을 알아채지 못한다.
터널
두 커넥션 사이에서 raw데이터를 열어보지 않고 그대로 전달해주는 HTTP 애플리케이션이다. HTTP 터널은 주로 비 HTTP데이터를 하나 이상의 HTTP연결을 통해 그대로 전송해주기 위해 사용된다.
ex : 암호화된 SSL트래픽을 HTTP커넥션으로 전송함으로써 웹 트래픽만 허용하는 사내 방화벽을 통과시킴
에이전트
사용자를 위해 HTTP요청을 만들어주는 클라이언트 프로그램이다. HTTP에이전트, 웹브라우저 외에도 스파이더, 웹로봇과 같은 에이전트가 있다.
'HTTP완벽 가이드' 카테고리의 다른 글
5. 웹 서버 (0) | 2021.03.31 |
---|---|
3. HTTP 메시지 (0) | 2021.03.17 |
2. URL과 리소스 (0) | 2021.03.10 |