mozilla

Compare Revisions

HTTP access control (CORS)

Change Revisions

Revision 286995:

Revision 286995 by brunoais on

Revision 298985:

Revision 298985 by bcombee on

Title:
HTTP access control (CORS)
HTTP access control (CORS)
Slug:
HTTP_access_control
HTTP_access_control
Tags:
AJAX, Security, XMLHttpRequest, HTTP, "Firefox 3.5", "Same-origin policy"
"Firefox 3.5", "Same-origin policy", "Security", "XMLHttpRequest", "HTTP", "AJAX"
Content:

Revision 286995
Revision 298985
n66      For example, suppose web content on domain <code class="plan66      For example, suppose web content on domain <code class="pla
>in"><a class="linkification-ext" href="http://foo.example" title=>in">http://foo.example</code> wishes to invoke content on domain 
>"Linkification: http://foo.example">http://foo.example</a></code>><code class="plain">http://bar.other</code>.&nbsp; Code of this s
> wishes to invoke content on domain <code class="plain"><a class=>ort might be used within JavaScript deployed on foo.example:
>"linkification-ext" href="http://bar.other" title="Linkification: 
> http://bar.other">http://bar.other</a></code>.&nbsp; Code of thi 
>s sort might be used within JavaScript deployed on foo.example: 
n70var url = '<a class="linkification-ext" href="http://bar.other/ren70var url = 'http://bar.other/resources/public-data/';
>sources/public-data/" title="Linkification: http://bar.other/reso 
>urces/public-data/">http://bar.other/resources/public-data/</a>'; 
n92Referer: <a class="linkification-ext" href="http://foo.example/exn92Referer: http://foo.example/examples/access-control/simpleXSInvoc
>amples/access-control/simpleXSInvocation.html" title="Linkificati>ation.html
>on: http://foo.example/examples/access-control/simpleXSInvocation 
>.html">http://foo.example/examples/access-control/simpleXSInvocat 
>ion.html</a> 
93Origin: <a class="linkification-ext" href="http://foo.example" ti93Origin: http://foo.example
>tle="Linkification: http://foo.example">http://foo.example</a> 
n108      &nbsp;Lines 1 - 10 are headers sent by Firefox 3.5.&nbsp; Nn108      &nbsp;Lines 1 - 10 are headers sent by Firefox 3.5.&nbsp; N
>ote that the main HTTP&nbsp;request header of note here is the <c>ote that the main HTTP&nbsp;request header of note here is the <c
>ode>Origin:</code> header on line 10 above, which shows that the >ode>Origin:</code> header on line 10 above, which shows that the 
>invocation is coming from content on the the domain <code class=">invocation is coming from content on the the domain <code class="
>plain"><a class="linkification-ext" href="http://foo.example" tit>plain">http://foo.example</code>.
>le="Linkification: http://foo.example">http://foo.example</a></co 
>de>. 
109    </p>
110    <p>109    </p>
111      Lines 13 - 22 show the HTTP response from the server on dom
>ain <code class="plain"><a class="linkification-ext" href="http:/ 
>/bar.other" title="Linkification: http://bar.other">http://bar.ot 
>her</a></code>.&nbsp; In response, the server sends back an <code 
>>Access-Control-Allow-Origin:</code> header, shown above in line  
>16.&nbsp; The use of the <code>Origin:</code>&nbsp;header and of  
><code>Access-Control-Allow-Origin:</code> show the access control 
> protocol in its simplest use.&nbsp; In this case, the server res 
>ponds with a <code>Access-Control-Allow-Origin: *</code> which me 
>ans that the resource can be accessed by <strong>any</strong> dom 
>ain in a cross-site manner.&nbsp; If the resource owners at <code 
> class="plain"><a class="linkification-ext" href="http://bar.othe 
>r" title="Linkification: http://bar.other">http://bar.other</a></ 
>code> wished to restrict access to the resource to be only from < 
>code class="plain"><a class="linkification-ext" href="http://foo. 
>example" title="Linkification: http://foo.example">http://foo.exa 
>mple</a></code>, they would send back: 
112    </p>110    <p>
111      Lines 13 - 22 show the HTTP response from the server on dom
 >ain <code class="plain">http://bar.other</code>.&nbsp; In respons
 >e, the server sends back an <code>Access-Control-Allow-Origin:</c
 >ode> header, shown above in line 16.&nbsp; The use of the <code>O
 >rigin:</code>&nbsp;header and of <code>Access-Control-Allow-Origi
 >n:</code> show the access control protocol in its simplest use.&n
 >bsp; In this case, the server responds with a <code>Access-Contro
 >l-Allow-Origin: *</code> which means that the resource can be acc
 >essed by <strong>any</strong> domain in a cross-site manner.&nbsp
 >; If the resource owners at <code class="plain">http://bar.other<
 >/code> wished to restrict access to the resource to be only from 
 ><code class="plain">http://foo.example</code>, they would send ba
 >ck:
113    <p>112    </p>
114      <code class="plain">Access-Control-Allow-Origin: <a class="
>linkification-ext" href="http://foo.example" title="Linkification 
>: http://foo.example">http://foo.example</a></code> 
115    </p>113    <p>
114      <code class="plain">Access-Control-Allow-Origin: http://foo
 >.example</code>
116    <p>115    </p>
116    <p>
117      Note that now, no other domain other than <code class="plai117      Note that now, no other domain other than <code class="plai
>n"><a class="linkification-ext" href="http://foo.example" title=">n">http://foo.example</code> (identified by the ORIGIN:&nbsp;head
>Linkification: http://foo.example">http://foo.example</a></code> >er in the request, as in line 10 above) can access the resource&n
>(identified by the ORIGIN:&nbsp;header in the request, as in line>bsp; in a cross-site manner.&nbsp; The <code>Access-Control-Allow
> 10 above) can access the resource&nbsp; in a cross-site manner.&>-Origin</code> header should contain the value that was sent in t
>nbsp; The <code>Access-Control-Allow-Origin</code> header should >he request's <code>Origin</code> header.&nbsp;
>contain the value that was sent in the request's <code>Origin</co 
>de> header.&nbsp; 
n144var url = '<a class="linkification-ext" href="http://bar.other/ren144var url = 'http://bar.other/resources/post-here/';
>sources/post-here/" title="Linkification: http://bar.other/resour 
>ces/post-here/">http://bar.other/resources/post-here/</a>'; 
n174Origin: <a class="linkification-ext" href="http://foo.example" tin174Origin: http://foo.example
>tle="Linkification: http://foo.example">http://foo.example</a> 
n182Access-Control-Allow-Origin: <a class="linkification-ext" href="hn182Access-Control-Allow-Origin: http://foo.example
>ttp://foo.example" title="Linkification: http://foo.example">http 
>://foo.example</a> 
n203Referer: <a class="linkification-ext" href="http://foo.example/exn203Referer: http://foo.example/examples/preflightInvocation.html
>amples/preflightInvocation.html" title="Linkification: http://foo 
>.example/examples/preflightInvocation.html">http://foo.example/ex 
>amples/preflightInvocation.html</a> 
n205Origin: <a class="linkification-ext" href="http://foo.example" tin205Origin: http://foo.example
>tle="Linkification: http://foo.example">http://foo.example</a> 
n215Access-Control-Allow-Origin: <a class="linkification-ext" href="hn215Access-Control-Allow-Origin: http://foo.example
>ttp://foo.example" title="Linkification: http://foo.example">http 
>://foo.example</a> 
n239Access-Control-Allow-Origin: <a class="linkification-ext" href="hn239Access-Control-Allow-Origin: http://foo.example
>ttp://foo.example" title="Linkification: http://foo.example">http 
>://foo.example</a> 
n254      In this example, content originally loaded from <code classn254      In this example, content originally loaded from <code class
>="plain"><a class="linkification-ext" href="http://foo.example" t>="plain">http://foo.example</code> makes a simple GET request to 
>itle="Linkification: http://foo.example">http://foo.example</a></>a resource on <code class="plain">http://bar.other</code> which s
>code> makes a simple GET request to a resource on <code class="pl>ets Cookies.&nbsp; Content on foo.example might contain JavaScrip
>ain"><a class="linkification-ext" href="http://bar.other" title=">t like this:
>Linkification: http://bar.other">http://bar.other</a></code> whic 
>h sets Cookies.&nbsp; Content on foo.example might contain JavaSc 
>ript like this: 
n258var url = '<a class="linkification-ext" href="http://bar.other/ren258var url = 'http://bar.other/resources/credentialed-content/';
>sources/credentialed-content/" title="Linkification: http://bar.o 
>ther/resources/credentialed-content/">http://bar.other/resources/ 
>credentialed-content/</a>'; 
n283Referer: <a class="linkification-ext" href="http://foo.example/exn283Referer: http://foo.example/examples/credential.html
>amples/credential.html" title="Linkification: http://foo.example/ 
>examples/credential.html">http://foo.example/examples/credential. 
>html</a> 
284Origin: <a class="linkification-ext" href="http://foo.example" ti284Origin: http://foo.example
>tle="Linkification: http://foo.example">http://foo.example</a> 
n292Access-Control-Allow-Origin: <a class="linkification-ext" href="hn292Access-Control-Allow-Origin: http://foo.example
>ttp://foo.example" title="Linkification: http://foo.example">http 
>://foo.example</a> 
n308      Although line 12 contains the Cookie destined for the conten308      Although line 12 contains the Cookie destined for the conte
>nt on <code class="plain"><a class="linkification-ext" href="http>nt on <code class="plain">http://bar.other</code>, if bar.other d
>://bar.other" title="Linkification: http://bar.other">http://bar.>id not respond with an <code>Access-Control-Allow-Credentials: tr
>other</a></code>, if bar.other did not respond with an <code>Acce>ue</code> (line 20) the response would be ignored and not made av
>ss-Control-Allow-Credentials: true</code> (line 20) the response >ailable to web content.&nbsp; <strong>Important note:</strong> wh
>would be ignored and not made available to web content.&nbsp; <st>en responding to a credentialed request,&nbsp; server <strong>mus
>rong>Important note:</strong> when responding to a credentialed r>t</strong> specify a domain, and cannot use wild carding.&nbsp; T
>equest,&nbsp; server <strong>must</strong> specify a domain, and >he above example would fail if the header was wildcarded as: <cod
>cannot use wild carding.&nbsp; The above example would fail if th>e>Access-Control-Allow-Origin: *</code>.&nbsp; Since the <code>Ac
>e header was wildcarded as: <code>Access-Control-Allow-Origin: *<>cess-Control-Allow-Origin</code> explicitly mentions <code class=
>/code>.&nbsp; Since the <code>Access-Control-Allow-Origin</code> >"plain">http://foo.example</code>, the credential-cognizant conte
>explicitly mentions <code class="plain"><a class="linkification-e>nt is returned to the invoking web content. &nbsp;Note that in li
>xt" href="http://foo.example" title="Linkification: http://foo.ex>ne 23, a further cookie is set.
>ample">http://foo.example</a></code>, the credential-cognizant co 
>ntent is returned to the invoking web content. &nbsp;Note that in 
> line 23, a further cookie is set. 
t560        <a class="internal" href="/En/Server-Side_Access_Control"t560        <a class="internal" href="/En/Server-Side_Access_Control"
> title="En/Server-Side Access Control">Cross-Origing Resource Sha> title="En/Server-Side Access Control">Cross-Origing Resource Sha
>ring From a Server-Side Perspective (PHP, etc.)</a><a class="exte>ring From a Server-Side Perspective (PHP, etc.)</a>
>rnal" href="http://dev.w3.org/2006/waf/access-control/" title="ht 
>tp://dev.w3.org/2006/waf/access-control/"><br></a> 

Back to History