邮递员如何发送请求?ajax,同源策略

IT技术 javascript jquery ajax api postman
2021-02-20 16:43:23

我发现这个名为 Postman 的非常有用的 Chrome 扩展程序。这是一个非常有用的扩展,尤其是在您编写 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个回答

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

通过放置*/*permissions清单文件的部分,您可以做到这一点。

在此处阅读更多信息:https : //developer.chrome.com/extensions/xhr.html

所以基本上,Chrome 应用程序不受跨域安全的约束?那么 Chrome 应用程序可以访问我的银行 cookie 或我的 Facebook 登录信息吗?
2021-05-01 16:43:23
@Imray 不需要 CORS 标头,就像服务器程序或curl.
2021-05-03 16:43:23
@Imray Chrome 应用程序可以绕过跨域。Chrome 不会在获得此权限的情况下共享您的常规浏览会话。但是,如果您安装可以执行内容脚本的 Chrome 扩展程序,请确保它们可以访问您的银行 cookie!
2021-05-04 16:43:23
@Imray,显然,如果您单击“允许此”和“允许此”,该应用程序可以在您允许的权限中执行任何它想做的事情。
2021-05-12 16:43:23
怎么可能?网站本身不也必须允许CORS吗?
2021-05-20 16:43:23

您可以添加以下标头以在邮递员中发送 Ajax 请求。

Content-Type      application/json

X-Requested-With  XMLHttpRequest

截屏

在此处输入图片说明

信用猎户座

听起来像托管民意调查的站点(“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 请求可能无法工作,即使在大多数浏览器中指定了标头。

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

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

2021 年 10 月

在我的调查中,我发现您的请求标题中需要一个额外的字段。因此,只需将以下键值添加到标题中:

key: X-Requested-With| valueXMLHttpRequest