HTTP 메시지는 시작줄, 헤더, 본문으로 구성되어있다. 이번엔 이중에 헤더에 대해서 알아보려 한다.
헤더의 종류는 무수히 많기 때문에 먼저 요청과 응답에서 공통으로 사용하는 헤더부터 알아보았다.
(제로초님 블로그를 참조하였다)
공통 헤더
요청과 응답에 모두 사용되는 헤더이다.
Date
HTTP 메시지가 만들어진 시각이다. (자동으로 만들어짐)
Connection
기본적으로 keep-alive로 되어있음 (HTTP/2에서는 사라졌다고한다)
Content-Length
요청과 응답 메시지의 본문 크기를 바이트 단위로 표시. 메시지 크기에 따라 자동으로 만들어진다.
Content-Type
컨텐츠의 타입과 문자열 인코딩을 명시할 수 있다.
Content-Language
사용자의 언어를 뜻한다.
Content-Encoding
컨텐츠가 압축된 방식을 말해준다. br, gzip, deflate 등의 알고리즘으로 압축해서 보내면, 브라우저가 알아서 해제하여 사용한다.
컨텐츠의 용량이 줄어들기 때문에 압축을 하면 요청이나 응답의 전송 속도가 빨라지고, 데이터 소모량도 줄어든다.
요청 헤더
Host
서버의 도메인 네임과 포트가 나타나는 부분이다. (host 헤더는 반드시 하나가 존재해야 한다)
User-Agent
현재 사용자가 어떤 클라이언트(운영체제)를 이용하여 요청을 보냈는지 나온다.
(이를 활용하여 IE로 접속한 사람들을 찾아내어, IE는 지원하지 않는다 등의 메시지를 표시하기도 한다)
Accept 시리즈 (공통 헤더의 Content 시리즈와 대응된다)
요청을 보낼 때 서버에서 이런 타입의 데이터를 보내줬으면 좋겠다고 명시할 때 사용한다.
ex)
Accept : text/html (HTML 형식인 응답을 처리하겠다)
Accept: image/png, image/git (콤마로 여러 타입 동시 적기 가능)
Accept: text/* (*는 와일드카드로 앞에 뜻은 텍스트이기만 하면된다는 뜻)
Accept-Charset: urf-8 (문자 인코딩을 명시)
Accept-Language: ko, en-US (원하는 언어)
Accept-Encoding: br, gzip, deflate (원하는 컨텐츠 압축방식)
Authorization
인증 토큰을 서버로 보낼 때 사용하는 헤더이다. (토큰의 종류를 먼저 알리고 그 뒤에 토큰 문자를 적어 보낸다)
Origin
POST 같은 요청을 보낼 때, 요청이 어느 주소에서 시작되었는지 나타냄
-> 여기서 요청을 보낸 주소와 받는 주소가 다르면 CORS 문제가 발생하기도 함!!
Referer
이 페이지의 이전 페이지 주소가 담겨있다. 이 헤더를 사용하면 어떤 페이지에서 지금 페이지로 들어왔는지 알 수 있다.
응답 헤더
Access-Control-Allow-Origin
요청을 보내는 프론트 주소와 받는 백엔드 주소가 다르면 CORS 에러가 발생한다. 이때 서버에서 응답 메시지의 위 헤더에 프론트 주소를 적어서 보내줘야한다. 프로토콜, 서브도메인, 도메인, 포트 중 하나만 달라도 CORS 에러가 발생한다.
(*를 지정하면 모든 주소에 대해 CORS 요청을 허용할 수 있다)
참고로 CORS 요청 시에는 OPTIONS 메소드를 통하여 서버가 CORS를 허용하는지 물어보고 이때 Access-Control-Request-Method로 실제로 보내고자 하는 메소드를 알리고, Access-Control-Request-Headers로 실제로 보내고자 하는 헤더들을 알린다.
서버는 응답으로 Access-Control-Allow-Methods와 Access-Control-Allow-Headers로 허용하는 메소드와 헤더를 알려준다.
Allow
CORS 요청 이외에도 적용이 가능하다.
ex) Allow: GET (GET 요청만 받겠다는 뜻)
Content-Disposition
응답의 본문을 브라우저가 어떻게 표시해야 할 지 알려주는 헤더이다.
inline일 경우 웹페이지 화면에 표시되고 attachment일 경우 다운로드 된다.
Location
300번대 응답이나 201 응답일 경우 어느 페이지로 이동할지 알려주는 헤더이다.
Content-Security-Policy
다른 외부 파일을 불러오는 경우, 차단할 소스와 불러올 소스를 명시할 수 있다.
'HTTP' 카테고리의 다른 글
(191215) CORS (0) | 2019.12.15 |
---|---|
(191215) AJAX (0) | 2019.12.15 |
(191208) HTTP Method, Status code (0) | 2019.12.08 |
(191208) HTTP (0) | 2019.12.08 |
댓글