我需要像 POST 调用一样调用 (HTTP) REST API - 基本上,它允许我向论坛/社区发布消息。
由于目前无法通过 API 进行身份验证,因此我需要依赖浏览器 cookie。即,让用户登录社区,然后使用 API 调用。这意味着服务器代理被排除。
由于它是 POST 调用,因此 JSONP
也被排除在外,即使 API 的服务器支持它。
所以这个 POST 调用需要 100% javascript。
此 JS 最终将成为 Sharepoint 中 Web 部件的一部分,因此我真的不想使用 iframe 使其变得复杂。
嗯?
最佳答案
执行跨域 POST 的唯一方法是编写表单脚本:
<iframe name="iframe"></iframe>
<form id="foo" target="iframe" method="POST" action="http://...">
<input type="hidden" name="parameter 1" value="bar"/>
...
</form>
<script type="text/javascript">
...
document.getElementById('foo').submit();
</script>
由于同源策略,您将无法读取 iframe 中的响应,但将进行 POST。
任何知道自己在做什么的论坛都会拒绝此请求。否则,任何访问第三方网站的人都可能会违背自己的意愿自动在论坛上发帖。这称为跨站点请求伪造 (XSRF),是一个长期存在的网络安全问题。大多数论坛管理员会认为上述代码是敌对的。
安全论坛使用“反 XSRF”每次操作 token 来防止上述情况,本质上要求从网站本身的表单而不是从第三方网站发布帖子。由于无法读取包含跨域的文档,因此无法捏取 token ,因此无法授权发帖。
关于ajax - 如何从 Sharepoint Web 部件进行跨域 AJAX POST 调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3829542/