当我尝试使用 Staticfile Buildpack 访问托管在 Cloud Foundry 上的 JavaScript 文件时,我的浏览器拒绝加载它并在控制台中显示错误消息:
访问"..."中的脚本从原产地"..."已被 CORS 策略阻止:请求的资源上不存在"访问控制允许源"标头
如何在 Cloud Foundry Staticfile Buildpack 中配置跨源资源共享 (CORS(?
要使用 Staticfile Buildpack 设置 CORS,请执行以下操作:
-
创建名为
Staticfile
的文件,其中包含以下内容:root: public location_include: includes/*.conf
-
确保希望应用提供的文件位于
public
文件夹中。 -
使用以下内容创建文件
nginx/conf/includes/headers.conf
(及其父文件夹(:add_header 'Access-Control-Allow-Origin' '*';
就是这样!在下一次cf push
之后,将设置 CORS 标头。
有关更清楚的信息,另请参阅官方代码示例include_headers_public
。
解释
截至 Staticfile Buildpack 文档:
如果您创建一个名为
Staticfile
的文件并将其定位在应用程序的构建目录中,则在您推送应用时,Cloud Foundry 会自动使用 Staticfile 构建包。
(这意味着您无需在manifest.yml
中指定staticfile_buildpack
(
然后按照Custom Location
下的说明进行操作。
允许您使用其他指令指定自定义位置定义。
要自定义 NGINX 配置文件的位置块,请执行以下步骤。
- 设置备用
root
目录。location_include
属性仅与替代root
结合使用。
- 使用位置范围的 NGINX 指令创建一个文件。请参阅以下示例,该示例会导致您网站的访问者收到
X-MySiteName
HTTP 标头:
- 文件:
nginx/conf/includes/custom_header.conf
- 内容:
add_header X-MySiteName BestSiteEver;
将静态文件中的
location_include
变量设置为上一步中文件的路径。此路径相对于nginx/conf
。例:
root: public location_include: includes/*.conf
一点历史 - 通过这个故事实现了静态构建包 - https://www.pivotaltracker.com/n/projects/1042066/stories/136370663
针对BuildPack 团队提出了类似的问题 - https://github.com/cloudfoundry/staticfile-buildpack/issues/89
请参阅以下示例应用,了解如何配置任何其他自定义标头 - https://github.com/cloudfoundry/staticfile-buildpack/tree/master/fixtures/include_headers_public
然后,您还可以另外添加特定于 CORS 的响应标头(允许的主机和允许的方法(