목적 : HTTP Header가 무엇이고, Header의 속성들은 무엇이 있고 어떤 역할을 하는 지 알아본다.
( 각 속성들을 어떻게 적용하고 종류는 얼마나 있는 지까지는 다루지 않는다. )
먼저 HTTP 메세지는 서버와 클라이언트 간에 데이터가 교환되는 방식입니다. 메세지 타입은 두 가지로 요청, 응답이 있습니다. 요청은 클라이언트가 서버로 전달해서 서버의 액션이 일어나게끔 하는 메세지이고, 응답은 요청에 대한 서버의 답변입니다. HTTP 메세지의 구조는 Header + Body로 이루어져 있습니다.
이중 HTTP Header는 클라이언트와 서버가 요청 또는 응답으로 부가적인 정보를 전송할 수 있도록 하는 역할을 합니다.
헤더는 크게 4가지로 분류되고, 각 헤더에 어떤 속성들이 있는 지 알아보도록 하겠습니다. (그림 참고)
공통 헤더는 요청 및 응답의 메세지 모두에서 사용되지만 컨텐츠에는 적용되지 않은 헤더입니다.
-
Date : 일반적인 HTTP 헤더는 만들어진 날짜와 시간을 포함합니다.
-
Connection : 현재의 전송이 완료된 후 네트워크 접속을 유지할지 말지를 제어합니다.
- keep-alive: 지속 연결
-close : 연결 종료
-
Cache-Control : 캐싱을 허용할지 허용하지 않을지를 정하기 위해 사용합니다. 캐싱은 단방향성이며, 이는 요청 내에 주어진 디렉티브가 응답 내에 주어진 디렉티브와 동일하다는 것을 뜻하지 않는다는 것을 의미합니다.
-
public, private, no-cache,… 등 종류 많음
-
Pragma
-
Trailer
서버가 응답을 조정할 수 있도록 요청 컨텍스트에 대한 정보를 제공하기 위해 HTTP 요청에 사용할 수 있는 HTTP 헤더 입니다.
- Host : 요청하는 자의 호스트명, 포트 번호를 포함합니다.
-host: http://developer.mozilla.org
- User-Agent : 요청자의 소프트웨어 정보( OS, 브라우저, 기타 버전 정보 등.. ) 를 표현합니다.
-어떤 종류의 브라우저에서 장애가 발생하는 지 파악이 가능하며 통계에 많이 사용되는 정보
-User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:50.0) Gecko/20100101 Firefox/50.0
- Accept : 요청을 보낼 때 서버에 이런 타입 (MIME)의 데이터를 보내줬으면 좋겠다고 명시할 때 사용하게 됩니다. 즉, 요청자가 원하는 미디어의 타입 및 우선순위를 표현합니다.
- Accept: application/json, text/plain, / ( json > text > all type 순으로 받는다는 표현 )
- Accept-Charset: utf-8 ( 문자 인코딩 )
-Accept-Language: ko, en-US ( 원하는 언어 )
-Accept-Encoding: br, gzip, deflate ( 원하는 컨텐츠 압축 방식 )
위와 같이 요청을 보내면 서버가 그에 맞춰 보내주면서 응답 헤더의 Content를 알맞게 설정하게 됩니다. ( Content- type 참고 )
- Authorization : 인증 토큰 ( jwt 토근, Bearer 토큰 등.. )을 서버로 보낼 때 사용하는 헤더입니다.
- Origin : POST 같은 요청을 보낼 때, 요청이 어느 주소에서 시작되었는 지를 나타냅니다. 여기서 요청을 보낸 주소와 받는 주소가 다르면 CORS 문제가 발생하게 됩니다.
-응답 헤더의 Access-Control-Allow-Origin와 관련 있습니다.
- Referer : 이전 페이지 주소가 담겨 있습니다. 어떤 페이지에서 지금 페이지로 들어왔는 지 알 수 있기 때문에 애널리틱스 같은 곳에서 많이 사용됩니다.
위치 또는 서버 자체에 대한 정보 ( 이름, 버전 ) 과 같이 응답에 대한 부가적인 정보를 갖는 헤더입니다.
- Access-Control-Allow-Origin : 요청을 보내는 프론트 주소와 받는 백엔드 주소가 다르면 CORS 에러가 발생하게 됩니다. 이 때 서버에서 응답 메세지에 Access-Control-Allow-Origin 헤더에 프론트 주소를 적어주어야 에러가 나지 않습니다. ( 또는 ' * ' 모든 주소 허용 )
- CORS 요청 시에는 미리 OPTIONS 주소로 서버가 CORS를 허용하는지 물어봅니다. 이 때 Access-Control-Request-Method로 실제로 보내고자 하는 메서드를 알리고, Access-Control-Request-Headers로 실제로 보내고자 하는 헤더들을 알립니다. Allow 친구들은 Request에 대응되는 애들로, 서버가 허용하는 메서드와 헤더를 응답하는데 사용됩니다. Request랑 Allow가 일치하면 CORS 요청이 이루어지는 것이죠.
- Allow : 해당 엔터티에 대해 서버측에서 지원 가능한 HTTP 메소드의 리스트를 나타냅니다.
- Allow : GET, HEAD -> 405 Method Not Allowed 에러와 함께 웹서버에서 제공 가능한 HTTP 메서드는 GET, HEAD 뿐임을 알려준다.
- Expires : 리소스가 지정된 일시까지 캐시로써 유효함을 나타냅니다. 즉, 응답 컨텐츠가 언제 만료되는 지를 나타냅니다.
-cache-control의 max- age와 동일한 동작을 하지만 max-age는 초 단위이고, expires는 지정된 형식을 사용하여 만료된 날짜와 시간을 지정할 수 있습니다. 만약 두개 모두 설정되어 있을 경우 cache-control > max-age 값을 사용하게 됩니다.
요청 및 응답 메세지 모두에서 사용 가능한 Entity ( 콘텐츠, 본문, 리소스 등 )에 대한 설명 헤더 항목입니다.
-HTTP 메시지 내 포함된 선택적인 개체에 대한 구체적인 미디어 타입 등의 설명
-HTTP 메시지는 이미지, 비디오, 오디오, HTML 문서, 전자메일 등의 개체들을 운반할 수 있다.
- Content - Length : 바이트 단위를 가지는 header + body 의 크기를 나타냅니다. 메세지의 크기에따라 자동으로 생성됩니다.
- Content-Encoding : 해당 객체 데이터의 압축 방식
- Content - Type : 해당 개체에 포함되는 미디어 타입 정보
- 컨텐츠의 타입 ( MIME 미디어 타입 ) 및 문자 인코딩 방식 (UTF-8 등.. ) 을 지정.
-컨텐츠 타입의 종류는 많기때문에, 미디어 타입 정보에 따라 찾아보고 지정해야 할 것입니다.
-https://yunzema.tistory.com/186
- Content - Disposition : 응답 본문을 브라우저가 어떻게 표시해야 할지 알려주는 헤더입니다. inline인 경우 웹페이지 화면에 표시되고, attachment인 경우 다운로드 됩니다.
-다운로드 되길 원하는 파일은 attachment 값을 설정하고, filename 옵션으로 파일명까지 지정해줄 수 있습니다. 파일용 서버일 경우 자주 사용하게 됩니다.
- Content-Security-Policy : 다른 외부 파일들을 불러오는 경우, 차단할 소스와 불러올 소스를 명시한다.
-Content-Security-Policy : default-src https: → https 를 통해서만 파일을 가져온다.
위에 목적에 적힌대로 모든 헤더들의 속성 정보를 담지는 못했지만 주로 사용되는 헤더들을 위주로 어떤 속성인지 알아보는 시간을 가졌습니다. 실제로 개발을 진행할 때 각 속성들이 어떤 것인지는 알지만 어떤 값을 설정해야할 지는 직접 찾아보셔야할 거 같습니다.
References