-
HTTP 완벽가이드 1장개발/컴퓨터 사이언스 2023. 3. 27. 06:54
1장 HTTP 개관
HTTP
- 신뢰성 있는 데이터 전송 프로토콜로, 정보의 왜곡이나 손상에 대해 걱정할 필요가 없다.웹 클라이언트, 서버
- 웹 트래픽 전송방식 : 클라이언트(내 컴퓨터)가 HTTP 요청을 보내면, 서버에서 HTTP 응답을 돌려준다.리소스
- 텍스트, 이미지, 동영상, HTML 파일 같은 정적 파일과 요청에 따라 달라지는 동적파일로 구성미디어 타입
- 다양한 리소스들을 구별하기 위해 웹은 MIME라는 데이터 포맷 라벨을 통해 구분한다.
- MIME의 형태는
주타입 / 부타입
문자열 라벨로 구성되어 있다.
URI(Uniform Resource Identifier)- ex) text/html, image/gif...
- 웹 서버 리소스의 이름을 지칭하는 용어로, 통합 자원 식별자라고 한다.
- URL(Uniform Resource Locator), URN(Uniform Resource Name) 두가지 종류가 있다.URL
- 통합 자원 지시자라고 불리며 대부분의 URI는 URL이다, 서버 리소스의 세부적인 위치를 서술한다.
- 구조
- scheme : 가장 첫 부분에 오는 것으로, 서버 리소스에 접근시 사용될 프로토콜을 표기한다.
- ex) https://
- 인터넷 주소 : 서버 리소스가 저장된 DNS 주소를 표기한다.
- ex) www.naver.com
- 리소스 경로 : 가장 마지막은 웹 서버의 리소스가 저장된 경로를 표기한다.
- ex) channels/funny.gifURN
- scheme : 가장 첫 부분에 오는 것으로, 서버 리소스에 접근시 사용될 프로토콜을 표기한다.
- 이름으로 서버 리소스에 접근할 수 있는 방식이다.
- 프로토콜, 서버상의 위치에 관계없이 자유롭게 접근 가능하다.
- HTTP 1.1에서는 위치파악을 위한 인프라가 갖춰지지 않아 사용되고 있지 않다.
트랜잭션
- 웹 클라이언트의 request와 웹 서버의 response로 구성
- HTTP 메시지를 통해 상호작용
- 웹페이지는 여러 리소스의 모음으로 구성되기 때문에 여러 번의 트랜잭션이 발생한다.메서드
- 클라이언트는 다양한 메서드를 통해 서버에 요청을 전달
- 종류가 굉장히 많고(GET, POST, PUT, DELETE, HEAD...), 각자 고유한 명령을 갖는다.상태코드
- 클라이언트의 요청에 대한 웹 서버의 응답 방식이다.
- 숫자와 그 사유 구절을 함께 적어 HTTP 응답 메시지에 담아 클라이언트로 보낸다.
- 종류 : 예시이며 2xx, 3xx, 4xx, 5xx의 여러 상태코드가 더 존재한다.
- 200 : 이상없음
- 302 : 리소스의 위치가 다른 곳에 있으므로 다시 request할 것
- 404 : 리소스가 존재하지 않음.메시지
- 구성 : 단순한 텍스트로 구성되어 있어 읽기 쉽다.
- 시작줄 : 클라이언트 요청이라면 사용 메서드와 요청 리소스 및 프로토콜 이름을, 서버 응답이라면 응답결과와 사용 프로토콜이 표기되어 있다.
- header: 여러 항목들이 있으며,
이름 : 내용
으로 구분된다. - body : 요청시에는 서버에 보낼 데이터가, 응답 시에는 결과로 반환할 데이터가 담겨있다.TCP 커넥션
- TCP/IP
- HTTP는 TCP/IP 네트워크 통신 5계층 중 애플리케이션 계층에 속한다. 핵심 세부사항은 신뢰성 높은 TCP/IP 프로토콜이 담당하게 된다.
- TCP/IP는 데이터의 순서, 안정성(조각나지 않음, 오류 x)을 보장한다.
- 네트워크와 하드웨어의 특성을 숨기고, 컴퓨터/네트워크 종류에 상관없이 신뢰성 있는 연결 보장
IP주소와 포트번호
- HTTP 메시지를 전송하기 전, 클라이언트와 서버 사이를 TCP/IP 커넥션을 맺어야 한다.
- URL을 통해 IP주소와 포트번호 추론 가능
- IP주소 : URL의 인터넷 주소는 웹 서버에 저장된 리소스의 위치이나, DNS가 읽을 수 있는 호스트 명으로 되어 있다. DNS(Domain Name Service)는 호스트 명을 읽어들여 숫자 형태의 IP주소로 변환 시킨다.
- 포트 번호 : 인터넷 주소 마지막에
:포트번호
로 표기된다. 없다면 기본값인 80을 사용한다는 의미
- 대략적인 트랜잭션 과정
- 웹 브라우저가 서버 URL에서 호스트명(인터넷 주소) 추출
- DNS를 통해 서버 호스트 명 IP주소로 변환, 포트번호 존재시 추출
- 웹 브라우저와 서버 간의 TCP 커넥션 생성
- 웹 브라우저가 서버에 HTTP 요청 보내기
- 웹 브라우저로 HTTP 응답 반환
- 커넥션이 닫히고, 웹브라우저가 화면에 응답을 통해 원하는 정보를 보여줌프로토콜 버전
- HTTP/0.9
- 초창기 버전. GET 메서드만 지원했다.
- MIME, 포트번호, HTTP 버전 같은 것도 없엇다.
- 목적은 간단한 HTML 객체를 서버에서 받아오는 것
- HTTP/1.0
- 가장 널리 쓰인 버전
- 버전 번호, 헤더, 포트번호, GET 이외 추가 메서드, 멀티미디어 객체 처리 추가
- 완벽하지 않지만, 월드 와이드 웹의 유행을 이끔
- HTTP/1.0+
- keep-alive 커넥션, 가상 호스팅, 프록시 연결 지원 비공식적으로 추가
- HTTP/1.1
- 성능 개선, 오류 수정에 집중한 버전(현재)
- 더 복잡한 웹 앱, 배포 지원
- HTTP/2.0
- 구글의 SPDY 프로토콜 기반 프로토콜로, 현재 설계 진행중..웹 구성요소
- 클라이언트와 서버 외에 애플리케이션 계층에는 여러 구성요소들이 존재프록시
- 클라이언트와 서버 사이에 존재하여 클라이언트의 요청을 받아 대신 서버에 전달하고, 서버의 응답도 대신 받아 클라이언트에 전달한다.
- 중개자 역할과 더불어 요청/응답에 대한 필터링을 통해 데이터를 정제하여 보안에 기여캐시
- 성능 최적화를 위해 자주 사용하는 데이터의 복사본을 저장하는 프록시 서버
- 같은 요청이 들어올 시 해당 프록시 서버에서 사본을 전달(서버에 직접 요청하는 것보다 빠름)게이트웨이
- 웹 상에는 여러 프로토콜이 존재하기에, 프로토콜 간 변환을 위해 존재하는 서버
- 서버와 클라이언트 사이에서 클라이언트의 HTTP 요청을 서버의 프로토콜과 똑같은 요청으로 변환시켜준다.
- 마치 자신이 서버처럼 행동하기 때문에 클라이언트는 게이트웨이인지 알아차리기 힘들다터널
- 비 HTTP 데이터를 HTTP 연결을 통해 전송시키기 위한 애플리케이션
- 회사 내 HTTP 요청만 통과시키는 방화벽이 있다면 암호화된 SSL 데이터를 HTTP 터널을 통과시켜 비HTTP 데이터도 방화벽을 통과할 수 있게 해준다. 일종의 백도어..? 같은 느낌에이전트
- HTTP 요청을 만들어주는 웹 클라이언트 앱이다
- 대표적으로 웹 브라우저가 있고 스파이더 웹로봇 등 다양한 종류가 있다.