我不知道为什么,但我还没有真正找到合适的资源,这有助于我理解这里的最佳实践,但假设我有一个应用程序,我想向另一个应用程序发出 Ajax 请求应用程序。
假设应用 A 的域名是:www.example.com
,我想向 www.someapplication.com
发出请求
我可以做这样的事情吗? (本例中为 jQuery)
$.ajax({
url: 'http://www.someapplication.com/items',
dataType: 'json',
data: "search=butter",
success: function(data){
console.log(data);
}
});
当我在浏览器中访问地址 (http://www.someapplication.com/items?search=butter&format=json
) 时,它会返回 200 响应以及 json 格式的内容,其中我请求了但是,当上面的 JS 执行时,它收到了 200 响应,但是没有内容。
这是因为我的 someapplication.com 服务器将其识别为 XSS 攻击并拒绝响应吗?
我的一个疑问是请求是否应该发送到 .js 文件?我在其他应用程序的设计中注意到了这一点,例如:http://www.someapplication.com/search.js
...呃,而不是我的概念有什么问题,我错过了吗XSS 和 Ajax 有何重大意义?
最佳答案
确实是同源政策的原因。如果您可以控制远程服务器,您也可以只添加 HTTP Access-Control
服务器端的 header 。这样,您基本上可以从服务器端控制是否允许触发 XMLHttpRequest 的客户端处理响应。任何最近的(并且像样的)网络浏览器都会采取相应的措施。
这是一个针对 PHP 的示例,说明如何相应地设置 header 。
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.
key 是Access-Control-Allow-Origin: *
。这通知客户端来自 *
(事实上,任何地方)的请求都可以处理响应。例如,如果将其设置为 Access-Control-Allow-Origin: http://example.com
,则网络浏览器可能仅在从上述域提供初始页面时处理响应。
许多现有的 JSON 服务也在 Google 的每个服务下使用此服务。
另请参阅:
关于javascript - 关于发出 XHR 请求的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3654197/