跨域配置

一、跨域的基本概念

跨域问题通常发生在浏览器中,当一个网页尝试从不同的域名、协议或端口请求资源时,浏览器会阻止这种请求,除非服务器明确允许。

Nginx 通过设置响应头中的 Access-Control-* 系列字段来控制跨域访问。

二、常用 CORS 响应头

响应头 描述
Access-Control-Allow-Origin 指定允许访问的来源(Origin),可以是具体的域名或通配符 *。
Access-Control-Allow-Methods 指定允许的 HTTP 方法(如 GET, POST, PUT, DELETE 等)。
Access-Control-Allow-Headers 指定允许的自定义请求头。
Access-Control-Expose-Headers 指定允许客户端访问的额外响应头(默认只允许标准头)。
Access-Control-Max-Age 预检请求(OPTIONS 请求)的结果缓存时间(单位:秒)。
Access-Control-Allow-Credentials 是否允许发送凭据(如 Cookie 或 Authorization 头),值为 true 或 false。

三、Nginx 配置跨域

server {
    listen 80;
    server_name example.com;

    location /api {
        # 处理预检请求
        if ($request_method = 'OPTIONS') {
            add_header 'Access-Control-Allow-Origin' 'https://example-client.com';
            add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, DELETE, OPTIONS';
            add_header 'Access-Control-Allow-Headers' 'Authorization, Content-Type';
            add_header 'Access-Control-Allow-Credentials' 'true';
            return 204;  # 对于预检请求返回 204 No Content
        }
        # add_header 'Access-Control-Allow-Origin' 'https://example-client.com';
        add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, DELETE, OPTIONS';
        add_header 'Access-Control-Allow-Headers' 'Authorization, Content-Type';
        add_header 'Access-Control-Allow-Credentials' 'true';  # 如果需要支持凭据

        # 正常请求处理
        proxy_pass http://backend_server;
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。