공통점: 둘 다 Forbidden header name으로, header의 프로그램 적인 수정이 불가능하다.
차이점: Host는 요청을 보내는 내가 누구인지에 대해 적혀있고, Origin은 요청이 어느 서버로 가는지에 대해 적혀있다.
Program 적인 방식으로 수정 할 수 없는 HTTP header. 이 header를 수정하는 것은 절대적으로 금지된다. 왜냐하면 user agent가 완전한 제어권을 가지고 있기 때문이다.
ex) Accept-Charset, Cookie, Host, Origin, Referer ...
HTTP/1.1 요청에서 필수적이며, 웹 서버가 여러 도메인을 호스팅하는 가상 호스팅 환경에서 어떤 웹사이트를 대상으로 하는지 구분하는 데 사용된다.
Host request header는 request가 보내지는 서버의 host와 port number를 지정한다.
만약 port 가 포함되어있지 않다면, 기본 포트가 사용된다(e.g. HTTPS의 경우 443, HTTP의 경우 80)
Host header field는 모든 HTTP/1.1 request message에서 보내져야 한다.
ex)
Host: developer.mozilla.org
주로 CORS(Cross-Origin Resource Sharing) 정책의 일환으로, 브라우저가 다른 출처(origin)의 리소스에 접근을 시도할 때 이를 식별하기 위해 사용된다. 이 헤더는 요청을 만든 페이지의 프로토콜, 호스트, 포트를 포함한다. Origin 헤더는 주로 POST 요청이나 AJAX 요청에서 볼 수 있으며, 서버가 요청이 다른 출처에서 발생했는지를 판단하고, 해당 요청을 허용할지를 결정하는 데 사용된다.
Web content의 origin 은 scheme (protocol), hostname (domain), 접근하기 위한 port에 의해 정의된다. Scheme, hostname, port가 모두 일치해야지 두개가 같은 origin이 된다.
어떤 operation들은 same-origin content로 제한되는 경우가 있고 이것은 CORS를 사용하여 이끌어내진다.
아래는 같은 origin이다. 왜냐하면 같은 scheme, hostname,(port) 를 사용하고 있기 때문이다. 다른 file path는 문제되지 않는다:
- http://example.com/app1/index.html
- http://example.com/app2/index.html
아래는 같은 origin이다. 왜냐하면 서버는 HTTP content를 기본적으로 80번 port를 사용하여 전달하기 때문이다:
- http://example.com:80
- http://example.com
아래는 같은 origin이 아니다. 왜냐하면 다른 scheme을 사용하고 있기 때문이다:
- http://example.com/app1
- https://example.com/app2
아래는 모두 같은 origin이 아니다. 왜냐하면 그들은 다른 hostname들을 사용하고 있기 때문이다:
- http://example.com
- http://www.example.com
- http://myapp.example.com
아래는 same origin이 아니다. 왜냐하면 이들은 다른 port를 사용하고 있기 때문이다:
- http://example.com
- http://example.com:8080
Origin request header는 request를 발생시킨 origin(scheme, hostname, port)을 가리킨다.
어떤 user agent가 page에 포함된 resource를 요청할 필요가 있거나, script에 의해서 fetch를 하게 될 때, request에는 origin이 포함되어 있어야 한다.
Origin: null
Origin: <scheme>://<hostname>
Origin: <scheme>://<hostname>:<port>
ex) Origin: https://developer.mozilla.org
null
origin이 "privacy sensitive" 하거나 HTML specification에 의해 opaque origin으로 정의되어 있는 경우
<scheme>
사용된 protocol. 주로, HTTP protocol이나 그것의 안전한 버전인 HTTPS를 사용한다.
<hostname>
Origin server의 도메인 이름이나, IP 주소.
<port> (optional)
Server에서 listening 중인 port number. 만약 port가 주어지지 않는다면, default port가 사용된다(e.g. HTTP URL의 경우 "80")
Origin header는 Referer header와 비슷하지만, path를 노출시키지 않고, null 일 수 있다. Origin header는 origin information이 민감하거나 불필요한 경우를 제외하고 origin request의 security context를 제공해주는데 사용된다.
대체적으로, user agent는 다음의 경우에 Origin request header를 추가한다:
위의 법칙에는 몇가지 예외사항이 있다; 예를들어, cross-origin GET이나 HEAD request가 no-cors-mode로 만들어지면 Origin header가 추가되지 않는다.