我想为我的用户提供一种在他们的网站上宣传我的网站,博客等的方法。 我可以制作横幅,标识他们可以嵌入到他们网站的任何内容,但我想提供动态内容,例如“我的博客中的5个最新条目的标题”。
问题是相同的原产地政策。我知道有一个解决方案(我使用它):它们嵌入了一个简单的div和一个JavaScript文件。 JS向我的服务器发出一个XmlHttpRequest,并将数据作为JSONP获取,解析数据并插入div。
但这是唯一的方法吗?难道我没有更好的办法吗? 在互联网上有大量的小部件(或其他什么,我不知道他们如何调用......)从另一个域获取数据。他们是怎么做到的?
答案 0 :(得分:0)
许多解决方案的一个共同主题,而 正在使用JavaScript来调用代理 程序(在客户端或服务器上),而这些程序又是为您调用Web服务。
输出可以写入响应流,然后通过正常通道可用,例如XMLHttpRequest的responseText和responseXML属性。
你可以在这里找到更多解决方案:
http://developer.yahoo.com/javascript/howto-proxy.html
或在这里:
http://www.simple-talk.com/dotnet/asp.net/calling-cross-domain-web-services-in-ajax/
答案 1 :(得分:0)
CORS与JSONP不同。 普通的AJAX。您的服务器所要做的就是设置一个特定的标头:Access-Control-Allow-Origin
更多信息:http://hacks.mozilla.org/2009/07/cross-site-xmlhttprequest-with-cors/
答案 2 :(得分:0)
如果您使用JSONP路线,您将隐含地要求您的用户信任您,因为他们将为您提供对其网页资源的完全访问权限(内容,Cookie,...)。如果他们知道他们主要抱怨。
如果你去iframe路线就没有问题了。
今天,iframe的嵌入式内容的一个着名例子是facebook的Like按钮。
使用代理或其他方法制作服务器端会复杂得多,因为那里有很多环境。我不知道其他方式。
答案 3 :(得分:0)
您还可以在服务器端设置HTTP Access-Control
标头。这样,您基本上可以从服务器端控制是否允许触发XMLHttpRequest的客户端处理响应。任何最近(和体面的)webbrowser都会采取相应的行动。
这是一个以PHP为目标的示例,说明如何相应地设置标头。
header('Access-Control-Allow-Origin: *'); // Everone may process the response.
header('Access-Control-Max-Age: 604800'); // Client may cache this for one week.
header('Access-Control-Allow-Methods: GET, POST'); // Allowed request methods.
关键是Access-Control-Allow-Origin: *
。这通知客户端允许来自*
(实际上,无处不在)的请求处理响应。如果您将其设置为例如Access-Control-Allow-Origin: http://example.com
,那么webbrowser可能只在从提到的域提供初始页面时处理响应。