2016-10-21 33 views
5

URL'den tüm HMTL belgesini almak için fetch API'yi kullanmak istiyorum.Neden durum = 0 ile bir yanıt döndürüyor?

let config = { 
method: 'GET', 
headers: { 
    'Content-Type': 'application/json', 
    'Accept': 'text/html', 
    'Accept-Language': 'zh-CN', 
    'Cache-Control': 'no-cache' 
}, 
mode: 'no-cors'}; 

fetch('http://www.baidu.com', config).then((res)=> { 
console.log(res);}).then((text)=> {}); 

çalıştırmak krom kod, bir isteği tetiklenir ve krom ağında html döndürür. ancak res dönüşü getirme:

enter image description here

Neden durum ve ben krom NEWWORK içinde ne gibi doğru res nasıl alabilirim? config.mode ait no-cors kısmında

+0

Durum 0 kütüphaneye bağımlı, hangi kütüphane 'fetch' işlevi nedir? – tcooc

+0

'Fetch' yerel bir işlev (şimdi). – Brian

cevap

5

:

no-cors - GET veya POST, HEAD daha şey diğer olmaktan yöntemi önler. Herhangi bir Hizmet Çalışanı bu istekleri kesintiye uğratırsa, bunlardan başka herhangi bir başlık ekleyemez veya geçersiz kılabilir. Ayrıca, JavaScript sonuçta oluşan Yanıtın özelliklerine erişemeyebilir. Bu, Hizmet Çalışanlarının Web'in anlamlarını etkilememesini sağlar ve etki alanları genelinde veri sızıntısından kaynaklanan güvenlik ve gizlilik sorunlarını önler.

Etkili, tepki size fetch çağrısından mode Çıkarma durum kodu 0. yapım isteği başarılı veya başarısız olup olmadığı hakkında hiçbir bilgileri içerecektir: (a mod olarak belirtilen no-cors ile) böyle bir istekte aldığım olacak CORS'in aslında başarısız olduğunu göster.

Özel durumunuzda ne anlama geldiğini öğrenmek için, diğer SO yanıtlarına bakın.

+0

Thx, 'no-cors' öğesini kaldırırsam: – pingfengafei

+1

Thx, 'no-cors' öğesini kaldırırsam: Ön kontrol isteğine yanıt erişim denetimi denetimini geçmez: 'Erişim Denetimi-İzin-Kökeni' üstbilgisinde yok istenen kaynak. Kökeni 'http: // localhost: 8888' bu nedenle erişime izin verilmiyor. Eğer opak bir cevap ihtiyaçlarınızı karşılarsa, CORS devre dışıyken kaynağı almak için istek modunu 'no-cors' olarak ayarlayın. CORS nasıl çözülür? – pingfengafei

+0

Bu doğru. CORS, sayfanın kendisinden devre dışı bırakılamaz bir tarayıcı güvenlik özelliğidir. Sayfalarını tarayıcınızdan istemek istiyorsanız baidu.com ile iletişime geçmelisiniz. – Brian

0

Bunu tarayıcı ortamında nasıl yapacağımı bilmiyorum, ancak bunun Node'deki çapraz kaynaklı bir siteden fetch için uygun olduğunu biliyorum.

require('es6-promise').polyfill(); 
require('isomorphic-fetch'); 
fetch('https://www.baidu.com', { 
    mode: 'no-cors' 
}) 
    .then((res) => { 
    console.log(res.status); //=> 200 
    }); 

Yani, müşteriye istediğini fetch ve sonra respond bir Düğüm sunucusu kullanabilirsiniz.

Ayrıca, bir tarayıcıdaki bazı sitelerden fetch bir şeyler yapmak istiyorum, bu imkansız gibi görünüyor. Belki de bunu yapmak imkansız olan , imkansızdır, çünkü İnternet kaynak almak istediğimiz web sitelerini korumak zorundadır.