요청과 응답에 기반한 응답구조를 가짐. 클라이언트와 서버가 통신하기 위해 사용되는 통신규약임.
이번 포스트에서는 request message, response message의 구조를 정리하고자 한다.
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
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로 표현된다.
Request가 전송하는 데이터를 담는 부분임. 없다면 비어있음.
POST 요청의 경우 html 폼데이터가 포함되어 있음.
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 : 요청한 리소스를 지원하는 메소드 집합을 나열합니다. 현 상태에서 어떤 메소드를 사용할 수 있는지를 알 수 있습니다.
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