ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • HTTP(1) 아주 대략적인 숲을 봐보자
    Develop/HTTP 2020. 6. 25. 14:58

    HTTP가 무엇인가.. 이름부터 뜯어보면

    H : hyper    T : text    T : Transfer    P : protocol

    하이퍼텍스트 , 즉 인터넷을 쓰면서 자주 접하는 글자에 링크 걸려있는 그거

    그거의 전송 프로토콜 , 통신규약 , 통신하는 방식, 주고받는 방식에 대한 것이다.

    웹에서 이뤄지는 모든 데이터 교환의 기초이자 클라이언트-서버 프로토콜이기도 하다.


    특징?

    클라이언트-서버 프로토콜은 수신자 측에 의해 요청이 초기화되는 프로토콜을 의마한다.
    이는 보통 개별적인 메시지 교환으로 통신을 한다.

    클라이언트 -> 서버 : requests (요청) 메시지
    서버 -> 클라이언트 : responses (응답) 메시지

    클라이언트와 서버 사이에는 실제로 더 많은 컴퓨터들이 존재하지만(라우터, 모뎀 등),
    이들은 웹의 계층적 설계로 인해 네트워크, 전송 계층 내로 숨겨진다.
    HTTP는 애플리케이션 계층의 최상층에 있다.
    HTTP는 사람읽고 이해할 수 있어(?) 테스하기 쉽고(?) 간단하기 때문에 확장 가능하다.
    HTTP는 상태를 저장하지 않는다.(Stateless) => HTTP 쿠키가 상태가 있는 세션을 만든다.


    HTTP에서 메시지 전송은 대략적으로 다음 단계의 과정을 수행한다.

    1. TCP연결을 연다. : TCP 연결은 요청을 보내거나 응답을 받는데에 사용된다.
      클라이언트는 새 연결을 열거나, 기존 연결을 재사용하거나, 서버에 대한 여러 TCP연결을 열 수 있다.

    2. HTTP 메시지를 전송한다. HTTP 메시지는 인간이 읽을 수 있다. (HTTP/2 이전)

    3. 서버가 요청을 읽고 전송한 응답을 읽어들인다.

    4. 연결을 닫거나 다른 요청을 위해 재사용 한다.

    5. HTTP 파이프라이닝이 활성화되면, 첫 응답을 완전히 수신할 때까지 기다리는게 아니라 여러 요청을 보낼 수 있다. 


    Requests(요청) 메시지 구성

    출처: MDN

    • Method
      클라이언트가 수행하고자 하는 동작을 나타내며, 보통 리소스를 주고 받는데 사용(GET, POST)
      GET, POST, OPTION, PUT 등이 있다.

    • Path (가져오려는 리소스의 경로)
      예를 들면 프로토콜 (http://),  도메인, 또는 TCP 포트  요소들을 제거한 리소스의 URL

    • Version
      프로토콜 버전

    • Headers
      서버에 대한 추가 정보를 전할 헤더들


    Reponses(응답) 메시지 구성

    출처: MDN

    • Version
      프로토콜 버전

    • Status code
      요청에 따른 성공/실패 여부 와 이유를 나타내는 상태 코드

    • Status message
      상태 코드의 짧은 설명

    • Headers
      요청 헤더와 비슷한 HTTP 헤더들

    • + 선택 사항, 가져온 리소스가 포함된 본문

     

    HTTP 기반 API

    일반적으로 데이터 교환을 위해 사용되는 XMLHttpRequest API 가 있다.

    XMLHttpRequest 보다 편하고 유연한 기능을 제공하는 Fetch API 가 있다.

     

    대략적으로 훑자면 이런 느낌이다. 

    다음부터는 웹 개발에 있어 알아야 할? 필요한? 것들을 하나씩 정리해볼 생각이다.

    이것은 네이버인가 HTTP인가

    'Develop > HTTP' 카테고리의 다른 글

    HTTP(3) CORS ?! 너는 정체가 무어냐  (0) 2020.06.26
    HTTP(2) HTTP의 메시지에 대해 정리해보자!  (0) 2020.06.26
    HTTP를 정리해보자!  (0) 2020.06.25
Designed by Tistory.