2014-10-01 10 views
5

Questo problema è menzionato in stackoverflow già una dozzina di volte, ma ho un problema diverso.Chrome che dice No header 'Access-Control-Allow-Origin', ma l'intestazione è lì

Chrome esegue prima una chiamata "OPZIONI" per ottenere le intestazioni. Come puoi vedere, le intestazioni corrette sono lì.

enter image description here

Per qualche ragione, Chrome non si accorge l'intestazione e annulla la richiesta effettiva nello stesso modo che sarebbe se l'intestazione non c'era affatto.

enter image description here

la pagina in realtà rende tre chiamate e curiosamente, uno di loro lavora.

enter image description here

Quindi la domanda è, quando l'intestazione è davvero lì, perché Chrome non la rispetta? Cosa posso fare per eseguire il debug?

Aggiornamento

Ho provato ad aggiungere Access-Control-Allow-Methods così ora la risposta colpo di testa di opzioni call include queste intestazioni di risposta:

Access-Control-Allow-Headers:Origin, X-Requested-With, Content-Type, Accept 
Access-Control-Allow-Methods:POST, GET, OPTIONS 
Access-Control-Allow-Origin:* 

Il risultato è lo stesso.

Impostazione delle intestazioni sul lato server

ho impostato le intestazioni sul lato server a ogni richiesta (in Global.asax.cs Application_BeginRequest)

Response.Headers.Add("Access-Control-Allow-Origin", "*"); 
Response.Headers.Add("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); 
Response.Headers.Add("Access-Control-Allow-Methods", "POST, GET, OPTIONS"); 

Dopo aver esaminato con Fiddler

Ho esaminato la richiesta e la risposta non elaborate e ho trovato qualcosa di sorprendente: l'errore è un semplice errore HTTP 500 dall'appl icazione. Probabilmente perché l'errore HTTP 500 non contiene le intestazioni corrette, Chrome non mostra l'errore restituito ma mostra l'errore relativo all'intestazione.

risposta

Quindi, in conclusione, se Chrome dà dice No 'Access-Control-Allow-Origin' header potrebbe in realtà nascondere un errore HTTP 500. Questo può essere determinato controllando la richiesta e la risposta in Fiddler.

+0

E il codice ... dov'è il codice ?? – Hackerman

+1

Dovrebbe esserci anche un'intestazione 'Access-Control-Allow-Methods'. Non lo vedo nello screenshot. – monsur

+0

@RobertRozas Grazie. Questo problema riguarda il motivo per cui Chrome agisce come fa, quindi cerco di non includere il codice che dovrebbe distogliere l'attenzione dal problema che sto cercando di capire. Ma posso postare le richieste/risposte non elaborate, se necessario? –

risposta

2

Se Chrome dice No 'Access-Control-Allow-Origin' header potrebbe effettivamente coprire un errore HTTP 500. Questo può essere determinato controllando la richiesta e la risposta in Fiddler.

+0

QUESTO. È specificato da qualche parte che un browser può fare qualsiasi cosa su un 500? – enpenax

Problemi correlati