首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Finch端点支持jsonp?

Finch端点支持jsonp?
EN

Stack Overflow用户
提问于 2016-11-09 06:46:35
回答 1查看 128关注 0票数 0

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

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

有人能给我一些指导方针/例子吗?我的返回值应该是这样的:

代码语言:javascript
复制
{
    ids:[id1,id2,id3...idn]
}
EN

回答 1

Stack Overflow用户

发布于 2016-11-09 08:07:23

这里不详细说明为什么JSONP被认为是不安全的(我假设您已经知道了),您引用的Finaglers线程提到了JsonpFilter,它可以应用于返回JSON的HTTP服务,以将其“升级”到JSONP。

下面是一个关于如何将此过滤器与Finch端点连接的小示例。

代码语言:javascript
复制
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查询字符串参数中(并相应地将内容类型更改为application/javascript )。使用httpie,这将如下所示:

代码语言:javascript
复制
$ http :8081/jsonp
HTTP/1.1 200 OK
Content-Encoding: gzip
Content-Length: 39
Content-Type: application/json

{
    "foo": "bar"
}

$ http :8080/jsonp?callback=myfunction 
HTTP/1.1 200 OK
Content-Encoding: gzip
Content-Length: 56
Content-Type: application/javascript

/**/myfunction({"foo":"bar"});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40497730

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档