2

我创建了一个支持 GET/POST/PUT/DELETE 请求的 RESTful API。现在我希望我的 API 有一个 Javascript 客户端库,并且我想使用 JSONP 来绕过跨域策略。这有效,但当然只适用于 GET 请求。

所以我开始思考如何实现这样的东西,同时试图让它变得无痛使用。

我想编辑我的 API 实现并检查每个 HTTP 请求。如果它是 JSONP 请求(它在查询字符串中有一个“回调”参数),我会强制每个 API 方法由 GET 请求执行,即使它应该由其他方法(如 POST 或 DELETE)调用。

这不是解决问题的 RESTful 方法,但它有效。你怎么看?

也许另一种解决方案是动态生成一个 IFrame 来发送非 GET 请求。有小费吗?

4

2 回答 2

1

这里有一个非常相似的问题的一些相关点......

JSONP 对真正 REST 的影响

存在跨域限制是有原因的;-)

Jsonp 允许您公开有限的、安全的、只读的 API 视图以进行跨域访问 - 如果您破坏了它,那么您可能会打开一个巨大的安全漏洞 - 恶意网站可以通过包含以下内容对您的 API 进行破坏性调用带有指向 API 右侧部分的 href 的图像

让您的 webapp 公开通过 iframe 访问的某些功能,其中所有 ajax 都发生在您的 webapp 域的上下文中,这绝对是更安全的选择。即使这样,您仍然需要考虑 CSRF。(以 Django 博客上的 Django 最新安全公告为例——从本周发布的版本开始,所有对 Django webapp 的 javascript 调用都必须默认经过 CSRF 验证)

于 2011-02-10T15:35:10.857 回答
-1

Iframe hack 在最近的浏览器上不再起作用,不再使用它(来源:http: //jquery-howto.blogspot.de/2013/09/jquery-cross-domain-ajax-request.html

于 2015-06-12T13:47:56.393 回答