HTTP 기초

ZZ3n·2020년 8월 2일
0

HTTP

목록 보기
1/3

👁‍🗨 HTTP 개요

  • HTTP는 프로토콜 이다.

  • HTTP는 모든 데이터 교환의 기초이며, 클라이언트-서버 프로토콜이다.

  • 클라이언트가 전송하는 메시지는 요청(Request) 이다.
    서버가 그에 대한 응답으로 보내는 메시지는 응답(Response) 이다.

  • Application 계층의 프로토콜이다.

  • 신뢰 가능한 Transport 프로토콜이라면 이론상 무엇이든 사용 가능하다. (TCP)

    인터넷 Application 계층, Transport 계층이 어색하다면 인터넷 5계층을 검색하자.

🎨 구성 요소

구성 요소

  • 여기서 나오는 구성 요소 3가지는 추상화 된 것이다. 예를 들어 클라이언트는 사용자, Bot들로 구별되거나, 서버가 여러 대의 서버로 구현되어 있거나 한 것을 추상화 한 것이다.

클라이언트

  • 클라이언트 를 번역하자면, 고객이다. 고객은 요청만 할 뿐, 응답하지 않는다.

  • 클라이언트는 요청 후, 응답을 받고, 필요한 리소스가 추가로 확인되면 또 요청을 하고, 응답을 받고 한다. 클라이언트는 필요한 리소스가 모두 모였다고 확인되면, 웹 페이지를 만들어 사용자에게 보여준다.

웹 서버

  • 서버를 번역하자면, Serve를 하는 사람. Serve는 제공하다, 일하다, 복역하다(!)라는 뜻이다. 나를 위해 일해주는 사람. 정도가 되겠다.

  • 서버는 여러 기계들로 이루어지는 경우가 많다. 하지만 추상화하게 되면, 결국 하나의 기계로 추상화할 수 있다. 클라이언트의 요청을 응답해주는 기계.

프록시

  • 프록시 를 번역하자면, 대신, 대리 등의 뜻을 가진다. 대리로 메시지를 받고, 전달해주는 것을 생각하면 되겠다. (우체국 정도 생각하면 되려나?)

  • 실제로는 브라우저(클라이언트)와 서버 사이에서 많은 컴퓨터, 기계가 메시지를 이어 받고, 전달해준다. 이는 HTTP 계층에서 어떻게 동작하는지 보이지 않지만, 성능에는 영향을 끼친다.

  • 프록시를 통해 메시지가 변경되거나, 변경되지 않을 수 있으며, 프록시를 통해 다양한 기능을 수행 할 수 있다.
    캐싱, 필터링, 로드 밸런싱, 인증, 로깅(logging)


🔰 HTTP의 기초적 부분.

간단.

  • 사람이 읽을수 있게끔, 간단하게 고안되었다.
  • HTTP/2 에 와서 복잡해졌지만, 여전히 간결하다.

확장 가능성.

  • HTTP 헤더는 HTTP를 확장하고 실험 가능하게 만들었다.
  • 클라이언트와 서버의 합의가 있다면, 언제든지 새로운 기능을 추가할 수 있다.

Stateless BUT Session.

  • HTTP는 Stataless하다.
  • 동일한 연결에서 연속해서 전달된 두개의 요청 사이에는 연결점이 없다.
  • Stateless의 문제점은 세션과 쿠키를 통해 해결할 수 있다.

HTTP 와 Connection

  • Connection(연결)은 HTTP의 영역 밖이다. 연결은 Transport 계층이 수행하는 일.
  • 최소한의 신뢰 가능한, 메시지 손실이 없는, 연결을 요구할 뿐이다.
    그래서 일반적으로 인터넷에 퍼져있는 전송 프로토콜 중 TCP 표준에 의존한다.

📫 HTTP 메시지

  • 브라우저와 서버가 보내는 것

📥 Request

Request

Method

  • GET,POST 같은 동사나, OPTIONS,HEAD와 같은 명사이다.
  • 일반적으로, 리소스를 가져오거나, 데이터를 전송하려고 한다.

Path

  • 가져오려는 리소스의 경로를 표시한다.
  • 프로토콜http://, 도메인developer.mozilla.org, TCP 포트80를 제거한, 리소스의 경로를 표시한다.

Version

  • HTTP 프로토콜의 버전.
  • 서버에게 추가 정보를 전달한다.

본문

  • POST 같은 Method를 위한, 서버에게 보내는 내용.

📤 Response

Response

Version

  • HTTP 프로토콜의 버전

Status Code

  • 요청의 성공 여부와, 그 이유를 나타내는 코드.

    정보 1xx : 요청을 받았으며, 클라이언트에게 무엇을 해야 하는지 알려준다.
    성공 2xx : 요청이 성공적이었으며, 서버에 인식되었다는 정보.
    리다이렉션 3xx : 요청 완료를 위해 추가적인 작업을 해야하므로 다른 곳으로 보냄.
    클라이언트 오류 4xx : 요청이 유효하지 않거나, 처리할 수 없음.
    서버 오류 5xx : 서버가 유효한 요청을 받았으나, 충족이 불가능 함.

Status Message

  • 상태 코드의 짧은 설명을 나타내는 메시지.

Headers

  • 요청 헤더들과 비슷한 헤더들.

본문

  • 웹 페이지 등의 리소스가 포함되는 본문.

0개의 댓글