Postman如何发送请求? AJAX ,同源策略

m4pnthwp  于 2022-11-07  发布在  Postman
关注(0)|答案(4)|浏览(293)

我发现了一个非常有用的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' );
        }
    }
    });
},
gab6jxml

gab6jxml1#

Chrome打包的应用程序可以有跨域权限。当你安装Postman时,它会提示你这个应用程序将访问任何域。
通过将*/*放置在清单文件的permissions部分中,您可以做到这一点。
点击此处阅读更多信息:https://developer.chrome.com/extensions/xhr.html

ltqd579y

ltqd579y2#

您可以在postman中向已发送的 AJAX 请求添加以下头。

Content-Type      application/json

X-Requested-With  XMLHttpRequest

屏幕截图

vhipe2zx

vhipe2zx3#

听起来像是主持投票的网站(“vote.php”脚本)需要有一个“Access-Control-Allow-Origin”头文件,以允许从一个网站列表(或所有网站)发布。
如果标题值为 *,则允许从任何网站发布:

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 请求也可能无法工作。
苹果的Safari对本地打开的文件几乎没有跨域限制,但Firefox对允许的内容要严格得多,Chrome则介于两者之间。在本地运行一个网络服务器(例如在http://localhost/上)是一个避免意外行为的好主意。
另外,其他提供处理 AJAX 请求函数的库(如AngularJS)可能需要在服务器上默认设置其他头文件。您通常可以在浏览器调试控制台中查看失败的原因。

yws3nbqq

yws3nbqq4#

2021年10月
在我的调查中,我发现您需要在请求的头中添加一个额外的字段,因此只需在头中添加以下键-值:
关键字:X-Requested-With|数值:XMLHttpRequest

相关问题