§跨域资源共享
Play 提供了一个实现跨域资源共享 (CORS) 的过滤器。
CORS 是一种协议,允许 Web 应用程序从浏览器跨不同域发出请求。完整的规范可以在 这里 找到。
§启用 CORS 过滤器
要启用 CORS 过滤器,请将 play.filters.cors.CORSFilter
添加到 application.conf
中
play.filters.enabled += "play.filters.cors.CORSFilter"
§配置 CORS 过滤器
可以从 application.conf
中配置过滤器。有关配置选项的完整列表,请参阅 Play 过滤器 reference.conf
。
可用的选项包括
play.filters.cors.pathPrefixes
- 通过路径前缀白名单过滤路径play.filters.cors.allowedOrigins
- 仅允许来自此白名单中的来源的请求。默认值为null
,这意味着允许所有来源。值"*"
具有特殊含义,如果请求来源与列表中的任何其他来源不匹配,它将发送回Access-Control-Allow-Origin: *
。"null"
被视为有效来源,并且可以在 allowedOrigins 中列入白名单以允许具有非分层方案(如file:
和data
)的来源:通过发送Access-Control-Allow-Origin: "null"
。请注意,这 不受 W3C 推荐,因为它也可能授予恶意文档对响应的访问权限。play.filters.cors.allowedHttpMethods
- 仅允许来自预检请求的白名单中的 HTTP 方法(默认情况下允许所有方法)play.filters.cors.allowedHttpHeaders
- 仅允许来自预检请求的白名单中的 HTTP 标头(默认情况下允许所有标头)play.filters.cors.exposedHeaders
- 设置自定义 HTTP 头部,以便在响应中公开(默认情况下不公开任何头部)。play.filters.cors.supportsCredentials
- 禁用/启用对凭据的支持(默认情况下启用凭据支持)。play.filters.cors.preflightMaxAge
- 设置预检请求的结果在预检结果缓存中可以缓存多长时间(默认情况下为 1 小时)。play.filters.cors.serveForbiddenOrigins
- 启用/禁用将不在白名单中的来源的请求作为非 CORS 请求提供服务(默认情况下它们是被禁止的)。
例如
play.filters.cors {
pathPrefixes = ["/some/path", ...]
allowedOrigins = ["http://www.example.com", ...]
allowedHttpMethods = ["GET", "POST"]
allowedHttpHeaders = ["Accept"]
preflightMaxAge = 3 days
}
下一步:配置 CSP
发现此文档中的错误?此页面的源代码可以在 这里 找到。阅读完 文档指南 后,请随时贡献一个拉取请求。有疑问或建议要分享?前往 我们的社区论坛 与社区开始对话。