[HTTP] HTTP 기본

BoongDev·2021년 9월 27일
0

네트워크

목록 보기
4/5


HyperText 즉 HTML 이런 문서 간의 링크를 통해서 연결할 수 있는 것으로 전송하는 프로토콜로 시작되었고, 지금은 HTTP 메시지에 모든 것을 넣어서 전송한다.

HTTP 기초

HTTP

Hyper Text Transfer Protocol 의 약자로 HTML(하이퍼텍스트) 문서를 교환하기 위해 만들어진 프로토콜(통신 규약) 이다. 지금은 HTTP 메시지에 모든 것을 넣어서 전송한다.

  • HTML, TEXT

  • 이미지, 음성, 영상, 파일

  • JSON, XML (API) 등

    거의 모든 형태의 데이터 전송 가능하고 서버간에 데이터를 주고 받을 때도 대부분 HTTP 사용하는 HTTP 시대이다.

  • 웹상에서 네트워크로 서버끼리 통신을 할 때 어떠한 형식으로 서로 통신을 하자고 규정해 놓은 통신 형식 혹은 통신 구조 이다

  • HTTP 는 TCP/IP 기반으로 되어있다.

  • 요청과 응답 구조로 되어있다.

    • 클라이언트가 HTTP request 를 서버에 보내면 HTTP response 를 보낸다.
    • 모든 통신이 요청과 응답으로 이루어진다.
  • HTTP 는 Stateless 이다

    • state (상태) 를 저장하지 않는다
    • 요청이 오면 그에 응답을 할 뿐, 요청/응답 이 서로 연결되어 있지 않다
    • 각각의 요청과 응답은 독립적인 요청과 응답이다.
    • 한계
      • 모든것을 무상태로 설계 할 순 없다 (대표적 예시: 로그인)
      • 일반적으로 브라우저 쿠키와 서버 세션등을 사용해서 상태 유지
      • 상태 유지는 최소한만 사용

역사

  • HTTP/0.9 1991년: GET 메서드만 지원, HTTP 헤더 X
  • HTTP/1.0 1996년: 메서드, 헤더 추가
  • HTTP/1.1 1997년: 가장 많이 사용, 우리에게 가장 중요한 버전
    • RFC2068(1997) -> RFC2616(1999) -> RFC7230~7235(2014)
  • HTTP/2 2015년: 성능 개선
  • HTTP/3 진행중: TCP 대신에 UDP 사용, 성능 개선

기반 프로토콜

  • TCP: HTTP/1.1, HTTP/2
  • UDP: HTTP/3 진행중

HTTP 특징

  • 클라이언트 서버 구조
  • 무상태 프로토콜(스테이스리스), 비연결성
  • HTTP 메시지
  • 단순함, 확장 가능
    • 무상태 프로토콜의 특징으로 응답 서버를 쉽게 바꿀 수 있다.
    • 반대로 상태유지 (Stateful) 은 항상 같은 서버가 유지되어야 하여서 서버를 쉽게 바꿀 수 없다. (상태가 사라지니깐, 처음부터 다시 요청해야 한다.)

HTTP Message

서버와 클라이언트 간에 데이터가 교환되는 방식이며 ASCII 로 인코딩된 텍스트 정보이며 여러 줄로 되어있다. 메시지 타입은 두 가지가 있다.

  • 요청 (Request)
  • 응답 (Response)

HTTP message 구조 출처 : 코드스테이츠

HTTP Request

구조

  • start-line (시작 줄)
    • HTTP 메서드
      • 서버가 수행해야 하는 동작을 나타낸다.
    • 요청 타겟
      • 주로 URL 또는 프로토콜, 포트, 도메인의 절대 경로로 나타낸다. 이들은 요청 컨텍스트에 의해 특정지어지고 요청 타겟 포맷은 HTTP 메소드에 따라 달라진다.
      • 형식 존재
        • origin : GET, POST, HEAD, OPTIONS
          • ex) POST / HTTP 1.1, HEAD /test.html?query=alibaba HTTP/1.1
        • absolute : 대부분 GET
          • ex) GET http://developer.mozilla.org/en-US/docs/Web/HTTP/Messages HTTP/1.1
        • authority : HTTP 터널을 구축하는 경우에만 CONNECT 와 함께 사용
          • ex) CONNECT developer.mozilla.org:80 HTTP/1.1
        • asterisk : OPTIONS 와 함께 별포 (’*’) 하나로 간단하게 서버 전체를 나타낸다.
          • ex) OPTIONS * HTTP/1.1
    • HTTP 버전
      • 응답 메시지에서 써야 할 HTTP 버전을 알려준다.
  • 헤더 (Header)
    • 클라이언트와 서버가 요청 또는 응답으로 부가적인 정보를 전송할 수 있도록 해준다

    • HTTP 헤더의 기본 구조를 따른다.

      다양한 요청 헤더가 있는데 다음과 같은 몇몇 그룹으로 나눌 수 있다.

    • General : 요청과 응답 모두에 적용되지만 바디에서 최종적으로 전송되는 데이터와는 관련이 없는 헤더.

    • Request : 페치될 리소스나 클라이언트 자체에 대한 자세한 정보를 포함하는 헤더.

    • Response : 위치 또는 서버 자체에 대한 정보(이름, 버전 등)와 같이 응답에 대한 부가적인 정보를 갖는 헤더.

    • Entity : 컨텐츠 길이나 MIME 타입과 같이 엔티티 바디에 대한 자세한 정보를 포함하는 헤더.

  • 본문 (Body)

HTTP Response

  • start-line (시작 줄)
    • HTTP 메서드
      • 서버가 수행해야 하는 동작을 나타낸다.
    • 상태 코드 (HTTP Status Code)
    • HTTP 버전
      • 응답 메시지에서 써야 할 HTTP 버전을 알려준다.
  • 헤더 (Header)
    • 클라이언트와 서버가 요청 또는 응답으로 부가적인 정보를 전송할 수 있도록 해준다

    • HTTP 헤더의 기본 구조를 따른다.

      다양한 요청 헤더가 있는데 다음과 같은 몇몇 그룹으로 나눌 수 있다.

    • General : 요청과 응답 모두에 적용되지만 바디에서 최종적으로 전송되는 데이터와는 관련이 없는 헤더.

    • Request : 페치될 리소스나 클라이언트 자체에 대한 자세한 정보를 포함하는 헤더.

    • Response : 위치 또는 서버 자체에 대한 정보(이름, 버전 등)와 같이 응답에 대한 부가적인 정보를 갖는 헤더.

    • Entity : 컨텐츠 길이나 MIME 타입과 같이 엔티티 바디에 대한 자세한 정보를 포함하는 헤더.

  • 본문 (Body)
    • 본문은 요청의 마지막 부분에 들어갑니다. 모든 요청에 본문이 들어가지는 않습니다. GETHEADDELETE , OPTIONS처럼 리소스를 가져오는 요청은 보통 본문이 필요가 없습니다. 일부 요청은 업데이트를 하기 위해 서버에 데이터를 전송합니다. 보통 (HTML 폼 데이터를 포함하는) POST 요청일 경우에 그렇습니다.
    • 넓게 보면 본문은 두가지 종류로 나뉩니다.
      • 단일-리소스 본문(single-resource bodies): 헤더 두 개([Content-Type](https://developer.mozilla.org/ko/docs/Web/HTTP/Headers/Content-Type)와 [Content-Length](https://developer.mozilla.org/ko/docs/Web/HTTP/Headers/Content-Length))로 정의된 단일 파일로 구성됩니다.
      • 다중-리소스 본문(multiple-resource bodies): 멀티파트 본문으로 구성되는 다중 리소스 본문에서는 파트마다 다른 정보를 지니게 됩니다. 보통 HTML 폼 (en-US)과 관련이 있습니다.
profile
욕심 많은 주니어 개발자입니다.

0개의 댓글