我有一个用Finch框架编写的RESTFul服务,有多个端点。某些端点需要支持跨域请求的JSONP。通过检查Finch的源代码,看起来没有一种简单的方法。我发现这个页面有点相关但不太了解细节。
https://groups.google.com/forum/#!topic/finaglers/nAaCfOiLp1w
有人可以给我一些指导/示例吗? 我的返回值看起来像:
{
ids:[id1,id2,id3...idn]
}
答案 0 :(得分:1)
没有详细说明为什么JSONP认为不安全(我假设你已经知道),Finaglers线程你引用的提及JsonpFilter
可以应用于将JSON返回给#的HTTP服务# 34;升级"它是JSONP。
这是一个关于如何使用Finch的端点连接此过滤器的小例子。
import com.twitter.finagle.Http
import com.twitter.finagle.http.filter.JsonpFilter
import io.finch._
import io.finch.circe._
val endpoint: Endpoint[Map[String, String]] = get("jsonp") {
Ok(Map("foo" -> "bar"))
}
val service = endpoint.toServiceAs[Application.Json]
Http.server.serve(":8080", JsonpFilter.andThen(service))
JsonpFilter
很简单。它检查返回的HTTP有效负载并且它是一个JSON字符串,它通过调用一个函数来包装它,该函数的名称在callback
查询字符串参数中传递(并将内容类型更改为{{1相应地)。使用httpie,这看起来像:
application/javascript