CORS 请求在本地打开的 html 文件中被阻止

2024-03-04

我已经开始编写一个使用 JavaScript 显示数据的 HTML 文件。因为它应该尽可能简单地完成,所以我不想运行nodejs或任何其他本地http服务器。我刚刚在浏览器中打开了 HTML 文件(url 为 file:///home/visu/index.htm)。

一切都很好,直到在 index.htm 中完成对在线 API 的 jquery ajax 请求。浏览器阻止请求并显示以下消息:

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://x.x.x.x. (Reason: CORS header ‘Access-Control-Allow-Origin’ missing)."

如何在不启动本地 http 服务器的情况下解决该问题?

一个可能的解决方案是使用一些“无安全标志”启动浏览器或使用插件禁用 CORS,但我必须一直手动执行此操作,所以我不喜欢它。


当您的浏览器执行 AJAX 请求时与托管当前页面的服务器不同,它首先发送一个OPTIONSHTTP 消息。在该消息中,它发送以下标头:

origin: http://my-web-server.com

后端服务器将响应:

access-control-allow-origin: http://my-web-server.com

但是,当您没有网络服务器时,浏览器就无法输入地址origin标头。这就是为什么您的浏览器不允许您从本地文件执行任何 AJAX 请求(也许您可以像评论中提到的那样禁用浏览器的 CORS 安全性,但这可能会让您面临恶意网站的风险)。

另外一个选择

如果您更改后端以返回以下标头,您可以告诉您的浏览器允许从本地主机连接到后端:

access-control-allow-origin: https://localhost:8888

而且,您还需要告诉本地主机服务器以 HTTPS 而不是 HTTP 方式为您的页面提供服务。一旦满足这两个条件,CORS 验证就不会失败。

请注意,要启用 HTTPS,您需要拥有 SSL 证书和密钥,可以使用以下命令生成它们:

openssl req -x509 -out localhost.crt -keyout localhost.key \
  -newkey rsa:2048 -nodes -sha256 \
  -subj '/CN=localhost' -extensions EXT -config <( \
   printf "[dn]\nCN=localhost\n[req]\ndistinguished_name = dn\n[EXT]\nsubjectAltName=DNS:localhost\nkeyUsage=digitalSignature\nextendedKeyUsage=serverAuth")

该命令的来源和更多信息可以在此页面来自 Let's Encrypt https://letsencrypt.org/docs/certificates-for-localhost/.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CORS 请求在本地打开的 html 文件中被阻止 的相关文章

  • 如何将多个文件上传到Firebase?

    有没有办法将多个文件上传到 Firebase 存储 它可以在一次尝试内上传单个文件 如下所示 fileButton addEventListener change function e Get file var file e target
  • 如何使用 Selenium webdriver 测试对 SVG 对象的点击?

    我正在尝试编写代码来检查单击 SVG 对象的功能 例如此 URL 上的美国州 http www amcharts com svg maps map usa 这可行 但是有更好的方法吗 不需要物理移动鼠标的东西 robert new Robo
  • 如何使用 Eclipse 作为 Javascript IDE?

    我从官方下载页面下载了 eclipse Javascript IDE 但是 当我启动应用程序时 它显示 必须提供 Java 运行时环境或 Java 开发工具包才能运行 eclipse 我已经有一个运行良好的 eclipse 的 java I
  • Java:从 ScriptEngine javascript 返回一个对象

    我正在尝试使用 Java 来评估 javascript脚本引擎 https docs oracle com javase 7 docs api javax script ScriptEngine html班级 这是我正在尝试做的事情的一个简
  • Puppeteer 无法在 VPS (DigitalOcean) 上工作

    我在水滴中数字海洋 https www digitalocean com 我收到这个错误 node 5549 UnhandledPromiseRejectionWarning TimeoutError Navigation Timeout
  • AngularJS:ng-show 与 display:none

    我有一个用例 我必须使用 CSS 默认隐藏 HTML 元素 如下所示 HTML div class item div CSS item display none 但是 我需要在页面加载后使用 ng show 切换元素的可见性 如下所示 di
  • Firefox CSS 旋转与 Chrome 旋转不同

    我想制作一个 3D 矩形 平行六面体 用户可以用箭头移动它 它在 Chrome 中工作得很好 但在 Firefox 中 一些转换 实际上很多 与 Chrome 不同 看着this https jsfiddle net 7273yur9 2
  • 在 jQuery 中生成下拉菜单的年份

    我想到了一个小问题 我正在尝试想出一种方法来解决它 基本上 我想要做的是将年份减去 18 年 即 2011 年返回 1993 年 并生成一个下拉选项 供用户选择在此之前的任何年份 基本上他们必须证明自己已超过法定年龄 18 岁 var mi
  • 从数据库中给定时间起经过的时间

    我有一个 HTML 表 其中包含从数据库中提取的记录 我正在使用 PHP MySQL 我的表中名为 Timer 的列未从数据库中检索 我需要在此处显示经过的时间 从数据库中的特定时间开始 例如 假设现在的时间是2013年2月21日下午6点2
  • jqPlot DateAxis tickInterval 不起作用

    我试图每月绘制一个包含单个数据点的图表 我会在每个月的第一天将其作为一个点发送到 jqPlot jqplot actualChart 2011 10 01 0 296 2011 11 01 0 682 title programSelect
  • Nuxt + Vuex - 如何将 Vuex 模块分解为单独的文件?

    在 Nuxt 文档中 here https nuxtjs org guide vuex store module files 它说 您可以选择将模块文件分解为单独的文件 state js actions js mutations js an
  • 通过ajax POST提交两次表单

    插入到mysql using php通过文件调用AJAX 前insert语句php代码执行select查询到查找重复记录并继续insert statement Issue 从ajax调用php文件时 它执行了两次并得到作为重复记录的响应 好
  • 如何使用 javascript 迭代文件系统目录和文件?

    我正在使用 Javascript 编写一个应用程序 该应用程序将与 Phonegap 一起使用来制作 Android 应用程序 我正在使用 Phonegap File API 来读取目录和文件 相关代码如下所示 document addEv
  • 字母数字验证在 jquery 中不起作用

    我的代码如下 包含所有必需的js文件 当我提交表单而不为 UserDetailAliasName 提供任何值时 表单不会提交并显示验证错误消息 此字段是必需的 但是如果我提交像 等值 表单会提交数据 我使用此表单从数据库搜索用户名 docu
  • 谷歌浏览器不显示一个网站的alert()弹出窗口

    我正在开发一个 javascript 循环 该循环会随着循环的进行而提醒每个键值 为了加快速度 我选中了 阻止此页面创建其他对话框 框 通常这只会抑制一个例程的弹出窗口 但它们还没有回来 在 Google Chrome 中 alert 消息
  • 如何在javascript中删除对象的一部分

    这是我的代码 var data btn click function total data push id total cell val1 val2 val3 每次用户点击btn按钮 我向数据对象添加一些值 现在我的问题是如何删除有的部分i
  • 如何使用 jQuery 以编程方式单击 Gmail 中的“显示下面的图像”?

    我正在创建一个 Google Chrome 扩展程序 它使用 jQuery 在 Gmail 中添加了 显示下面的图像 链接的键盘快捷键 我尝试了以下方法来模拟点击 但未成功 canvas frame contents find span c
  • 我应该采取什么圆角方法?

    因此 关于圆角的信息并不缺乏 我已经经历过其中的大部分 我发帖是为了征求社区对这一点的意见 我的场景是 我们正在开发一个圆角相关设计 主要用于交互
  • 当 mp4 是唯一来源时,自定义 HTML5 视频控件不起作用

    问题 我只有一个视频源 mp4 因为我正在尝试向 tumblr 视频添加自定义控件 如果只有mp4作为源video duration返回为NaN 作为使用 3 个源 mp4 webm ogg 时的测试 它可以工作 所以video durat
  • angularjs 将 ngModel 从包装器指令传递到包装器指令

    我是 Angular 的新手 但仍然痛苦地纠结于自定义指令 我想重用这段 HTML

随机推荐