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

Drupal无头API服务器CORS配置无效问题求助

解决Drupal无头API的CORS问题:Content-Type不被允许的排查方案

我之前也踩过一模一样的Drupal CORS坑,给你几个实用的排查方向,应该能解决你的问题:

  • 确认你修改的是正确的配置文件
    很多新手会犯这个错:修改了sites/default/default.services.yml,但Drupal实际加载的是同目录下的services.yml文件。default.services.yml只是个模板,不会被系统读取。你需要把default.services.yml复制一份,重命名为services.yml,然后在这个文件里修改CORS配置。

  • 确保CORS配置的完整性,尤其是OPTIONS方法
    预请求(OPTIONS)是浏览器发起CORS请求的前提,必须在allowedMethods里明确包含它。同时allowedHeaders要覆盖你用到的所有请求头,包括Content-Type。给你一个经过验证的配置示例:

    cors.config:
      enabled: true
      allowedHeaders:
        - 'x-csrf-token'
        - 'authorization'
        - 'content-type'
        - 'accept'
        - 'origin'
        - 'x-requested-with'
        - 'access-control-allow-origin'
      allowedMethods:
        - 'GET'
        - 'POST'
        - 'PUT'
        - 'DELETE'
        - 'OPTIONS'
      allowedOrigins:
        - '*' # 生产环境建议指定你的前端域名,比如 'https://your-frontend-app.com'
      exposedHeaders:
        - 'x-csrf-token'
      maxAge: 1000
      supportsCredentials: true
    
  • 修改配置后必须清除Drupal缓存
    这是最容易被忽略的步骤!Drupal会缓存配置文件,修改完services.yml后,一定要清除缓存:

    • 用Drush命令:drush cr
    • 或者登录Drupal后台,进入「配置」→「性能」页面,点击「清除所有缓存」
  • 检查服务器层面的CORS设置
    如果你的Drupal部署在Nginx或Apache后面,服务器本身可能配置了CORS规则,这会覆盖Drupal的设置。比如Nginx中如果添加了add_header Access-Control-Allow-Headers指令,要确保它包含Content-Type,或者直接移除服务器端的CORS配置,让Drupal来处理。

  • 用浏览器开发者工具验证响应头
    打开浏览器的「开发者工具」→「Network」标签,找到OPTIONS预请求,查看响应头中的Access-Control-Allow-Headers是否包含Content-Type。如果没有,说明你的配置还没生效,回到第一步重新确认配置文件是否正确加载。

按照这几步排查下来,应该能解决你的问题——我当时就是漏了复制模板文件到services.yml,白折腾了好半天😅

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:17:53