1. HTTP(HyperText Transfer Protocol)

  • HTML과 같은 문서를 전송하기 위한 Application Layer 프로토콜이다
  • HTTP는 웹 브라우저와 웹 서버의 소통을 위해 디자인되었다
  • 전통적인 클라이언트-서버 모델에서 클라이언트가 HTTP messages 양식에 맞춰 요청을 보내면, 서버도 HTTP messages 양식에 맞춰 응답한다
  • HTTP는 특정 상태를 유지하지 않는 특징이 있다 (무상태성(Stateless))

 

2. HTTP message

 1) 개요

  • 클라이언트와 서버 사이에서 데이터가 교환되는 방식이다
  • HTTP messages에는 요청(Requests) 응답(Responses) 의 두 가지 유형이 있다
  • HTTP messages는 몇 줄의 텍스트 정보로 구성된다
  • 개발자가 직접 작성하지 않아도 구성 파일, API, 기타 인터페이스에서 HTTP messages를 자동으로 완성한다
  • HTTP 메시지의 시작 줄과 HTTP 헤더를 묶어서 요청 헤드(head)라고 한다
  • HTTP 메시지의 페이로드는 본문(body)이라고 한다

 2) 구성

  • start line
    - 요청이나 응답의 상태를 나타내며, 항상 첫 번째 줄에 위치한다
    - 응답에서는 status line이라고 한다
  • HTTP headers
    - 요청을 지정하거나, 메시지에 포함된 본문을 설명하는 헤더의 집합이다
  • empty line
    - 요청에 대한 모든 메타 정보가 전송되었음을 알리고, 헤더와 본문을 구분하는 빈 줄을 삽입한다
  • body
    - 요청과 관련된 데이터나 응답과 관련된 데이터 또는 문서를 포함하며, 요청과 응답의 유형에 따라 선택적으로 사용한다

 

3. 요청(Requests)

 1) Start line

  • 클라이언트가 서버에 보내는 메시지이다
  • 세가지 요소를 가지고 있다
  • 수행할 작업(GET, PUT, POST 등)이나 방식(HEAD or OPTIONS)을 설명하는 HTTP method를 나타낸다
    - GET method는 리소스를 받아 온다
    - POST method는 데이터를 서버로 전송한다
  • 요청 대상(일반적으로 URL이나 URI) 또는 프로토콜, 포트, 도메인의 절대 경로는 요청 컨텍스트(context)에 작성된다
  • 요청 형식은 HTTP method 마다 다르다
    - origin 형식
     : ?와 쿼리 문자열이 붙는 절대 경로이다
     : POST, GET, HEAD, OPTIONS 등의 method와 함께 사용한다
     : POST / HTTP 1.1GET /background.png HTTP/1.0HEAD /test.html?query=alibaba HTTP/1.1OPTIONS /anypage.html HTTP/1.0

    - absolute 형식
     : 완전한 URL 형식이다
     : 프록시에 연결하는 경우 대부분 GET method와 함께 사용한다
     : GET http://developer.mozilla.org/en-US/docs/Web/HTTP/Messages HTTP/1.1

    - authority 형식
     : 도메인 이름과 포트 번호로 이루어진 URL의 권한요소(authority component) 이다
     : HTTP 터널을 구축하는 경우, CONNECT와 함께 사용할 수 있다
     : CONNECT developer.mozilla.org:80 HTTP/1.1

    - asterisk 형식
     : OPTIONS 와 함께 별표'*' 하나로 서버 전체를 표현한다
     : OPTIONS * HTTP/1.1
  • HTTP 버전에 따라 HTTP message의 구조가 달라지므로 start line에 HTTP 버전을 함께 입력한다

 2) Headers

  • 헤더의 기본 구조는 헤더 이름(대소문자 구분이 없는 문자열), 콜론( : ), 값  으로 되어 있다
  • headers 는 여러 종류가 있으며, 아래의 그룹으로 나눌 수 있다
    - General headers
     : 메시지 전체에 적용되는 헤더이다
     : body를 통해 전송되는 데이터와는 관련이 없는 헤더입니다.

    - Request headers
     : fetch를 통해 가져올 리소스나 클라이언트 자체에 대한 자세한 정보를 포함하는 헤더이다
     : User-Agent, Accept-Type, Accept-Language과 같은 헤더는 요청을 보다 구체화한다
     : Referer처럼 컨텍스트를 제공하거나 If-None과 같이 조건에 따라 제약을 추가할 수 있다

    - Representation headers
     : Entity headers라고 부르기도 한다
     : Content-Length 와 같은 헤더는 요청 본문에 적용된다
     : body에 담긴 리소스의 정보(콘텐츠 길이, MIME 타입 등)를 포함하는 헤더이다
     : body가 없는 경우 전송되지 않는다

 

3) Body

  • 요청의 body는 HTTP messages 구조의 마지막에 위치한다
  • 모든 요청에 body가 필요하지는 않다
  • GET, HEAD, DELETE, OPTIONS처럼 서버에 리소스를 요청하는 경우에는 본문이 필요하지 않다
  • POST나 PUT과 같은 일부 요청은 데이터를 업데이트하기 위해 사용한다
  • body는 다음과 같이 두 종류로 나눌 수 있습니다.
    - Single-resource bodies(단일-리소스 본문)
     : 헤더 두 개(Content-Type 과 Content-Length)로 정의된 단일 파일로 구성된다

    - Multiple-resource bodies(다중-리소스 본문)
     : 여러 파트로 구성되며, 각 파트마다 다른 정보를 가진다
     : HTML form 과 관련이 있다

 

4. 응답(Responses)

 1) Status line

  • 응답의 첫 줄은 Status line이라고 한다
  • HTTP/1.1 404 Not Found. 처럼 구성된다
  • 다음의 정보를 포함한다
    - 현재 프로토콜의 버전
     : 보통 HTTP/1.1 이다

    - 상태 코드
     : 요청의 결과(성공여부)를 나타낸다
     : 200, 302, 404 등...

    - 상태 텍스트
     : 상태 코드에 대한 설명을 간결하게 나타낸다

 

 2) Headers

  • 응답의 HTTP headers는 요청 헤더와 동일한 구조를 가진다
  • 헤더 이름(대소문자 구분이 없는 문자열), 콜론( : ), 값 
  • 값은 헤더에 따라 다르다
  • 요청의 헤더처럼 그룹으로 나눌 수 있다
    - General headers
     : 메시지 전체에 적용되는 헤더이다
     : body를 통해 전송되는 데이터와는 관련이 없는 헤더이다

    - Response headers
     :위치 또는 서버 자체에 대한 정보(이름, 버전 등)와 같이 응답에 대한 부가적인 정보를 갖는 헤더이다
     : Vary, Accept-Ranges와 같이 상태 줄에 넣기에는 공간이 부족했던 추가 정보를 제공한다

    - Representation headers
     : Entity headers라고 부르기도 한다
     : body에 담긴 리소스의 정보(콘텐츠 길이, MIME 타입 등)를 포함하는 헤더이다

 

 3) Body

  • 응답의 body는 HTTP messages 구조의 마지막에 위치한다
  • 모든 응답에 body가 필요하지는 않다
  • 201, 204와 같은 상태 코드를 가지는 응답에는 body가 필요하지 않다
  • 응답의 body는 다음과 같이 두 종류로 나눌 수 있다
    - Single-resource bodies(단일-리소스 본문)
     : 길이가 알려진 단일-리소스 본문은 두 개의 헤더(Content-Type, Content-Length)로 정의한다
     :길이를 모르는 단일 파일로 구성된 단일-리소스 본문은 Transfer-Encoding이 chunked 로 설정되어 있으며, 파일은 chunk로 나뉘어 인코딩되어 있다

    - Multiple-resource bodies(다중-리소스 본문)
     : 서로 다른 정보를 담고 있는 body이다

 4) Stateless

  • 상태를 가지지 않는다는 의미이다
  • HTTP로 클라이언트와 서버가 통신을 주고받는 과정에서, HTTP가 클라이언트나 서버의 상태를 확인하지 않는다
  • 로그인, 로그아웃,상세 화면 이동, 카트 적재 등 클라이언트에서 발생한 모든 상태를 HTTP 통신이 추적하지 않는다
  • HTTP는 통신 규약일 뿐이므로, 상태를 저장하지 않는다
  • 상태 저장이 필요하면 쿠키-세션, API 등을 통해 상태를 확인할 수 있다
  • Stateless(무상태성)이 HTTP의 큰 특징이다

 

※ 참조

▶ HTTP 에러 코드

HTTP response status codes - HTTP | MDN (mozilla.org)

 

HTTP response status codes - HTTP | MDN

HTTP response status codes indicate whether a specific HTTP request has been successfully completed. Responses are grouped in five classes:

developer.mozilla.org

 

HTTP 정의

HTTP - 위키백과, 우리 모두의 백과사전 (wikipedia.org)

 

HTTP - 위키백과, 우리 모두의 백과사전

HTTP(HyperText Transfer Protocol, 문화어: 초본문전송규약, 하이퍼본문전송규약)는 W3 상에서 정보를 주고받을 수 있는 프로토콜이다. 주로 HTML 문서를 주고받는 데에 쓰인다. 주로 TCP를 사용하고 HTTP/3

ko.wikipedia.org

REST API

5 Basic REST API Design Guidelines (restcase.com)

 

5 Basic REST API Design Guidelines

As soon as we start working on an API, design issues arise. Robust and strong design is a key factor for API success. A poorly designed API will indeed lead to misuse or – even worse – no use at all by its intended clients: application developers. Crea

blog.restcase.com

 상태코드

https://docs.oracle.com/cd/E17802_01/products/products/servlet/2.3/javadoc/javax/servlet/http/HttpServletResponse.html

 

: Interface HttpServletResponse

 void setStatus(int sc, java.lang.String sm)           Deprecated. As of version 2.1, due to ambiguous meaning of the message parameter. To set a status code use setStatus(int), to send an error with a description use sendError(int, String).

docs.oracle.com

 

 

'Network' 카테고리의 다른 글

네트워크 - REST API  (0) 2022.08.16
네트워크 - 브라우져(Browser)  (0) 2022.06.08
네트워크 - 클라이언트(Client)  (0) 2022.06.07

+ Recent posts