Finch端点支持jsonp?

时间:2016-11-08 22:46:35

标签: jsonp finch

我有一个用Finch框架编写的RESTFul服务,有多个端点。某些端点需要支持跨域请求的JSONP。通过检查Finch的源代码,看起来没有一种简单的方法。我发现这个页面有点相关但不太了解细节。

https://groups.google.com/forum/#!topic/finaglers/nAaCfOiLp1w

有人可以给我一些指导/示例吗? 我的返回值看起来像:

{
    ids:[id1,id2,id3...idn]
}

1 个答案:

答案 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