我发现了一个非常有用的Chrome扩展,叫做Postman。这是一个非常有用的扩展,特别是当你在编写RESTful应用程序时。
有一件事我感到困惑的是,这个插件/扩展如何能够发送POST请求成功地在不同的域?
我试着用 Postman 来投票。
在提交之后,投票实际上被计算在内,但是当我尝试使用 AJAX 和JavaScript这样做时,它失败了,因为浏览器的不同起源策略。
这怎么可能?
这是我用jQuery编写的代码,不过我在我的计算机localhost上使用了它。
init: function() {
$.ajax({
url: 'http://example.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' );
}
}
});
},
4条答案
按热度按时间gab6jxml1#
Chrome打包的应用程序可以有跨域权限。当你安装Postman时,它会提示你这个应用程序将访问任何域。
通过将
*/*
放置在清单文件的permissions
部分中,您可以做到这一点。点击此处阅读更多信息:https://developer.chrome.com/extensions/xhr.html
ltqd579y2#
您可以在postman中向已发送的 AJAX 请求添加以下头。
屏幕截图
vhipe2zx3#
听起来像是主持投票的网站(“vote.php”脚本)需要有一个“Access-Control-Allow-Origin”头文件,以允许从一个网站列表(或所有网站)发布。
如果标题值为 *,则允许从任何网站发布:
也就是说,您可以将以下内容放在vote.php的顶部
Chrome扩展程序和应用程序不受普通网页上设置的相同安全限制的约束。
其他调试提示:
如果您尝试从浏览器中本地文件系统上打开的网页访问远程服务,您可能会发现浏览器对这些网页应用的安全规则与对Web服务提供的文件应用的安全规则不同。
例如,如果您在浏览器中打开来自
C:\MyDocuments\weboot\index.htm
(Windows)或\Users\joe\Sites\index.html
(Mac)等位置的本地文件,即使在大多数浏览器中指定了标头,您的 AJAX 请求也可能无法工作。苹果的Safari对本地打开的文件几乎没有跨域限制,但Firefox对允许的内容要严格得多,Chrome则介于两者之间。在本地运行一个网络服务器(例如在
http://localhost/
上)是一个避免意外行为的好主意。另外,其他提供处理 AJAX 请求函数的库(如AngularJS)可能需要在服务器上默认设置其他头文件。您通常可以在浏览器调试控制台中查看失败的原因。
yws3nbqq4#
2021年10月
在我的调查中,我发现您需要在请求的头中添加一个额外的字段,因此只需在头中添加以下键-值:
关键字:
X-Requested-With
|数值:XMLHttpRequest