HTTP 완벽가이드 : HTTP 개관

dana·2022년 12월 2일
2

HTTP

목록 보기
1/2

1.1 HTTP : 인터넷의 멀티미디어 배달부

HTTP는 신뢰성 있는 데이터 전송 프로토콜(TCP/IP)을 사용
→ 전송 중 데이터가 손상되거나 왜곡되는 일이 없음

1.2 웹 클라이언트와 서버

웹 서버(HTTP 서버)는 HTTP 프로토콜로 의사소통

  • 인터넷의 데이터를 저장
  • HTTP 클라이언트가 요청한 데이터를 제공

예를 들어 [www.naver.com/index.html](http://www.naver.com/index.html) 페이지에 접속하는 경우, 웹 브라우저가 www.naver.com 에 HTTP 요청을 보냄. 해당 서버에서 요청한 파일 (index.html)을 찾아 파일과 파일 정보를 함께 HTTP 응답으로 클라이언트에 보내줌.

1.3 리소스

웹 서버는 모든 리소스를 관리하고 제공

리소스는 정적 파일인 텍스트파일, HTML 파일, 워드 파일, 이미지파일, 동영상 파일 등 부터 동적 콘텐츠 리소스인 라이브영상, 데이터베이스 검색 등이 있음.

→ 어떤 종류의 콘텐츠 소스도 리소스가 될 수 있음.

1.3.1 미디어 타입

HTTP는 웹에서 전송되는 객체 각각에 MIME 타입이라는 데이터 포맷 라벨을 붙여 수천가지 데이터 타입을 구분함. MIME 타입은 주타입과 부타입이 사선으로 구분된 형태를 띄며, 수백가지로 이루어져 있음.

  • text/html : HTML 로 작성된 텍스트 문서
  • text/plain : plain ASCII 텍스트 문서
  • image/jpeg : JPEG 이미지

1.3.2 URI

클라이언트가 원하는 특정 서버 리소스를 고유하게 식별하고 위치를 지정하기 위해 웹 서버 리소스는 이름을 가짐. 이를 URI라고 함. URI는 URL과 URN으로 나뉨.

URL (uniform resource locator)

특정 서버의 한 리소스에 대한 구체적인 위치를 서술

URL은 크게 세가지로 나뉨

  1. 스킴(scheme) : 리소스에 접근하기 위해 사용되는 프로토콜
  2. 인터넷 주소 (domain, port)
  3. 웹 서버의 리소스 (path)

URN (uniform resource name)

리소스의 위치에 영향을 받지 않는 유일무이한 이름 역할

하지만 기술적인 이슈로 잘 사용되지 않음.

1.4 트랜잭션

HTTP 트랜잭션은 “요청 명령”과 “응답 결과”로 구성

요청 명령과 응답 결과는 HTTP 메시지라고 불리는 정형화된 데이터 덩어리를 이용해 이뤄짐.

1.4.1 메서드

모든 HTTP 요청 메세지는 한 개의 메서드를 가지며, 메서드는 서버에게 어떤 동작이 취해져야 하는지 알려주는 역할을 함.

  • GET : 서버에서 클라이언트로 지정한 리소스를 보내라
  • PUT : 클라이언트에서 서버로 보낸 데이터를 지정한 이름의 리소스로 저장하라
  • DELETE : 지정한 리소스를 서버에서 삭제해라
  • POST : 클라이언트 데이터를 서버 게이트웨이 어플리케이션으로 보내라
  • HEAD : 지정한 리소스에 대한 응답에서 HTTP 헤더 부분만 보내라

1.4.2 상태 코드

모든 HTTP 응답 메세지는 상태 코드와 함께 반환. 반환된 상태 코드에 텍스트로 된 사유 구절도 함께 포함

1.4.3 웹페이지는 여러 객체로 이뤄질 수 있다.

애플리케이션을 수행하기 위해 여러 HTTP 트랜잭션이 수행됨. 따라서 웹페이지는 하나의 리소스가 아닌 리소스 모음

1.5 메시지

HTTP 메시지는 단순한 줄 단위의 문자열
웹 클라이언트 → 웹 서버 : 요청 메시지
웹 서버 → 웹 클라이언트 : 응답 메시지

메시지는 다음 세가지 요소로 구성

  1. 시작줄 : 요청(메소드), 응답(상태코드) 포함
  2. 헤더 : 쌍점으로 구분되어있는 하나의 이름과 하나의 값으로 구성되며, 빈 줄로 끝남
  3. 본문 : 어떤 종류의 데이터든 들어갈 수 있는 메시지 본문

1.6 TCP 커넥션

어떻게 메시지가 TCP 커넥션을 통해 한 곳에서 다른 곳으로 옮겨지는 지

1.6.1 TCP/IP

HTTP는 애플리케이션 계층 프로토콜. 네트워크 통신의 핵심적인 세부사항에 대해 신경쓰지 않음.

TCP는 다음과 같은 특성을 가짐

  • 오류 없는 데이터 전송
  • 순서에 맞는 전달
  • 조각나지 않는 데이터 스트림 ( 언제든 어떤 크기로든 전송 가능)

TCP/IP는 각 네트워크와 하드웨어의 특성을 숨기고, 어떤 종류의 컴퓨터나 네트워크든 서로 신뢰성 있는 의사소통을 하도록 도와줌

1.6.2 접속, IP 주소 그리고 포트번호

트랜잭션을 발생시키기 전에 인터넷 프로토콜 주소와 포트번호를 사용해 클라이언트와 서버 사이에 TCP/IP 커넥션이 필요

TCP에선 이 두가지가 필요

  1. 서버 컴퓨터에 대한 IP 주소
  2. 그 서버에서 실행 중인 프로그램이 사용 중인 포트 번호 (번호가 없다면 80이 default)

→ 이를 알아내기 위해 URL 사용

1.6.3 통신 순서

  1. 웹 브라우저가 서버의 URL에서 호스트명 추출
  2. 웹 브라우저는 서버의 호스트 명을 IP로 변환
  3. 웹 브라우저는 URL에서 포트번호 추출
  4. 웹 브라우저는 웹 서버와 TCP 커넥션을 맺음
  5. 웹 브라우저는 서버에 HTTP 요청
  6. 서버가 웹 브라우저에 HTTP 응답
  7. 커넥션이 닫히면, 웹 브라우저가 문서를 보여줌

그럼 매 요청때마다 커넥션이 이뤄져야 하는건가?
기존에는 요청시마다 커넥션이 새롭게 생성되어야 했지만, 1.1에서는 커넥션을 유지해 커넥션 생성에 드는 시간을 절약
https://developer.mozilla.org/ko/docs/Web/HTTP/Connection_management_in_HTTP_1.x

1.7 웹의 구성요소

1.7.1 Proxy

클라이언트와 서버 사이에 위치, 클라이언트의 모든 HTTP 요청을 받아 서버에 전달.
보안을 위해 사용되며 요청과 응답을 필터링해 불필요하거나 위험한 리소스를 차단

1.7.2 캐시

자주 찾는 것의 사본을 클라이언트 가까이 저장해두는, 특별한 종류의 HTTP 프락시 서버

1.7.3 게이트웨이

다른 서버들의 중재자로 동작하는 특별한 서버로 HTTP 트래픽을 다른 프로토콜로 변환하기 위해 사용

1.7.4 터널

단순히 HTTP 통신을 전달하기만 하는 특별한 프락시
두 커넥션 사이에서 날것의 데이터를 열어보지 않고 그대로 전달해주는 HTTP 어플리케이션
주로 비HTTP 데이터를 하나 이상의 HTTP 연결을 통해 그대로 전송해주기 위해 사용하며 암호화된 SSL 트래픽을 HTTP 커넥션으로 전송

1.7.5 에이전트

자동화된 HTTP 요청을 만드는 준지능적 웹 클라이언트
사용자를 위해 HTTP 요청을 만들어주는 클라이언트 프로그램
예) 웹 크롤링 봇 → user-agent 속성을 이용해 크롤링 설정하기

profile
PRE-FE에서 PRO-FE로🚀🪐!

0개의 댓글