如何设置CORS?


12

Drupal 8在内核中内置了RESTful Web服务,从8.2开始,我们不需要cors模块

现在要使用服务,我们只需启用并配置此处指定的default.service.yml文件

但是,我无法配置此设置以允许通过另一个域访问Web服务。

我当前针对cors的service.yml设置是:

cors.config:
    enabled: true
    # Specify allowed headers, like 'x-allowed-header'.
    allowedHeaders: ['x-csrf-token,authorization,content-type,accept,origin,x-requested-with']
    # Specify allowed request methods, specify ['*'] to allow all possible ones.
    allowedMethods: ['POST, GET, OPTIONS, DELETE, PUT']
    # Configure requests allowed from specific origins.
    allowedOrigins: ['*']
    # Sets the Access-Control-Expose-Headers header.
    exposedHeaders: false
    # Sets the Access-Control-Max-Age header.
    maxAge: 1000
    # Sets the Access-Control-Allow-Credentials header.
    supportsCredentials: false

我用Google搜索找到了关于此的更多详细配置,但找不到一个。

我正在为跨两个不同领域的测试开发而创建。

将pantheon dev环境用于Web服务,并将localhost自定义.dev域用于使用这些服务。

使用chrome CORS扩展名的服务访问正常运行。


如果您已经按照先前答案中的说明更改了site / default / services.yml,但该方法无效,请确保已在Web服务器中启用了CORS。例如,在Nginx的,你必须在你的服务器块configurantion添加/修改的位置看到https://enable-cors.org/server_nginx.html
引脚

Answers:


16

我最近在万神殿遇到了这个问题,希望对您有所帮助的情况也可以。

cors.config:
    enabled: true
    # Specify allowed headers, like 'x-allowed-header'.
    allowedHeaders: ['x-csrf-token','authorization','content-type','accept','origin','x-requested-with', 'access-control-allow-origin','x-allowed-header','*']
    # Specify allowed request methods, specify ['*'] to allow all possible ones.
    allowedMethods: ['*']
    # Configure requests allowed from specific origins.
    allowedOrigins: ['http://localhost/','http://localhost:3000','http://localhost:3001','http://localhost:3002','*']
    # Sets the Access-Control-Expose-Headers header.
    exposedHeaders: false
    # Sets the Access-Control-Max-Age header.
    maxAge: false
    # Sets the Access-Control-Allow-Credentials header.
    supportsCredentials: true

注意事项...

关于万神殿上文件的位置,请确保您的service.yml文件在/ sites / default中,而在/ sites中。我误以为它可以在两个地方都起作用。它仅在/ sites / default目录中有效。

请注意,逗号分隔的allowedHeaders列表以各自的引号表示。我最初只有一个字符串,就像您在上面的示例中所做的那样,但是在我发现细微差别之前,它失败了无数次。我相当确定,如果您特别想列出自己的方法,则allowedMethods的工作方式相同。

另请注意,尽管我的代码段可以很好地针对Pantheon沙箱进行开发,但您可能需要在投入生产之前将其锁定一些。使用Pantheon提供的HTTPS,如果要通过标头传递信息,您还需要确保使用它。希望这对您有帮助的人,或者在旅途中偶然发现它的人,对您有帮助。


4
为什么要指定allowedOrigins然后再传递“ *”?
基督教徒

仅显示两个选项。请随意省略其中一个。
肖恩·马修斯


如果有人感兴趣,我不认为allowedOrigins字段接受正则表达式。我尝试使用正则表达式模式将多个子域列入白名单,而drupal抱怨。像本示例一样,我必须使用以逗号分隔的明确的域列表。我希望它的行为就像settings.php中的Trusted-hosts设置一样
Tony Stecca

9

查找:... / sites / default / default.services.yml

制作副本并将副本重命名为:

... / sites / default / services.yml

查找代码的这一部分:cors.config:enabled:false

并替换为以下内容-cors.config:enabled:true

清除缓存。


我本来想尽一切办法,直到看到您的答案,谢谢您展示了最重要的一点:清除缓存(重建缓存):D
emy19年

3

以下设置对我有用。

cors.config:
  enabled: true
  # Specify allowed headers, like 'x-allowed-header'.
  allowedHeaders: ['x-csrf-token','authorization','content-type','accept','origin','x-requested-with']
  # Specify allowed request methods, specify ['*'] to allow all possible ones.
  allowedMethods: ['*']
  # Configure requests allowed from specific origins.
  allowedOrigins: ['*']
  # Sets the Access-Control-Expose-Headers header.
  exposedHeaders: false
  # Sets the Access-Control-Max-Age header.
  maxAge: false
  # Sets the Access-Control-Allow-Credentials header.
  supportsCredentials: false

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.