HTTP

IKNOW·2024년 1월 3일
0

웹 클라이언트와 서버

웹 서버는 인터넷의 데이터를 저장하고, 클라이언트가 요청한 데이터를 제공한다.

클라이언트는 서버에게 HTTP 요청을 보내고 서버는 요청된 데이터를 HTTP응답으로 돌려준다.

브라우저가 웹 페이지를 열어볼 때, 브라우저는 HTTP 요청을 서버로 보낸다. HTTP요청을 받은 서버는 요청받은 객체를 찾고 성공했다면, 객체의 타입, 길이 등의 정보와 함께 HTTP 응답에 실어서 클라이언트에게 보낸다.

리소스

미디어 타입

HTTP는 웹에서 전송되는 객체에 MIME이라는 데이터 포맷 라벨을 붙인다. 원래는 전자메일 시스템 사이에서 메시지가 오갈 때 겪는 문제를 해결하기 위해 설계되었기 때문에 MIME(Multipurpose Internet Mail Extentions)라는 이름이 붙었다.

MIME타입은 슬래쉬로 구분된 primary object type과 specific subtype으로 이루어진 문자열 라벨이다.

  • HTML text 문서 → text/html
  • JPEG image → image/jpeg
  • file → multipart/form-data
  • json type → application/json

URI

서버 리소스 이름은 uniform resource identifier URI라고 불린다. 정보 리소스를 고유하게 식별하고, 위치를 지정할 수 있다.

URL: Uniform resource locator

URI의 가장 흔한 형태. 특정 서버의 한 리소스에 대한 구체적인 위치를 서술한다.

리소스가 정확히 어디에 있고 어떻게 접근 할 수 있는지 분명히 알려준다.

URL은 세 부분으로 이루어진 표준 포맷을 따른다.

  • Scheme: http://와 같은 프로토콜을 나타낸다.
  • www.naver.com 과 같은 서버의 인터넷 주소를 나타낸다.
  • /viewer/postView.naver 와 같은 웹 서버의 리소스를 나타낸다.

트랜잭션

Http 트랜잭션은 요청 명령과 응답 결과로 구성되어 있다. 이 상호작용은 HTTP메시지라고 불리는 데이터를 이용해 이루어 진다.

메서드

모든 요청 메시지는 한개의 메서드를 갖는다. 메서드는 서버에게 어떤 동작이 취해져야 하는지 말해준다.

흔히 쓰이는 HTTP메서드는 다음과 같다

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

상태 코드

HTTP응답 메시지는 상태 코드와 함께 반환된다.

HTTP는 resason phrase도 함께 보내는데 이는 설명을 위해 포함된 부분이다. 그렇기 때문에 reason phrase가 다르더라도 상태코드가 동일하다면 모두 같은 것으로 취급한다.

메시지

HTTP 메시지는 세부분으로 이루어 진다.

  • 시작줄: 실행되어야 할 요청, 또는 요청 수행에 대한 성공 또는 실패가 기록되어 있다.
    항상 한줄이다.
  • 헤더: 콜론(:)으로 구분되어 있는 키 밸류 값으로 구성된 헤더 필드가 존재한다.
    요청에 대한 설명, 혹은 메시지 본문에 대한 설명이 들어간다.
    헤더는 빈줄로 끝난다.
  • 본문: 어떤 종류의 데이터든 들어갈 수 있는 본문이 존재한다.
    응답과 관련된 문서가 들어가거나 임의의 이진 데이터도 본문에 포함된다.

TCP 커넥션: Transmission Control Protocol

TCP/IP

HTTP는 애플리케이션 계층 프로토콜이다.

그렇기 때문에 네트워크 통신의 핵심적인 세부사항에 대해 신경 쓰지 않아도 된다.

대신 세부사항은 TCP/IP 프로토콜에 의존한다.

TCP는 1. 오류 없는 데이터 전송. 2. 순서에 맞는 전달 3. 조각나지 않는 데이터 스트림을 제공한다.

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

TCP커넥션이 맺어지면, 클라이언트와 서버간에 교환되는 메시지가 없어지거나 손성되거나 순서가 뒤바뀌는 일은 절대 없다.

HTTP는 TCP/IP 5계층에서 TCP위의 계층이며 TCP는 IP위의 계층이다.

접속

클라이언트가 서버에 메시지를 전달하기 위해선 IP주소와 포트번호를 사용해서 서버와 TCP/IP커넥션을 맺어야 한다.

HTTP 서버의 IP주소와 포트번호를 알아내는 방법은 URL을 사용하는 것이다.

일반적으로 www.naver.com과 같은 Domain은 DNS를 통해 쉽게 IP로 변환 될 수 있으므로 IP는 쉽게 찾을 수 있다.

포트 번호의 경우 HTTP 통신이라면 포트 번호가 빠졌을 경우 디폴트 값으로 80이라고 가정한다.

우리가 웹 브라우저를 통해 서버의 HTML리소스를 보는 과정은 다음과 같다.

  1. 브라우저가 URL에서 호스트 명을 추출한다.
  2. 호스트 이름을 IP로 변환한다.
  3. URL에 포트 번호가 있다면 추출하고, 없다면 80번으로 설정한다.
  4. 웹 서버와 TCP 커넥션을 맺는다.
  5. 서버에 HTTP 요청을 보낸다.
  6. 웹 서버는 브라우저에 HTTP 응답을 돌려준다.
  7. 커넥션이 닫히고 브라우저가 HTML문서를 보여준다.

웹의 기타 구성요소

  • 프록시: 클라이언트와 서버 사이에 위치하고 있는 HTTP 중개소 클라이언트의 HTTP요청을 받아 서버로 전달한다. 프록시는 주로 보안을 위해 사용되며, 요청과 응답을 필터링 한다.
  • 게이트웨이: 다른 애플리케이션과 연결된 특별한 웹 서버
    게이트웨이는 HTTP 트래픽을 다른 프로토콜로 변환하는 데 사용된다. 게이트웨이는 스스로 리소스를 갖고 있는 진짜 서버인것 처럼 HTTP요청을 다루기 때문에 클라이언트는 게이트웨이와 통신하고 있는 것을 알아낼 수 없다
  • 터널: 단순히 HTTP통신을 전달하기만 하는 특별한 프록시
    터널은 두 커넥션 사이에서 raw 데이터를 열어보지 않고 그대로 전달해준다.
profile
조금씩,하지만,자주

0개의 댓글

관련 채용 정보