0

我目前正在开发一个带有 java 后端的 Angular 应用程序。到目前为止,一切似乎都有效,但现在我遇到了一个无法解释的问题。有一个 GET 请求不起作用。其他一切都有效。但有趣的是,它只在 Firefox 中不起作用。

当我打印出 observable 的错误时,这会在控制台中显示:

{
  "headers": {
    "normalizedNames": {},
    "lazyUpdate": null,
    "headers": {}
  },
  "status": 0,
  "statusText": "Unknown Error",
  "url": null,
  "ok": false,
  "name": "HttpErrorResponse",
  "message": "Http failure response for (unknown url): 0 Unknown Error",
  "error": {
    "isTrusted": true
  }
}

当我查看网络选项卡时,请求未执行。甚至没有预检 OPTIONS 请求。

我红了几个提示,我将成为 CORS 问题。但我相信这里不是这样。我的 CORS 标头设置正确:

Access-Control-Allow-Headers: X-Requested-With, Content-Type, Authorization
Access-Control-Allow-Methods: GET, POST, DELETE, PUT, OPTIONS, HEAD
Access-Control-Allow-Origin: *
Content-Type: application/json

(通常我会为 CORS 标头设置一个更具体的域列表,但我将其设置为 '*' 只是为了确定)

不工作的请求在资源上/ads/:id。请求/ads和所有其他请求都可以正常工作。所有资源都通过 Jersey 实现。并且有问题的请求不受任何身份验证或授权的约束。

回顾一下:仅在 Firefox 中只有一个请求不起作用。如果我直接访问 URL(而不是通过角度),一切正常。

我在这里有点绝望。任何帮助表示赞赏。

澄清

  • 开发人员控制台中没有错误或其他内容(Firefox 和 chrome 中都没有)
  • 在网络选项卡中没有从浏览器发出的请求
  • 服务器端没有请求进入
  • 上面的错误来自console.log(err)
  • 使用 angular v5.2.9 和 HttpClient

缩小问题范围

我的完整网址是http://localhost:8080/api/v1/ads/1. 并猜测问题出在哪里/ads。我完全不知道究竟是什么原因造成的。我尝试了其他几个 URL,例如/ad /adsf /adsa等,它们都有效。

我还将Angular缩小到这个范围:

import { Component, OnInit } from '@angular/core';
import { AdService } from '@app/shared/services/ad/ad.service';
import { HttpClient } from '@angular/common/http';

class Ad {
  id: number;
  title: string;
}

@Component({
  selector: 'fwas-ad-detail',
  template: `
  <div *ngIf="isError">
    <h1>Error</h1>
  </div>
  <div *ngIf="!isError">
    <h1>{{ad?.title}}</h1>
  </div>
  `
})
export class AdDetailComponent implements OnInit {

  url = 'http://localhost:8080/api/v1/ads';
  ad: Ad;
  isError = false;

  constructor(private http: HttpClient) { }

  ngOnInit() {
    const queryUrl = this.url + '/' + '1';
    this.http.get<Ad>(queryUrl).subscribe(
      data => { this.ad = data; },
      err => { this.isError = true; }
    );
  }
}

我也用json 服务器试了一下,效果很好。

所以问题只存在于以下情况:

  • 上面的角度5代码
  • 火狐 59.0.3(64 位)
  • Jersey2/Jackson2 API
  • /adsURL 中,但不是最后一部分(http://localhost:8080/api/v1/ads一直有效)

我为我找到了一种解决方法(不在网址中使用广告),但如果有人感到无聊并想弄清楚这一点,我很想知道这个谜团的确切原因是什么。

4

0 回答 0