코드짜는 노인네

[Spring] MVC - Request 본문

spring

[Spring] MVC - Request

ikohong 2022. 8. 22. 04:02
728x90
반응형

[Spring] MVC - Request


 

스프링의 MVC란
>> MVC (Model - View - Controller) 디자인 패턴

Request는 한글로 번역하면, '요청'이라는 단어입니다. 이 요청은 사용자가 특정 URL에 접속을 할 때 클라이언트에서 서버로 Request를 보내는데요.

Requset는 클라이언트가 서버로 전달하는 메시지로, 서버 측 액션을 유도하게 됩니다. 이 때 전달하는 메시지를 'HTTP 메세지'라고 합니다. 

HTTP 메세지

HTTP 메세지는 서버와 클라이언트 간의 데이터가 교환되는 방식을 의미합니다. HTTP 메세지의 공통된 구조는 다음과 같습니다.

  1. 시작 줄(start-line): HTTP 요청 / 또는 요청에 대한 성공 또는 실패가 기록된다. 항상 한 줄로 끝난다.
  2. HTTP 헤더: 시작 줄 다음으로 요청에 대한 설명 / 또는 메시지 본문에 대한 설명이 들어간다.
  3. 빈 줄: 요청에 대한 모든 메타 정보가 전송되었음을 알리는 빈 줄이 삽입된다. (헤드와 본문 사이)
  4. 본문(optional): 요청과 관련된 데이터(HTML form 콘텐츠 등) / 또는 응답과 관련된 문서(document)가 선택적으로 들어간다. 본문의 존재와 크기는 시작 줄 및 HTTP 헤더에 명시된다.
  • HTTP 메시지의 시작 줄과 HTTP 헤더를 묶어서 요청 헤드(head) 라고 부르며, 이와 반대로 HTTP 메시지의 페이로드는 본문(body) 이라고 한다.
Requset HTTP 메세지

시작줄은 'HTTP 메소드 + URI + HTTP 버젼'으로 구성이 되어있습니다. 

  • HTTP 메소드
    • 영어 동사 (GET, POST, PUT) 혹은 명사 (HEAD, OPTIONS)를 사용해 서버가 수행해야 될 동작을 나타냅니다.
  • URI
    • URL  또는 프로토콜, 포트, 도메인의 절대 경로가 옵니다.
  • HTTP 버젼
    • 응답 메세지를 써야 할 경우 HTTP의 버젼을 알려주는 역할을 합니다.
Requests 헤더 (headers)

요청의 내용을 좀 더 구체화하고, 컨텍스트를 제공합니다. HTTP 헤더는 다음과 같이 구성이 됩니다.

  • Host: 서버의 도메인 이름(포트는 Optional)
  • User-Agent: 사용자 에이전트(클라이언트)의 브라우저, 운영 체제, 플랫폼 및 버전
  • Accept: 클라이언트가 이해 가능한 (허용하는) 파일 형식 (MIME TYPE)
  • Accept-Encoding: 클라이언트가 해석할 수 있는 인코딩, 콘텐츠 압축 방식
  • Authorization: 인증 토큰(JWT나 Bearer 토큰)을 서버로 보낼 때 사용하는 헤더, API 요청을 할 때 토큰이 없으면 거절을 당하기 때문에 이 때, Authorization을 사용
  • Origin: POST와 같은 요청을 보낼 때, 요청이 어느 주소에서 시작되었는지를 나타냄. 여기서 요청을 보낸 주소와 받는 주소가 다르면 CORS 문제가 발생하기도 함
  • Referer: 이 페이지 이전의 페이지 주소가 담겨 있음. 이 헤더를 사용하면 어떤 페이지에서 지금 페이지로 들어왔는지 알 수 있음
  • IF-Modified-Since: 최신 버전 페이지 요청을 위한 필드, 요청의 부하를 줄임. 서버는 지정된 날짜 이후에 마지막으로 수정된 경우에만 200 상태 코드로 요청된 리소스를 다시 보냄, 만약 이후에 리소스가 수정되지 않았다면 서버는 본문 없이 304 상태 코드로 응답을 보냄
General headers - 메세지 전체에 적용되는 헤더
  • Connection: 현재의 전송이 완료된 후 네트워크 접속을 유지할지 말지를 제어함. keep-alive면, 연결은 지속되고, 동일한 서버에 대한 후속 요청을 수행할 수 있음. 일반적으로 HTTP/1.1을 사용하고 Connection은 기본적으로 keep-alive로 되어있음.Vvvasdfhkl
  • Via: 요청헤더와 응답헤더에 포워드 프록시와 리버스 프록시에 의해서 추가됨. 포워드 메시지를 추적하거나, 요청 루프 방지, 요청과 응답 체인에 따라 송신자의 프로토콜 정보를 식별함
Entity 헤더 - 요청 본문에 적용되는 헤더
  • Content-Length: 요청과 응답 메시지의 본문 크기 바이트 단위로 표시해줌. 메시지 크기에 따라 자동으로 만들어짐
    • 예) Content-Length: 345
Request 본문
  • 본문은 요청의 마지막 부분에 들어가며, 모든 요청에 본문이 들어가지는 않는다. GET, HEAD, DELETE , OPTIONS처럼 리소스를 가져오는 요청에서는 보통 본문이 필요없다.
  • 일부 요청은 업데이트를 하기 위해 서버에 데이터를 전송한다. 보통 (HTML Form 데이터를 포함하는) POST 요청일 경우 서버에 데이터를 전송한다.
  • 넓게 보면 본문은 두 종류로 나뉜다.
    • 단일-리소스 본문(single-resource bodies): 헤더 두 개(Content-Type Content-Length)로 정의된 단일 파일로 구성된다.
    • 다중-리소스 본문(multiple-resource bodies): multipart 본문으로 구성되며, 파트마다 다른 정보를 포함한다. 보통 HTML Form과 관련이 있습니다.

 

Controller 와 HTML Request 메세지

 

참고자료
 

[Web] HTTP와 Request, Response의 개념 이해

Hyper Text Transfer Protocol의 약자Hyper Text: 직역하면 초월적인 텍스트. 텍스트 간의 연결 방식이 순차적 접근 방식이 아닌 비순차적(초월적) 접근 방식이다. (페이지에서 다른 데이터로 이동할 때) Tran

velog.io

 

728x90
반응형
Comments