김영한 HTTP웹 기본지식의 강의자료를 바탕으로 글을 작성하였다.
인터넷에서 두 컴퓨터는 서로 통신하며 데이터를 주고 받는다.
여기서 이용되는 것이 IP 프로토콜이다.
IP는 각 컴퓨터의 주소값으로 데이터 전송 시 도착지점의 IP값을 함께 전달함으로써 목적지까지 데이터를 전송한다.
IP만을 이용하여 데이터를 주고받는 방식은 한계점이 존재한다.
이러한 한계점을 극복하기 위해 TCP/UDP 프로토콜을 추가로 사용한다.
IP주소만 전달했을 때 발생하는 한계점을 극복하기 위해 TCP 프로토콜을 패킷에 추가한다.
Port : 항구로 생각하면 된다. 한 컴퓨터에서 여러개의 프로그램이 실행되는 경우 각 프로그램마다 Port가 배정된다.
순서 : 여러개로 나누어 보내는 경우 순서를 확인할 수 있다. 순서가 틀리면 해당 데이터부터 다시 요청한다.
전송 제어 : 각 컴퓨터가 통신할 때 서로의 연결상태를 확인하는 3 way handshake 과정을 거친다. (서로 접속 요청 및 수락하는 과정)
IP와 거의 같은 프로토콜이다. 즉 기능이 거의 없다.
단순하고 빠르다.
사용자가 직접 기능을 세팅하여 이용한다.
IP주소는 숫자로 구성되어 기억하기 힘들다.
IP주소가 변경되는 경우 통신에 문제가 생긴다.
-> DNS를 통해 IP주소와 도메인 명을 매칭하고 변환하여 통신한다.
URI는 URL(Locator), URN(Name)를 둘 다 포함하는 개념이다.
즉 통일된 리소스 구분방식이다.
URN은 이름을 통해 URL은 자원의 위치를 통해 구분한다.
URN은 방식이 보편화되지 않았다. 그래서 주로 URL을 사용한다.
URL = URI로 봐도 무방하다.
프로토콜 : 어떤 방식으로 자원에 접근할것인가에 대한 규칙
ex) http, https, ftp
URL에 사용자 정보를 포함하여 인증한다. 거의 사용하지 않는다.
호스트명 : 도메인명 또는 IP 주소
접속 포트
일반적으로 생략시 http = 80, https = 443
리소스 경로
key = value 형태
?
로 시작하고 &
로 추가한다. ex) ?keyA=valueA&keyB=valueB
거의 모든 형태의 데이터를 HTTP로 주고 받는다.
요청하는 클라이언트와 요청을 받는 서버의 구조로 작동한다.
서로 통신하는 기기간에 상태를 유지하지 않는다.
통신하는 기기간에 연결상태를 유지하지 않는다.
연결을 유지하지 않는다면 요청 응답 과정이 끝나면 연결을 끊음으로써 자원을 절약할 수 있다. 하지만 매 연결마다 TCP/IP 연결을 새로 맺어야 한다. 그리고 이 과정에서 자원이 소모된다.
현재는 HTTP 지속 연결로 문제가 해결됐다. 다량의 데이터를 전송하는 경우 TCP/IP 연결 후 모든 데이터를 전송할 때까지만 연결을 유지하는 방식으로 최적화 되었다.
Start-Line
요청 메시지 : HTTP메서드, 요청 대상, HTTP version
응답 메시지 : HTTP 상태코드(요청 성공, 실패), HTTP version
Header
HTTP 전송에 필요한 모든 부가정보
ex) 메시지 바디의 내용, 크기, 압축, 인증, 요청 클라이언트 정보 등
Body
실제 전송할 데이터
단순 리소스 조회
서버에 전달하고 싶은 데이터는 query를 통해서 전달한다.
데이터에 대한 처리
메시지 바디를 통해 서버에 데이터를 전달한다.
애매하면 Post로 요청한다.
데이터에 대한 교체
리소스가 없으면 생성하고 있으면 대체한다.
클라이언트가 리소스의 위치를 알고 지정한다는 것이 Post와의차이점이다.
리소스를 부분적으로 변경한다.
리소스를 제거한다.
HTTP전송에 필요한 모든 부가정보를 포함한다.
ex) 메세지 바디의 내용, 크기, 압축, 인증, 요청클라이언트 등
표현은 요청이나 응답에서 전달하는 HTTP Body의 실제 데이터이다.
표현 헤더는 표현 데이터를 해석할 수 있는 정보를 제공한다.
클라이언트가 선호하는 표현 요청
Quality Values 값을 사용하여 우선순위를 정할 수 있다.
Quality Value: 0~1사이 값, 클수록 높은 우선순위, 생략하면 1
단순 전송 (Content-Length): 기본 전송 방식
압축 전송 (Content-Encoding): 헤더에 압축 방식에 대한 정보가 추가된다.
분할 전송 (Transfer-Encoding)
ex)
5
Hello
5
World
0
\r\n
범위 전송 (Content-Range)
ex)
Content-Range: bytes 1001-2000 / 2000
• From: 유저 에이전트의 이메일 정보
• Referer: 이전 웹 페이지 주소
• User-Agent: 유저 에이전트 애플리케이션 정보
• Server: 요청을 처리하는 오리진 서버의 소프트웨어 정보
• Date: 메시지가 생성된 날짜
• Host: 요청한 호스트 정보(도메인)
• Location: 페이지 리다이렉션
• Allow: 허용 가능한 HTTP 메서드
• Retry-After: 유저 에이전트가 다음 요청을 하기까지 기다려야 하는 시간
쿠키를 이용함으로써 모든 요청에 필요한 정보를 각 요청에 담을 필요가 없어진다. 쿠키값을 전달함으로써 요청과 응답에 해당 데이터를 포함하지 않고도 작업을 진행할 수 있다.
ex) 로그인 후 회원 정보 전달
캐시가 없는 경우 같은 요청에서 데이터가 변경되지 않아도 계속 같은 데이터를 다운로드 받아야 한다.
따라서 브라우저는 캐시를 적용하여, 저장소에 캐시 데이터를 저장해두고 사용한다. 캐시 가능 시간동안 네트워크를 사용하지 않고 데이터를 사용하기 때문에 로딩 속도가 빨라진다.