The Access-Control-Allow-Origin
response header indicates whether the response can be shared with requesting code from the given origin.
Header type | Response header |
---|---|
Forbidden header name | no |
Access-Control-Allow-Origin: * Access-Control-Allow-Origin: <origin> Access-Control-Allow-Origin: null
*
<origin>
A response that tells the browser to allow code from any origin to access a resource will include the following:
Access-Control-Allow-Origin: *
A response that tells the browser to allow requesting code from the origin https://developer.mozilla.org
to access a resource will include the following:
Access-Control-Allow-Origin: https://developer.mozilla.org
Limiting the possible Access-Control-Allow-Origin
values to a set of allowed origins requires code on the server side to check the value of the Origin
request header, compare that to a list of allowed origins, and then if the Origin
value is in the list, to set the Access-Control-Allow-Origin
value to the same value as the Origin
value.
If the server sends a response with an Access-Control-Allow-Origin
value that is an explicit origin (rather than the "*
" wildcard), then the response should also include a Vary
response header with the value Origin
— to indicate to browsers that server responses can differ based on the value of the Origin
request header.
Access-Control-Allow-Origin: https://developer.mozilla.org Vary: Origin
The following Java code sets CORS response headers. Notice how the code sets the Access-Control-Allow-Origin
value to the same value as the Origin
request header.
import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; @component public class SimpleCORSFilter implements Filter { private final Logger log = LoggerFactory.getLogger(SimpleCORSFilter.class); public SimpleCORSFilter() { log.info("SimpleCORSFilter init"); } @override public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest) req; HttpServletResponse response = (HttpServletResponse) res; response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin")); response.setHeader("Access-Control-Allow-Credentials", "true"); response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE"); response.setHeader("Access-Control-Max-Age", "3600"); response.setHeader("Access-Control-Allow-Headers", "Content-Type, Accept, X-Requested-With, remember-me"); chain.doFilter(req, res); } @Override public void init(FilterConfig filterConfig) { } @Override public void destroy() { } }
Specification | Status | Comment |
---|---|---|
Fetch The definition of 'Access-Control-Allow-Origin' in that specification. | Living Standard | Initial definition. |
Desktop | ||||||
---|---|---|---|---|---|---|
Chrome | Edge | Firefox | Internet Explorer | Opera | Safari | |
Basic support | 4 | 12 | 3.5 | 10 | 12 | 4 |
Mobile | |||||||
---|---|---|---|---|---|---|---|
Android webview | Chrome for Android | Edge Mobile | Firefox for Android | Opera for Android | iOS Safari | Samsung Internet | |
Basic support | 2 | Yes | Yes | 4 | 12 | 3.2 | Yes |
© 2005–2018 Mozilla Developer Network and individual contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin