Java

HTTP Request/Response

짤진이 2024. 4. 26. 13:01
반응형

HTTP

HyperText Transfer Protocol

  • 하이퍼텍스트(HTML) 문서를 교환하기 위해 만들어진 protocol(통신 규약).
  • 즉 웹상에서 네트워크로 서버끼리 통신을 할때 어떠한 형식으로 서로 통신을 하자고 규정해 놓은 "통신 형식" 혹은 "통신 구조" 라고 보면 된다.
    프론트앤드 서버와 클라이언트간의 통신에 사용된다.
    또한 백앤드와 프론트앤드 서버간에의 통신에도 사용된다.
  • HTTP는 TCP/IP 기반으로 되어있다.
  • HTTP 기본적으로 request(요청)/response(응답) 구조로 되어있다.
    클라이언트가 HTTP request를 서버에 보내면 서버는 HTTP response를 보내는 구조
    클라이언트와 서버의 모든 통신이 요청과 응답으로 이루어 진다.

 

HTTP 특징

HTTP 는 상태가 없는 프로토콜이다.

즉 데이터를 주고받기 위한 각각의 요청이 서로 독립적으로 관리되고,

이전 데이터 요청과 다음 데이터 요청이 서로 관련이 없다는 뜻이다.

-> 서버가 클라이언트의 상태를 저장하지 않는다.

Request

Request  Message

 

HTTP Request Message 는 3가지 부분으로 나누어진다,.

 

Start Line

  • HTTP Request Message 의 시작라인
  • method, target, version 3가지 부분으로 구성된다.
  • method : GET, POST, PUT, DELETE
  • target : HTTP Request 가 전송되는 목적지 주소
  • version : 버전에 따라 메시지 구조가 다른경우가 있어서 명시.

Headers

  •     요청의 추가적인 정보(?)를 담고 있는 부분
  •     key : value 의 형태
  •     general headers, request headers, entity headers 3가지 부분으로 구성
  •      Host : 요청하려는 서버 호스트 이름과 포트번호
  •      User-agent : 클라이언트의 프로그램 정보. 브라우저, OS 등의 정보를 담고 있어, 서버에서 이에 맞는 데이터 형식으로 요청을 받고 응답을 준다
  •         Referer : 직전에 머물렀던 웹주소
  •         Accept : 클라이언트가 처리 가능한 미디어 타입 종류 나열
  •         Authorization : 인증 토큰을 서버로 보낼때 쓰이는 헤더
  •         Origin : 서버로 POST 요청할때 어느 주소에서 시작되었는지 주로 나타냄. 이값으로 요청을 보낸 주소와 받는 주소가 다르면              CORS 에러 발생
  •         Cookie : key - value 쌍으로 간단하게 캐싱된 정보

Body  

  •     HTTP Request 가 전송하는 데이터를 담고 있는 부분.
  •     post 요청일 경우에는 대부분의 상황에서 HTML 폼 데이터가 포함되어 있다.

 

어쨌든 서버에서 요구하는 조건에 맞추어 클라이언트는 요청을 해야하고,

서버는 이에 맞추어 응답을 제공한다.

 

서버에서 요구하는 조건들은 결국 데이터를 처리하고, 요청에 부합한 데이터나 결과물을 내려주기 위함이기에

이에 맞추어 요청을 해야한다.

 

Response Message

HTTP Response Message는 request와 동일하게 공백(blank line)을 제외하고 3가지 부분으로 나누어진다.

  • Status Line
  • Headers
  • Body

status line

HTTP Response의 상태를 간략하게 나타내주는 부분

HTTP Response의 status line또한 3가지 부분으로 구성

  • HTTP version
  • Status Code
  • Status Text
HTTP/1.1 200 OK
[HTTP version] [Status Code] [Status Text]

headers

Request의 headers와 동일하다.

다만 response에서만 사용되는 header 값들이 있다.

예를 들어, User-Agent 대신에 Server 헤더가 사용된다.

body

Response의 body와 일반적으로 동일하다.

Request와 마찬가지로 모든 response가 body가 있지는 않다.

데이터를 전송할 필요가 없을경우 body가 비어있게 된다.

 

 

내가 생각하는 주요 요소는.....!

request headers 라고 생각한다. request 요청을 보낼 때 header 값이 맞지 않으면 응답이 오지 않을 뿐더러 정확한 header 값은 API 명세서 이외에 알 수 없기 때문이다.

반응형