2016-09-16 2 views
0

Ich habe Access-Control-Allow-Origin auf meinem Apache-Webserver aktiviert. Ich kann alle Anfragen beim ersten Laden laden. Allerdings würde verlassen gescheitert Nachladen/Auffrischung der Seiten die Hälfte der Anfragen, einen Fehler zu verlassen,Zugriffssteuerung Erlaube Origin header Fehler Nur in Chrome, Safari, aber nicht Opera

XMLHttpRequest cannot load http://***. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:3000' is therefore not allowed access. 

In Chrome Developer Tool, unter der Registerkarte Netzwerk „Disable Cache“ beseitigt diesen Fehler zu ermöglichen.

Ich benutze AngularJS $ http, um meine Anfrage aufzurufen, habe ich die Cache-Option auf True/False geändert, aber diese Anomalie bleibt bestehen. Zu Ihrer Information benutze ich auch ein eckiges Cache-Modul, https://github.com/jmdobry/angular-cache, ich habe versucht, dies auch zu aktivieren/deaktivieren, aber ohne Erfolg.

Hier ist eine Kopie der Request-Header:

GET ***Valid_Url_With_Parameters** HTTP/1.1 
Host: ******** 
Connection: keep-alive 
Accept: application/json, text/plain, */* 
Origin: http://localhost:3000 
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36 
Referer: http://localhost:3000/ 
Accept-Encoding: gzip, deflate, sdch 
Accept-Language: en-US,en;q=0.8 

Ich habe einen 2 verschiedenen Typen für die fehlgeschlagenen Anfragen-Header mit verschiedenem HTTP-Statuscodes Antwort.

HTTP/1.1 200 OK 
Content-Length: 564121 
Content-Type: application/json 
Server: Apache/2.2.15 (CentOS) 
Vary: Accept 
Last-Modified: Fri, 16 Sep 2016 12:41:41 GMT 
Connection: keep-alive 
Date: Fri, 16 Sep 2016 12:43:44 GMT 


HTTP/1.1 206 Partial Content 
Content-Type: application/json 
Server: Apache/2.2.15 (CentOS) 
Vary: Accept 
Last-Modified: Fri, 16 Sep 2016 13:39:05 GMT 
Content-Range: bytes 29200-29200/785592 
Content-Length: 1 
Connection: keep-alive 
Date: Fri, 16 Sep 2016 14:20:48 GMT 

Es scheint etwas mit Caching zu tun. Wenn die Seite das erste Mal geladen wird, haben alle Anfragen den richtigen Zugriffssteuerungsheader. Nachfolgendes Refresh/Reload entfernt diesen Header. Wie kann ich weiterhin Caching verwenden und den Zugriffssteuerungsheader beibehalten?

Edit:

Nur hinzuzufügen auf, versuchte ich mit Safari, erschien die gleiche Anomalie. Es wird beim ersten Versuch geladen, aber das anschließende Laden wird einen Nullzugriffskontrollfehler auslösen. Diesmal zeigt der Antwort-Header in Safari jedoch nichts.

Edit 2:

Abnormality erscheint auch in Firefox, aber nicht in Opera Beta Version 40.0.2308.52. Ich beginne mich zu fragen, ob dies der Grund für den Browser ist. Access-Control-Allow-Origin-Header ist ebenfalls vorhanden.

-Antwortheaders in Opera

HTTP/1.1 200 OK 
Access-Control-Allow-Origin: * 
Allow: GET, POST, HEAD, OPTIONS 
Content-Type: application/json 
Date: Sat, 17 Sep 2016 06:56:53 GMT 
Server: Apache/2.2.15 (CentOS) 
Vary: Accept 
Transfer-Encoding: chunked 

Bearbeiten 3: würde Ich mag hinzufügen, dass die Anforderungen, die ich ziehe eine große Menge an Daten sind. Ich zeichne die letzten 7 Tage Geschichte der Daten, gibt es etwa 20 JSON-Dateien, die jeweils von 500 KB bis 1000 KB reichen. Ich habe festgestellt, dass dieser Fehler nicht auftritt, wenn ich den Abfrageparameter ändere, um eine kleine Datenhistorie zu erfassen.

Jede Hilfe wird sehr geschätzt.

+0

Ja hängt es von Browser zu Browser ab, obwohl Sie versucht haben, Content Security Meta Tag in Ihrer Web-App –

+0

@PrateekRathore Nein habe ich nicht. Kannst du das bitte näher ausführen oder wie kann ich es hinzufügen? –

+0

hinzufügen in gut können Sie mehr hinzufügen und es fruchtbarer machen wie in durch die Umsetzung der wahren Bedeutung von Content Security Policy –

Antwort

0

Eine Arbeit, die ich gefunden habe, ist es, eine Javascript-Datei auf dem Server dynamisch als Ressource in Ihrer Seite enthalten zu generieren. Dies erfordert kein AJAX, welches von CORS blockiert wird und zwischengespeichert werden kann.

+0

Leider ist das nicht möglich, da ich kaum Zugriff auf die Server-API habe. Es wird von einer dritten Partei kontrolliert. –

Verwandte Themen