2013-04-15 47 views
40

我发现这个非常有用的扩展称为邮递员,这是一个非常有用的扩展,特别是当您编程RESTful应用程序时。邮差怎么发送请求? ajax,同源策略

我很困惑的一件事是,这个插件/扩展如何能够在不同的域上成功发送POST请求?

我尝试投票使用这样的邮差投票。 Voting using Postman

提交后,表决实际上被计入,但是当我尝试使用ajax和javascript时,由于浏览器的原始策略不同而失败。

这怎么可能?

这是我的代码使用jQuery。我在我的电脑中使用过,localhost。

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'); 
     } 
    } 
    }); 
}, 
+2

看起来好像扩建工程通过张贴到getpostman.com,而不是你的目标域(CORS使用),getpostman.com的服务器然后发出请求并返回响应。 https://github.com/a85/POSTMan-Chrome-Extension/blob/master/chrome/js/requester.js#L457 –

+0

这似乎是合法的,我会通读他们的代码然后,我可能会尝试拿出同样的解决方案。 –

+0

但是请注意,要在IE中实现CORS,您必须通过包含替代传输来更改jQuery。 IE7根本不支持CORS。 –

回答

32

Chrome打包的应用程序可以具有跨域权限。当您安装Postman时,它会提示您此应用将访问任何域。

通过将*/*放置在清单文件的permissions部分中,您可以执行此操作。

在这里阅读更多: https://developer.chrome.com/extensions/xhr.html

+2

这怎么可能?网站本身是否也必须允许'CORS'? – CodyBugstein

+1

@Imray不需要CORS标题,就像服务器程序或curl一样。 – Mohsen

+0

因此,基本上,Chrome应用程序不受Cross Origin安全性限制?因此,Chrome应用可以访问我的银行Cookie或我的Facebook登录信息? – CodyBugstein

2

听起来像承载民意调查(以下简称“vote.php”脚本)的网站需要有一个“访问控制允许来源”头设置为允许发布一个网站列表(或所有网站)。

*为标题将允许从任何网站发布的值:

Access-Control-Allow-Origin: * 

即你可以把下面的vote.php顶部

header('Access-Control-Allow-Origin: *'); 

的Chrome扩展程序和应用都不受正常网页上相同安全限制的限制。

附加调试技巧:

如果你想从你在浏览器中的本地文件系统上打开网页访问远程服务,你可能会发现你的浏览器应用不同的安全规则,它们比它对从Web服务提供的文件起作用。

例如如果您在浏览器中从C:\MyDocuments\weboot\index.htm(Windows)或\Users\joe\Sites\index.html(Mac)等位置打开本地文件,则即使使用大多数浏览器中指定的标头,您的AJAX请求也可能无法正常工作。

Apple的Safari几乎不对本地打开的文件应用跨域限制,但Firefox对其允许的内容要求更严格,Chrome位于中间位置。在本地运行Web服务器(例如,在http://localhost/)是避免意外行为的好主意。

此外,其他提供处理Ajax请求函数的库(例如AngularJS)可能需要在服务器上默认设置其他头文件。您通常可以在浏览器调试控制台中查看失败的原因。

1

您可以将以下标题添加到邮差发送的Ajax请求中。

Content-Type  application/json 

X-Requested-With XMLHttpRequest 

截图

enter image description here

信用Orion