Saya mendapatkan "Http kegagalan respon (tidak diketahui url): 0 Kesalahan yang tidak Diketahui" bukan pesan kesalahan yang sebenarnya dalam Sudut

I'm menggunakan Sudut 4 HttpClient untuk mengirim permintaan ke layanan eksternal. Hal ini sangat standar setup:

this.httpClient.get(url).subscribe(response => {
  //do something with response
}, err => {
  console.log(err.message);
}, () => {
  console.log('completed');
}

Masalahnya adalah, ketika permintaan gagal saya melihat generik Http kegagalan respon (tidak diketahui url): 0 Kesalahan yang tidak Diketahui pesan di console. Sementara itu, ketika aku memeriksa permintaan gagal di chrome saya dapat melihat respon status 422, dan di "preview" tab saya melihat pesan yang sebenarnya desribing penyebab kegagalan.

Bagaimana cara mengakses sebenarnya respon pesan yang dapat saya lihat di chrome dev tools?

Berikut ini's sebuah screenshot yang menunjukkan masalah:

Mengomentari pertanyaan (6)
Larutan

Masalah itu terkait dengan PERUSAHAAN. Saya melihat bahwa ada kesalahan lain di Chrome console:

Ada 'Access-Control-Allow-Origin' header hadir pada sumber daya yang diminta. Asal 'http://localhost:4200' oleh karena itu tidak diperbolehkan mengakses. Respon punya kode status HTTP 422.`

Ini berarti respon dari server backend hilang Access-Control-Allow-Origin header meskipun backend nginx dikonfigurasi untuk menambahkan header tanggapan dengan add_header direktif.

Namun, direktif ini hanya menambah header ketika kode respon adalah 20X atau 30X. Pada kesalahan respon header yang hilang. Saya perlu menggunakan selalu parameter untuk memastikan header ditambahkan terlepas dari respon kode:

add_header 'Access-Control-Allow-Origin' 'http://localhost:4200' selalu;

Setelah backend adalah dikonfigurasi dengan benar saya bisa mengakses pesan kesalahan yang sebenarnya di Sudut kode.

Komentar (3)

bekerja untuk saya setelah mematikan iklan memblokir ekstensi di chrome, kesalahan ini kadang-kadang muncul karena ada sesuatu yang menghalangi http di browser

Komentar (2)

Dalam kasus orang lain yang akhirnya tersesat seperti saya... masalah Saya BUKAN karena CORS (saya memiliki kontrol penuh dari server(s) dan CORS adalah dikonfigurasi dengan benar!).

Masalah saya adalah karena saya menggunakan platform Android level 28 yang menonaktifkan cleartext jaringan komunikasi secara default dan saya mencoba untuk mengembangkan aplikasi yang poin di laptop saya's IP (yang menjalankan server API). API base URL adalah sesuatu seperti __http://[LAPTOP_IP]:8081__. Sejak itu's tidak https, android webview benar-benar blok jaringan xfer antara telepon/emulator dan server di laptop saya. Dalam rangka untuk memperbaiki kesalahan ini:

Tambahkan konfigurasi keamanan jaringan

File baru di proyek: resources/android/xml/network_security_config.xml

<?xml version="1.0" encoding="utf-8"?>



CATATAN: Ini harus digunakan dengan hati-hati karena itu akan memungkinkan semua cleartext dari aplikasi anda (tidak ada yang dipaksa untuk menggunakan https). Anda dapat membatasi lebih lanjut jika anda ingin.

Referensi config di utama config.xml


    ...




    ....

Yang's itu! Dari sana aku membangun kembali APK dan aplikasi sekarang dapat berkomunikasi dari kedua emulator dan ponsel.

Info lebih lanjut pada jaringan sec: https://developer.android.com/training/articles/security-config.html#CleartextTrafficPermitted

Komentar (3)

Jika anda menggunakan .NET aplikasi Inti, solusi ini mungkin bisa membantu!

Selain itu hal ini mungkin tidak menjadi Sudut atau lainnya permintaan kesalahan dalam aplikasi front end

Pertama, anda harus menambahkan Microsoft CORS Nuget package:

Install-Package Microsoft.AspNetCore.Cors

Anda kemudian perlu untuk menambahkan CORS jasa di startup anda.cs. Di ConfigureServices metode yang anda harus memiliki sesuatu yang mirip dengan berikut ini:

public void ConfigureServices(IServiceCollection services)
{
    services.AddCors();
}

Berikutnya, tambahkan CORS middleware untuk aplikasi anda. Di startup anda.cs anda harus Mengkonfigurasi metode. Anda perlu memiliki hal yang mirip dengan ini:

public void Configure(IApplicationBuilder app, IHostingEnvironment env, 
ILoggerFactory loggerFactory)
{
    app.UseCors( options => 
    options.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader());
    app.UseMvc();
}

Pilihan lambda adalah menguasai API sehingga anda dapat menambahkan/menghapus opsi-opsi tambahan yang anda butuhkan. Anda benar-benar dapat menggunakan opsi "AllowAnyOrigin" untuk menerima domain, tapi saya sangat menyarankan anda tidak melakukan hal ini karena membuka palang asal panggilan dari siapa pun. Anda juga dapat membatasi cross asal panggilan untuk mereka Metode HTTP (GET/PUT/POS dll), jadi anda hanya dapat mengekspos MENDAPATKAN panggilan cross domain dll.

Komentar (0)

Bagi saya itu disebabkan oleh sisi server JsonSerializerException.

unhandled pengecualian terjadi saat mengeksekusi permintaan Newtonsoft.Json.JsonSerializationException: Mandiri referensi loop terdeteksi dengan jenis ...

Klien mengatakan:

POST http://localhost:61495/api/Action net::ERR_INCOMPLETE_CHUNKED_ENCODING
ERROR HttpErrorResponse {headers: HttpHeaders, status: 0, statusText: "Unknown Error", url: null, ok: false, …}

Membuat tanggapan tipe yang lebih sederhana dengan menghilangkan loop memecahkan masalah.

Komentar (0)

Kesalahan ini terjadi bagi saya di Firefox tapi tidak Chrome saat yang berkembang secara lokal, dan hal ini ternyata disebabkan oleh Firefox tidak mempercayai lokal saya API's sertifikat ssl (yang tidak valid, tapi aku telah ditambahkan ke lokal saya cert store, yang memungkinkan chrome percaya itu tapi bukan ff). Menavigasi langsung ke API, dan menambahkan pengecualian di Firefox tetap masalah.

Komentar (2)

Kesalahan yang sama dapat terjadi, ketika anda didn't memberikan klien yang berlaku sertifikat dan tanda bahwa server anda memahami:

Kesalahan:

Http kegagalan respon (tidak diketahui url): 0 Kesalahan yang tidak Diketahui

Contoh kode:

import { HttpClient, HttpHeaders } from '@angular/common/http';
import { Observable, throwError } from 'rxjs';
import { catchError, map } from 'rxjs/operators';

class MyCls1 {

  constructor(private http: HttpClient) {
  }

  public myFunc(): void {

    let http: HttpClient;

    http.get(
      'https://www.example.com/mypage',
      {
        headers:
          new HttpHeaders(
            {
              'Content-Type': 'application/json',
              'X-Requested-With': 'XMLHttpRequest',
              'MyClientCert': '',        // This is empty
              'MyToken': ''              // This is empty
            }
          )
      }
    ).pipe( map(res => res), catchError(err => throwError(err)) );
  }

}

Perhatikan bahwa kedua MyClientCert & MyToken adalah string kosong, maka kesalahan. MyClientCert & MyToken dapat berupa nama server anda mengerti.

Komentar (4)

Jika anda menggunakan Laravel sebagai Backend anda, kemudian anda edit .file htaccess dengan hanya menyisipkan kode ini, untuk memecahkan masalah CROS di Sudut atau ion-ION proyek

Header add Access-Control-Allow-Origin "*"
Header add Access-Control-Allow-Methods: "GET,POST,OPTIONS,DELETE,PUT"
Komentar (3)

I'm menggunakan ASP.NET SPA Ekstensi yang menciptakan saya proxy pada port 5000 dan 5001 yang melewati Sudut's port 4200 selama pengembangan.

Aku punya CORS dengan benar setup untuk https port 5001 dan semuanya baik-baik saja, tapi aku sengaja pergi ke old bookmark yang untuk port 5000. Kemudian tiba-tiba pesan ini muncul. Seperti yang orang lain telah mengatakan di konsol ada 'preflight' pesan kesalahan.

Jadi terlepas dari lingkungan anda, jika anda're menggunakan CORS pastikan anda memiliki semua port tertentu - sebagai host dan port kedua peduli.

Komentar (0)

Bagi saya itu bukan't sudut masalah. Adalah sebuah field bertipe DateTime di DB yang memiliki nilai (0000-00-00) dan model saya tidak dapat mengikat properti yang benar jadi saya mengubah ke nilai yang berlaku seperti (2019-08-12).

I'm menggunakan .net core, OData v4 dan MySql (EF pomelo konektor)

Komentar (0)

Tidak setua pertanyaan lain, tapi saya hanya berjuang dengan hal ini dalam sebuah Ion-aplikasi Laravel, dan tidak ada yang bekerja dari sini (dan tulisan lainnya), jadi saya diinstal https://github.com/barryvdh/laravel-cors melengkapi di Laravel dan mulai dan bekerja dengan cukup baik.

Komentar (0)

Tambang itu disebabkan oleh tidak valid hubungan dalam model saya mencoba untuk query. Tahu debugging respon itu jatuh pada hubungan.

Komentar (0)

Jika anda memiliki tepat cors header di tempat. Jaringan perusahaan anda mungkin stripping off the cors header. Jika website diakses secara eksternal, coba akses dari luar jaringan anda untuk memverifikasi apakah jaringan yang menyebabkan masalah-ide yang baik terlepas dari penyebabnya.

Komentar (0)

Saya mendapatkan yang tepat setiap kali pesan permintaan saya mengambil lebih dari 2 menit untuk menyelesaikan. Browser akan memutuskan sambungan dari permintaan, tetapi permintaan pada backend dilanjutkan sampai selesai. Server (ASP.NET Web API dalam kasus saya) tidak't mendeteksi putus.

Setelah seharian mencari, akhirnya saya menemukan ini answer, menjelaskan bahwa jika anda menggunakan proxy config, memiliki default timeout 120 detik (2 menit).

Jadi, anda dapat mengedit konfigurasi proxy dan set ke apa pun yang anda butuhkan:

{
  "/api": {
    "target": "http://localhost:3000",
    "secure": false,
    "timeout": 6000000
  }
}

Sekarang, saya menggunakan agentkeepalive untuk membuatnya bekerja dengan NTLM authenticationdan tidak't tahu bahwa agen's timeout tidak ada hubungannya dengan proxy's timeout, sehingga keduanya harus ditetapkan. Butuh beberapa saat untuk menyadari bahwa, jadi di sini's contoh:


const Agent = require('agentkeepalive');

module.exports = {
    '/api/': {
        target: 'http://localhost:3000',
        secure: false,
        timeout: 6000000,          // 
Komentar (0)

Kesalahan saya adalah bahwa file yang terlalu besar (dotnet core tampaknya memiliki batas @~25Mb). Pengaturan

  • maxAllowedContentLength untuk 4294967295 (max nilai uint) di web.config
  • dekorasi aksi controller dengan [DisableRequestSizeLimit]
  • jasa.Mengkonfigurasi(pilihan => { pilihan.MultipartBodyLengthLimit = 4294967295; }); di Startup.cs

memecahkan masalah untuk saya.

Komentar (0)