You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Plesk服务器上Node.js与Angular应用的CORS跨域错误排查与解决

问题排查与解决步骤

1. 修正客户端错误配置

首先移除AuthService中错误添加的请求头,Access-Control-Allow-Origin是服务器响应头,客户端无需发送;同时HttpClient会自动解析JSON响应,不需要手动调用JSON.parse:

// 修改后的AuthService login方法
export class AuthService {
  constructor(private http: HttpClient) {}
  login(params, callback) {
    const headers = new HttpHeaders({
      'Content-Type': 'application/json',
    });

    this.http
      .post<any>(environment.BASE_URL + '/login', params, {
        headers,
      })
      .subscribe(
        (response) => {
          console.log(response);
          callback(response, null);
        },
        (err) => {
          console.log(err);
          callback(err);
        }
      );
  }
}

2. 解决Nginx对OPTIONS请求的拦截(428状态码问题)

浏览器返回428(Precondition Required)但curl正常,说明Nginx对浏览器的OPTIONS请求有特殊拦截,按以下步骤处理:

  • 临时关闭ModSecurity测试:进入Plesk域名设置 > 安全性 > ModSecurity,关闭后重试请求。如果恢复正常,需添加规则允许OPTIONS请求通过。
  • 添加Nginx针对性OPTIONS处理规则:在Plesk的「Nginx额外指令」中替换原有CORS配置,明确处理OPTIONS请求:
    # 单独处理OPTIONS预检请求
    if ($request_method = OPTIONS) {
        add_header 'Access-Control-Allow-Origin' '*';
        add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, PUT, DELETE';
        add_header 'Access-Control-Allow-Headers' 'Content-Type, Authorization';
        add_header 'Access-Control-Max-Age' 1728000;
        add_header 'Content-Length' 0;
        return 204;
    }
    
    # 为非OPTIONS请求添加CORS头
    add_header 'Access-Control-Allow-Origin' '*' always;
    add_header 'Access-Control-Allow-Methods' '*' always;
    add_header 'Access-Control-Allow-Headers' '*' always;
    
    注意:always参数确保错误响应也能携带CORS头,避免异常场景下的跨域错误。

3. 统一CORS配置,避免冲突

当前响应头出现重复的CORS字段(Express和Nginx各返回一次),可能导致浏览器解析异常,二选一保留即可:

  • 保留Express的app.use(cors()),移除Nginx中所有CORS相关add_header指令;
  • 或者关闭Express的cors中间件,完全由Nginx处理CORS逻辑。

4. 验证浏览器请求细节

打开浏览器开发者工具(F12)> 网络面板,查看OPTIONS请求的具体信息:

  • 确认请求头的Origin为https://client.plesk.page(不要带末尾斜杠,与curl请求的Origin保持一致);
  • 检查响应头是否真的缺失Access-Control-Allow-Origin,或存在重复字段;
  • 查看428状态码的具体响应内容,确认Nginx要求的前置条件是什么。

5. 检查Plesk域名基础配置

  • 确认api.plesk.page的SSL证书有效,浏览器访问无证书错误(HTTPS环境下SSL问题可能间接引发CORS错误);
  • 检查域名重定向规则(如HTTP转HTTPS)是否篡改了OPTIONS请求的头信息,导致预检失败。

内容的提问来源于stack exchange,提问作者barankibar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 09:15:32