配置CORS(Cross-Origin Resource Sharing)
Play 提供一个过滤器,它实现跨域资源共享 (CORS)。
CORS 是一个允许web应用程序从浏览器发出一个跨域请求的协议。可以在这里找到完整的规范说明。
启用 CORS过滤器
要启用CORS过滤器, 添加Play过滤器项目到你的build.sbt
中的libraryDependencies
项:
libraryDependencies += filters
现在添加CORS filter到你的过滤器, 通常是在项目根目录创建一个Filters
类:
import javax.inject.Inject
import play.api.http.HttpFilters
import play.filters.cors.CORSFilter
class Filters @Inject() (corsFilter: CORSFilter) extends HttpFilters {
def filters = Seq(corsFilter)
}
配置 CORS 过滤器
过滤器可以从application.conf
配置。有关配置选项的完整列表, 查阅 Play 过滤器 reference.conf
。
可用选项包括:
play.filters.cors.pathPrefixes
- 过滤器路径,通过路径前缀白名单play.filters.cors.allowedOrigins
- 只允许白名单中的请求来源(默认是允许所有来源)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 {
pathPrefixes = ["/some/path", ...]
allowedOrigins = ["http://www.example.com", ...]
allowedHttpMethods = ["GET", "POST"]
allowedHttpHeaders = ["Accept"]
preflightMaxAge = 3 days
}