HTTP 协议 Access-Control-Allow-Origin 响应头该如何指定值?

Access-Control-Allow-Origin 是一个 HTTP 协议的响应头,用于指示哪些源(即协议、域名和端口)有权接收来自服务器的响应。

Access-Control-Allow-Origin 是一个 HTTP 协议的响应头,用于指示哪些源(即协议、域名和端口)有权接收来自服务器的响应。

Access-Control-Allow-Origin 头部字段主要用于处理浏览器的跨域请求。

跨域请求(Cross-Origin Request)指的是从一个域名(源)的资源去请求另一个域名(目标)的资源。在Web开发中,由于同源策略(Same-Origin Policy)的限制,浏览器默认不允许跨域请求,这是为了保护用户数据的安全,防止恶意网站通过跨站请求伪造(CSRF)等方式窃取用户信息。

Access-Control-Allow-Origin 支持的值

为了满足需求,HTTP 协议的 Access-Control-Allow-Origin 头支持以下几种写法:

单一域名

指定一个确切的域名,只有该域名下的网页才能访问资源。例如:

Access-Control-Allow-Origin: https://example.com

多个域名

通过空格分隔多个域名,允许这些域名下的网页访问资源。例如:

Access-Control-Allow-Origin: https://example.com https://another-example.com

通配符(*)

星号表示允许所有域名进行访问,这在开发环境中可能很有用,但在生产环境中通常不推荐使用,因为它可能导致安全风险。例如:

Access-Control-Allow-Origin: *

带有凭证的跨域请求

如果要支持带有凭证(如 cookies、HTTP 认证或客户端 SSL 证明)的跨域请求,你需要将域名明确指定,并且不能是通配符 *。例如:

Access-Control-Allow-Origin: https://example.com
Access-Control-Allow-Credentials: true

空字符串

在某些情况下,你可能会看到空字符串作为 Access-Control-Allow-Origin 的值。这通常意味着不允许任何跨域请求。例如:

Access-Control-Allow-Origin:

特定端口

你还可以在域名后指定端口号,以允许来自特定端口的请求。例如:

Access-Control-Allow-Origin: https://example.com:8080


Nginx 实现 Access-Control-Allow-Origin 配置

在 Nginx 中,使用 add_header 指令设置 Access-Control-Allow-Origin 的值,例如:

server {
    listen 80;
    server_name example.com;

    location / {
        # ... 其他配置 ...

        # 设置 Access-Control-Allow-Origin 头
        add_header Access-Control-Allow-Origin "https://example.com";

        # 如果需要支持带有凭证的跨域请求
        add_header Access-Control-Allow-Credentials true;
    }
}

注意:出于安全考虑,如果你设置 Access-Control-Allow-Credentials 为 true,那么 Access-Control-Allow-Origin 就不能设置为通配符 *,而必须是一个明确的域名。这是因为带有凭证的请求需要更严格的源检查,以防止安全漏洞。

不傲才以骄人,不以宠而作威。——诸葛亮
0 不喜欢
说说我的看法 -
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号