코린이에서 코른이로 ( HTTPS Headers )

양선우·2023년 3월 6일
1

Http Header란?

HTTP 헤더는 클라이언트와 서버가 요청 또는 응답으로 부가적인 정보를 전송할 수 있도록 해준다.

부가적 정보라 함은, 대표적으로 "요청자", "컨텐트 타입", "캐싱" 등등(수십 가지)가 있다.

Header의 종류
Http Header는 다음과 같이 4가지가 있다.

General header : 요청과 응답 모두에 적용되지만 바디에서 최종적으로 전송되는 데이터와는 관련이 없는 헤더.

Request header : 페치될 리소스나 클라이언트 자체에 대한 자세한 정보를 포함하는 헤더. == 내가 보내는 메세지의 헤더

Response header : 위치 또는 서버 자체에 대한 정보(이름, 버전 등)와 같이 응답에 대한 부가적인 정보를 갖는 헤더. == 내가 받은 메세지의 헤더

Entity header: 컨텐츠 길이나 MIME 타입과 같이 엔티티 바디에 대한 자세한 정보를 포함하는 헤더.

4가지를 살펴보자!
실제로 존재하는 사이트에서 위의 4가지 정보를 살펴보자.

3가지의 Header가 보인다.
(Entity Header는 request, response에 녹아있는 것 같다.)

Http Header 속성

내용이 너무 많아서 대표적인 항목만 살펴보자.

General Header (공통 헤더)

  1. Date
    Date: (day-name), (day) (month) (year) (hour):(minute):(econd) GMT

예시
"Date: Wed, 21 Oct 2015 07:28:00 GMT"

  1. Connection
    close, Keep-Alive가 있다.
    -- close는 메세지 교환 후 TCP 연결 종료
    -- Keep-Alive는 메세지 교환 후 TCP 연결 유지

예시
Connection: close
Connection: Keep-Alive

Request Header

  1. Host
    요청하는 자의 호스트명, 포트 번호를 포함하고 있다.
  • 예시
    Host: developer.mozilla.org
  1. User-Agent
    요청자의 소프트웨어 정보를 표현한다.
    -- 소프트웨어 정보 : os, 브라우저, 기타 버전 정보

User-Agent를 Request에 넣지 않고 요청을 했을 경우, 정보를 주지 않는 곳도 있다. 이유는 봇(스크래핑, 크롤링, 기타 등등)이 요청을 하는 경우에는 User-Agent의 경로로 오지 않기 때문이다.

하지만 봇에 User-Agent를 기입하면 이것마저도 봇이 아니라 사람이 요청한 줄 안다..ㅋㅋ

  • 예시
    User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:50.0) Gecko/20100101 Firefox/50.0
  1. Accept
    요청자가 원하는 미디어의 타입 및 우선순위를 표현한다.

Accept는 부속 속성이 더 있다.

Accept-Language : 사용자가 원하는 언어셋이다.
Accept-Encodig : 사용자가 원하는 인코딩 방식이다.

  • 예시
    Accept: application/json, text/plain, /
    -> json > text > all type 순으로 받는다는 표현이다.
    Accept-Language: en-US,en;q=0.5
    -> 언어는 en이라는 표현이다. q는 가중치다.
    Accept-Encoding: gzip, deflate, br
    -> gzip, deflate, br(Brotli) 등등의 압축 포맷을 받는다는 표현이다.
  1. cookie
    서버에 의해서 이전에 저장된 쿠키를 포함시키는 속성이다.
  • 예시
    cookie: aaa=3LEMQRTO6EBF4; page_uid=bbb123p0YihsshvyCBRssssstWG-3033307; nx_ssl=100; nid_inf=333333333;NID_AUT=PSS11Z0wmL63LVUNoGF2ft123123123123/AomAn5zPT6Ni2uGyyuWIfp9hb; NID_JKL=TNg7Y994769rvA+5dcCHhdB7TBdl12345676+nQdCM=; AD_SHP_BID=9;spage_uid=hRDT1233455
    (네이버 쇼핑에서의 쿠키 - 내 맘대로 수정좀 했음)
  1. Referer
    Referer 요청 헤더는 현재 요청을 보낸 페이지의 절대 혹은 부분 주소를 포함한다.

두 가지의 속성을 더 가지고 있다.

referrer-policy : 우선 스펠링이 다르다.(오타가 스펙이 되어버렸다고 한다..) 이 헤더는 요청과 함께 얼마나 많은 레퍼럴 정보를 포함하는지 알려준다.

referer-after : 응답 헤더에 속하는 것인데, 다음에 올 요청이 이루어지기 전에 사용자가 대기해야 하는 시간을 가르킨다.

Response Header

  1. Server : 서버 소프트웨어의 정보를 표현한다.

  2. content-encoding : 응답하는 내용의 인코딩 포맷을 표현한다.

  3. content-type: 응답하는 내용의 타입과 문자 포맷을 표현한다.

  4. cache-control : 캐시 관리에 대한 정보를 표현한다.
    ex) cache-control :
    no-cache(서버측에 캐시를 사용해도 되는지 확인),
    no-store(캐싱x),
    must-revalidate(만료 캐시만 서버측에 확인),
    public(중개 서버에 저장 가능)/private(사용자 브라우저에만 등록),
    max-age(캐시 유효기간)

  5. date : 응답 메세지가 생성된 시간을 표현한다.

  6. vary : 캐시된 응답을 향후의 응답에 사용할 기준을 표현한다.
    ex) Vary: User-Agent
    이렇게 설정되어 있으면, 모바일 유저에게 데스크탑 유저를 위한 캐시 컨텐츠가 제공되지 않게 할 수 있다.

  7. Set-Cookie : 서버에서 사용자에게 세션 쿠키 정보를 전달한다.

  8. Age : max-age내에서 캐시가 얼마나 지났는지 초 단위로 표현한다.

profile
코딩이 하고 싶은 사람

0개의 댓글