CORS 错误:“请求仅支持协议方案:http…”等

2023-12-11

我正在尝试运行一个简单的应用程序。我有一个 Express 后端,当访问时返回一个 JSON 字符串localhost:4201/ticker。当我运行服务器并从我的 Angular 服务向此链接发出请求时http,我收到以下错误:

XMLHttpRequest 无法加载 localhost:4201/ticker。跨起源 仅支持以下协议方案的请求:http、data、chrome、 chrome 扩展,https。

我读了下面的文章:了解和使用 CORS如上所述,使用了cors模块与我的快递服务器。但是,我仍然收到上面给出的错误。部分代码如下:

服务器代码:

private constructor(baseUrl: string, port: number) {
    this._baseUrl = baseUrl;
    this._port = port;
    this._express = Express();
    this._express.use(Cors());
    this._handlers = {};
    this._hInstance = new Handlers();
    this.initHandlers();
    this.initExpress();
}
private initHandlers(): void {
    // define all the routes here and map to handlers
    this._handlers['ticker'] = this._hInstance.ticker;
}
private initExpress(): void {
    Object.keys(this._handlers)
        .forEach((key) => {
            this._express.route(this._url(key))
                .get(this._handlers[key]);
        });
}
private _url(k: string): string {
    return '/' + k;
}

这是处理函数:

ticker(req: Request, res: Response): void {
    Handlers._poloniex
        .getTicker()
        .then((d) => {
            return Filters.tickerFilter(d, Handlers._poloniex.getBases());
        })
        .then((fdata) => {

            //res.header('Access-Control-Allow-Origin', "*");
            //res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
            res.header('Content-Type', 'application/json');
            res.send(JSON.stringify(fdata));
        })
        .catch((err) => {
           this._logger.log([
                'Error: ' + err.toString(),
                'File: ' + 'handlers.class.ts',
                'Method: ' + 'ticker'
            ], true);
        });   
}

这是我的角度服务:

export class LiveTickerService {

  private _baseUrl: string;
  private _endpoints: {[key:string]: string};

  constructor(
    private _http: Http
  ) {
    this._baseUrl = 'localhost:4201/';
     this._endpoints = {
       'ticker': 'ticker'
     };
   }

  getTickerData(): Observable<Response> {
    return this._http.get(this._baseUrl + this._endpoints['ticker'])
      .map(resp => resp.json())
  }

}

以下是我使用服务的方式:

getTicker() {
  let a = new Array<{[key: string]: any}>();
  this._tickerService.getTickerData()
     .subscribe(
        data => {
          let parsed = JSON.parse(JSON.stringify(data));
          Object.keys(parsed)
            .forEach((k) => {
              a.push({k: parsed[k]});
            });
         this.data = a;
        },
        error => console.log(error.toString()),
        () => console.log('Finished fetching ticker data')
      );
  return this.data;
}

XMLHttpRequest 无法加载 localhost:4201/ticker。跨起源 仅支持以下协议方案的请求:http、data、chrome、 chrome 扩展,https。

任何时候你看到这个“仅支持协议方案”消息,这几乎肯定意味着您刚刚忘记将https or http在代码中的请求 URL 上。

所以在这种情况下,修复方法是使用 URLhttp://localhost:4201/ticker在你的代码中:

this._baseUrl = 'http://localhost:4201/';

……因为如果没有http:// there, localhost:4201/ticker并不是您真正想要的 URL。

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

CORS 错误:“请求仅支持协议方案:http…”等 的相关文章

随机推荐

  • ruby 如何允许方法和类同名?

    我碰巧正在用 ruby 开发 Singleton 类 只记得它的工作方式工厂女工 他们解决了这个问题 所以你可以同时使用漫长的路 Factory create and 捷径 Factory 我想了想 很好奇他们是如何上课的Factory也表
  • Cygwin编码困难

    不确定这是否是一个编程问题 我开始怀疑是这样 但后来我在 Windows 控制台而不是 Cygwin 控制台中运行了有问题的 Java 程序 可执行 jar 并且它运行良好 输出重音良好 重音输入接受良好 因此以下内容仅适用于 Cygwin
  • kernel.h中min宏中的“(void)(&_min1 == &_min2)”的作用是什么?

    In kernel h分钟定义为 define min x y typeof x min1 x typeof y min2 y void min1 min2 min1 lt min2 min1 min2 我不明白那条线是什么 void mi
  • 在 SimpleInjector 中使用 IAuthorizationFilter 进行依赖注入

    我有课PermissionFilter实现IAuthorizationFilter from System Web Mvc 由于它具有已映射的依赖项 因此我想使用 SimpleInjector 来提供它 我正在这样做 与 Ninject 合
  • 嵌套 ES6 类?

    似乎可以将类嵌套在构造函数中 然后可以从类中的任何位置实例化 这是官方的吗 编辑 例如 class C constructor class D constructor method var a new D works fine var a
  • 跨域AJAX withCredentials,PHP返回标头内容长度,但没有内容

    我正在尝试从一个域上的页面向另一个域上的 PHP 服务器发送跨域请求 没有凭据 一切都可以正常工作 我需要一个会话 但一旦添加凭据 它就不起作用 这是JS代码 var xhr new XMLHttpRequest xhr open GET
  • 使用 $_GET 字符串传递换行符

    我必须将字符串传递给表单 我想按以下方式混合使用 GET 和 POST
  • ViewBox 内的 WPF TextBox 在调整大小时丢失光标

    我在视图框中有一个文本框 当我尝试调整窗口大小时 文本框大小和字体大小会缩放 但如果我尝试聚焦文本框并尝试使用键盘在文本框中移动光标 有时光标会消失 有没有办法始终显示光标 请参考下面的代码 其中 ViewBox 内有一个 TextBox
  • boost/archive/binary_woarchive.hpp 和/或 boost/archive/binary_wiarchive.hpp 的序列化示例?

    我试图找到一个很好的例子来说明如何使用 boost 序列化内容的这些二进制宽字符版本 我拼凑了一些代码来尝试让它工作 但不幸的是 在尝试编译它时 我遇到了链接器错误 这是我的代码 以防我做任何明显错误的事情 include
  • 处理子例程中重复出现的 VBA 错误

    我被困在我有解决方法的事情上 但这让我烦恼我没有关于如何解决使用问题的直接答案On Error Goto对于重复出现的错误 我的问题本质上是一样的正如这个 但是提供的答案是OP整体方法的替代方案 而不是如何处理具体问题 我在下面简化了一个例
  • 每隔几秒调用获取当前坐标而不使用 NSTimer

    我知道如何用 NSTimer 做到这一点 但我不想每隔几秒就在没有计时器的情况下获取当前的 iPhone 坐标 我无法使用计时器 因为我在应用程序处于后台时获取坐标 我尝试过一些方法 但每秒都会调用一次 而不是每 10 秒调用一次 因为我不
  • CodeIgniter 删除 index.php 不起作用

    我正在使用 Ubuntu 13 并为本地 codeigniter 站点进行以下设置 Apache 2 4 6 Ubuntu 5 5 3 1ubuntu2 2 CI VERSION 2 1 2 如果没有 URL 将不再有效index php
  • 已超出传入消息的最大消息大小配额 (65536)

    我在为几个表创建范围时遇到此异常 所有这些表在设计上都很大
  • 我可以使用参数化查询从 SQL Server VarBinary 列返回字节数组吗?

    我编写了一个小型 VBA 过程来测试使用 ADO 将文件作为二进制数据上传到 SQL Server 中的 VarBinary 列以及从中下载文件 上传过程似乎可以正常工作 但我无法让下载过程正常工作 我相信 VarBinary 的输出参数设
  • ASP.NET MVC RequireHttps 仅在生产环境中

    我想使用需要Https属性以防止将不安全的 HTTP 请求发送到操作方法 C RequireHttps apply to all actions in controller public class SomeController Requi
  • 将表格从 Excel 导出到 Outlook(黑莓友好)

    因此 我从互联网上的不同地方收集了一些代码 将表格导出到 Outlook 并自动发送出去 并且刚刚注意到该电子邮件并不是真正的黑莓友好 主要是因为电子邮件正文以 HTML 形式发送 而不是作为 富文本 请记住表格也需要采用富格式 我缺少一行
  • 从 Excel 导入 - 非数字值将被忽略

    我有从指定格式的 Excel 工作表导入的代码 在其中一列中 大多数数据都是数字 但也存在非数字值 由于某种原因 导入代码会忽略非数字值 连接字符串如下所示 Dim FileConnectionString As String Provid
  • 启动 celery Worker 并启用它的广播队列

    我正在尝试启动芹菜工作人员 因此它只侦听单个队列 这不是问题 我可以这样做 python m celery worker A my module Q my queue c 1 但现在我也想要这个my queue队列成为广播队列 所以我在我的
  • 以编程方式将 [AllowAnonymous] 属性添加到我的所有控制器方法

    我有一个带有多个控制器的 WebAPI2 REST api 我使用基于角色的身份验证 我在所有控制器和一些方法上添加了 Authorize 属性 但是 在 DEV 环境中我想禁用身份验证 我希望我可以将一些代码放入WebApiConfig例
  • CORS 错误:“请求仅支持协议方案:http…”等

    我正在尝试运行一个简单的应用程序 我有一个 Express 后端 当访问时返回一个 JSON 字符串localhost 4201 ticker 当我运行服务器并从我的 Angular 服务向此链接发出请求时http 我收到以下错误 XMLH