邮差如何发送请求? 阿贾克斯,相同的来源政策
我发现这个非常有用的扩展称为postman,这是一个非常有用的扩展,特别是当你编程RESTful应用程序。
我困惑的一件事是,这个插件/扩展如何成功地发送POST请求在不同的域?
我用这样的邮递员尝试投票。
提交后,投票实际上是在计算中,但是当我尝试使用Ajax和JavaScript的时候,由于浏览器的起源策略不同而失败。
这怎么可能呢?
这是我的代码使用jQuery。 我用在我的电脑,虽然,本地主机。
init: function() { $.ajax({ url: 'http://domain.com/vote.php', type:'POST', dataType: 'html', data: { id: '1' }, success: function(data) { if ( data == 'voted' ) { $('.set-result').html( 'you already voted. try again after 24 hours' ); } else { $('.set-result').html( 'successfully voted' ); } } }); },
Chrome打包的应用可以拥有跨域权限。 当你安装Postman时,它会提示你这个应用程序将访问任何域。
通过在清单文件的permissions
部分放置*/*
,你可以做到这一点。
在这里阅读更多: https : //developer.chrome.com/extensions/xhr.html
听起来像主持轮询的网站(“vote.php”脚本)需要有一个“访问控制允许来源”标题设置为允许从网站列表(或所有网站)发布。
标题的值*将允许从任何网站发布:
Access-Control-Allow-Origin: *
即你可以把以下在vote.php的顶部
header('Access-Control-Allow-Origin: *');
Chrome扩展程序和应用不受正常网页上的相同安全限制的约束。
其他debugging技巧:
如果您尝试从您的浏览器的本地文件系统上打开的网页访问远程服务,则可能会发现浏览器对它们应用的安全规则不同于从Web服务提供的文件。
例如,如果您从浏览器中的C:\MyDocuments\weboot\index.htm
(Windows)或\Users\joe\Sites\index.html
(Mac)等位置打开本地文件,则您的AJAX请求可能无法正常工作,即使在大多数浏览器中指定的标头。
苹果公司的Safari几乎不对本地打开的文件应用跨域限制,但Firefox对于允许的内容要求更严格,而Chrome则处于中间位置。 在本地运行Web服务器(例如, http://localhost/
)是避免意外行为的一个好主意。
此外,其他提供处理Ajax请求function的库(例如AngularJS)可能需要在服务器上默认设置其他头文件。 您通常可以在浏览器debugging控制台中查看失败的原因。
您可以将以下标题添加到邮差中发送的Ajax请求。
Content-Type application/json X-Requested-With XMLHttpRequest
截图
信贷 Orion