我目前正在开发一个带有java后端的角度应用程序。到目前为止,一切似乎都有效,但现在我遇到了一个无法解释的问题。有一个GET请求不起作用。其他一切都有效。但有趣的是,它只适用于Firefox。
当我打印出显示在控制台中的obrable的错误时:
{
"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(不是通过角度),一切正常。
我在这里有点绝望。任何帮助表示赞赏。
澄清:
console.log(err)
缩小问题范围
我的完整网址是http://localhost:8080/api/v1/ads/1
。
猜猜问题是/ads
部分。
我完全不知道究竟是什么原因造成的。
我尝试了其他几个网址,例如/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 server,但效果很好。
所以问题只存在于以下内容:
/ads
,但不是最后一部分(http://localhost:8080/api/v1/ads
一直有效)我找到了一个针对我的解决方法(不在网址中使用广告),但如果有人感到无聊并且想要解决这个问题,我很想知道这个神秘的究竟是什么原因。