HTTP 프로토콜 메세지 구조

이수빈·2023년 8월 29일
0

CS

목록 보기
3/4

HTTP 프로토콜

  • 요청과 응답에 기반한 응답구조를 가짐. 클라이언트와 서버가 통신하기 위해 사용되는 통신규약임.

  • 이번 포스트에서는 request message, response message의 구조를 정리하고자 한다.

Request Message

  • 공백을 제외하고 3가지구조로 나누어짐 => start line, headers, body

Start Line

GET /test.html HTTP/1.1
[HTTP METHOD] / [REQUEST TARGET] / [HTTP VERSION]

  • 기본적으로 브라우저는 favicon을 불러오기 위해 요청을 보내기 때문에, 아무 요청을 안보냈을때 GET /favicon.ico HTTP/1.1 이런식으로 요청이 가게된다.

  • 이를 방지하는 방법은 head 태그안에 다음 태그를 추가해주면 해결된다.

<link rel="icon" href="data:,">

ref) https://stackoverflow.com/questions/1321878/how-to-prevent-favicon-ico-requests

Headers

  • request에 대한 추가정보를 담고 있음. 3가지 부분으로 나뉜다.(general headers, request headers, entity headers)

  • General headers : 요청 및 응답 메시지 모두에서 사용 가능한 일반 목적의 헤더 항목.

  • Request headers : Request Message에서만 나타납니다. 요청을 구체화 시키거나, context 제공, 또는 제약사항 등이 기재됨.

  • Entity headers : Reqest, Response에서 모두 사용 가능한 Entity(콘텐츠, 본문, 리소스 등)에 대한 설명 부분. 만약 본문내용이 없는 요청이라면 Entity 헤더는 전송되지 않음.

  • Host 요청하려는 서버 호스트 이름과 포트번호

  • User-agent 클라이언트 프로그램 정보. 이 정보를 통해 서버는 클라이언트 프로그램(브라우저)에 맞는 최적의 데이터를 보내줄 수 있다.

  • Referer 바로 직전에 머물렀던 웹 링크 주소

  • Accept 클라이언트가 처리 가능한 미디어 타입 종류 나열

  • If-Modified-Since 여기에 쓰여진 시간 이후로 변경된 리소스 취득. 페이지가 수정되었으면 최신 페이지로 교체한다.

  • Authorization 인증 토큰을 서버로 보낼 때 쓰이는 Header

  • Origin 서버로 Post 요청을 보낼 때 요청이 어느 주소에 시작되었는지 나타내는 값. 이 값으로 요청을 보낸 주소와 받는 주소가 다르면 CORS(Cross-Origin Resource Sharing) 에러가 발생한다.

  • Cookie 쿠키 값이 key-value로 표현된다.

body

  • Request가 전송하는 데이터를 담는 부분임. 없다면 비어있음.

  • POST 요청의 경우 html 폼데이터가 포함되어 있음.

Response Message

  • 3가지 영역으로 나누어짐. => status line, headers, body

Status line

  • HTTP Response의 상태를 간략하게 나타내주는 부분, 3가지 부분으로 구성 (HTTP version
    Status Code, Status Text)

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

  • 상태코드를 통해 성공 실패여부를 나타내고 상태 텍스트는 코드에 대한 간결한 설명을 포함한다.
  • Request header와 동일함, response header에서만 사용되는 값들이 존재함

  • Request header 대신 Response header가 존재함.

  • Access-Control-Allow-Origin : 응답이 origin으로 부터의 요청 코드와 공유될 수 있는지를 나타냅니다. 만약 프론트엔드와 백엔드 주소가 다르면 CORS 에러 발생

  • Set-cookie : 서버에서 사용자 브라우저에 쿠키를 전송하기 위해 사용합니다.

  • Last-Modified : 서버가 알고있는 가장 마지막 수정된 날짜와 시각입니다. 저장된 리소스가 이전과 같은지 유효성 검사자로 사용됩니다.

  • Location : 리다이렉션될 URL 주소를 명시합니다. 해당 내용은 Statue code가 3.XX(redirect), 201(created)일 때 사용합니다.

  • Allow : 요청한 리소스를 지원하는 메소드 집합을 나열합니다. 현 상태에서 어떤 메소드를 사용할 수 있는지를 알 수 있습니다.

Body

  • 응답에 본문이 필요한 경우 response로 보내줌.

상태코드

1xx (요청에 대한 정보): Request received, continuing process.
요청을 받으면, 기존 작업 처리를 계속 진행한다.

2xx (성공): The action was successfully received, understood, and accepted.
작업이 성공적으로 수용되고, 해석되었으며, 수행되었다.
200(성공), 201(새 리소스 작성), 202(요청이 접수, 아직 처리 X)

3xx (리다이렉션): Further action needs to be taken in order to complete the request.
요청 작업을 완료하기 위해 추가적인 동작을 수행해야한다.
300(여러개의 응답으로 선택해야 한다), 301(영구 이동), 302(임시 이동)

4xx (클라이언트 오류): The request contains bad syntax or cannot be fulfilled.
클라이언트 요청에 부적절한 구문이 있거나 해당 내용이 수행될 수 없다.
401(권한 없음), 404(금지됨), 404(찾을 수 없음, 서버에 없음)

5xx (서버 오류): The server failed to fulfil an apparently valid request.
서버가 유효한 요청에 대한 작업을 수행하지 못했다.
500(내부 서버 오류), 501(메소드 인식 불가), 503(서비스 사용 불가)

ref) https://hahahoho5915.tistory.com/62
https://velog.io/@ss-won/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-HTTP-Message%EC%99%80-Status-Code

profile
응애 나 애기 개발자

0개의 댓글