запрос не выполнен (неизвестная ошибка) - PullRequest
0 голосов
/ 03 мая 2018

В настоящее время я разрабатываю угловое приложение с Java-бэкэндом. Пока что все работало, но теперь я столкнулся с необъяснимой проблемой. Есть один запрос GET, который не работает. Все остальное работает. Но как ни странно, в Firefox он не работает.

Когда я распечатываю ошибку наблюдаемого, это отображается в консоли:

{
  "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 и все остальные запросы работают отлично. Все ресурсы реализованы с Джерси. И данный запрос не подлежит какой-либо аутентификации или авторизации.

Напомним: только один запрос только в Firefox не работает. Если я перейду к URL напрямую (не через angular), все будет нормально.

Я немного отчаялся здесь. Любая помощь приветствуется.

Для уточнения :

  • в консоли разработчика нет ошибок или чего-то еще (ни в Firefox, ни в Chrome)
  • нет запроса на выход из браузера во вкладке сети
  • нет запроса на стороне сервера
  • ошибка выше от console.log(err)
  • угловой v5.2.9 и HttpClient используются

Сужение проблемы

Мой полный URL-адрес 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 server , который работал нормально.

Таким образом, проблема существует только со следующим:

  • угловой код 5 выше
  • Firefox 59.0.3 (64-разрядная версия)
  • Джерси2 / Джексон2 API
  • и /ads в URL, но не как последняя часть (http://localhost:8080/api/v1/ads всегда работал)

Я нашел обходной путь для меня (не используя рекламу в URL), но если кому-то скучно и он хочет это выяснить, я хотел бы знать, в чем именно причина этой тайны.

...