돌아가기

왜 오리진이 필요할까요

중요도: 5

HTTP 헤더를 구성하는 Referer는 주로 네트워크 요청을 처음 시작한 페이지의 url 정보를 담고 있습니다.

http://javascript.info/some/url에서 http://google.com에 요청을 보냈다고 가정해봅시다. 이 때 헤더는 다음과 같습니다.

Accept: */*
Accept-Charset: utf-8
Accept-Encoding: gzip,deflate,sdch
Connection: keep-alive
Host: google.com
Origin: http://javascript.info
Referer: http://javascript.info/some/url

보다시피 헤더에 RefererOrigin 정보가 모두 들어가 있습니다.

이때 이런 의문이 떠오를 수 있습니다.

  1. Referer에 더 많은 정보가 있을 수 있는데 왜 Origin을 따로 두었을까?
  2. 헤더에 RefererOrigin이 없을 수도 있을 텐데 이런 경우엔 어떤 일이 발생할까?

간혹 Referer가 없는 경우가 있기 때문에 Origin이 필요합니다. HTTPS 프로토콜을 사용해 HTTP 페이지를 요청하는 경우같이 보안 수준이 높은 방법을 사용해 보안 수준이 낮은 페이지에 접근할 땐 Referer가 없습니다.

이 외에도 콘텐츠 보안 정책이 적용돼 Referer 정보가 누락되는 경우도 있습니다.

fetch 메서드에 대해 자세히 알아보면서 아시게 되겠지만, fetch에는 Referer 전송을 막는 옵션이 있습니다. 동일한 사이트 내에서 Referer 수정을 허용하는 옵션도 있죠.

명세서에 따르면, Referer는 HTTP 헤더에서 선택 사항입니다.

이렇게 Referer는 신뢰할 수 없는 정보를 담고 있을 확률이 높기 때문에 명세서에 Origin이 추가되었습니다. 크로스 오리진 요청 시 브라우저는 Origin이 제대로 전송되는 것을 보장합니다.