Come si imposta l'intestazione dell'accesso-controllo-origine-origine per la risposta di autenticazione di base HTTP in Apache?

StackOverflow https://stackoverflow.com/questions/7375739

Domanda

Voglio usare XHR per accedere a un sito che utilizza l'autenticazione di base HTTP. Il seguente pezzo lo fa.

http = new XMLHttpRequest();
http.open("get", "http://...", false, username, password);
http.send("");

Il problema è che questo non lavorare da un dominio diverso da quello in cui si trova l'autenticazione. La soluzione è abbastanza semplice: impostare l'intestazione dell'accesso-controllo-origine-origine *. Quindi ho cambiato la mia configurazione Apache in questo:

<Location />
    Header set Access-Control-Allow-Origin "*"

    AuthType Basic
    AuthName "trac"
    AuthUserFile /home/admin/development/pass.htpasswd
    Require valid-user
</Location>

Le risposte da quella pagina sembrano:

HTTP/1.1 401 Authorization Required
Connection: Keep-Alive
Content-Encoding: gzip
Content-Length: 345
Content-Type: text/html; charset=iso-8859-1
Date: Sun, 11 Sep 2011 01:17:55 GMT
Keep-Alive: timeout=15, max=100
Vary: Accept-Encoding
WWW-Authenticate: Basic realm="trac"

Le risposte non hanno l'intestazione dell'accesso-controllo-origine. Questo sembra strano.

Quando uso la stessa direttiva di intestazione per le pagine interne, è impostata l'intestazione.

Perché l'intestazione non era impostata? Come si imposta l'intestazione dell'accesso-controllo-origine-origine per la risposta di autenticazione di base HTTP in Apache?

È stato utile?

Soluzione

La risposta è:

Header always set Access-Control-Allow-Origin "*"

invece di

Header set Access-Control-Allow-Origin "*"

E il motivo è nel Documentazione della direttiva di intestazione:

Header [condition] set|append|merge|add|unset|echo|edit header [value] [replacement] [early|env=[!]variable]

L'argomento della condizione opzionale determina da quale tabella interna delle risposte questa direttiva opererà. Altri componenti del server potrebbero aver memorizzato le loro intestazioni di risposta nella tabella che corrisponde a Onsuccess o alla tabella che corrisponde sempre. "Sempre" In questo contesto si riferisce al fatto che le intestazioni aggiunte verranno inviate durante una risposta sia di successo che non riuscita, ma se la tua azione è una funzione di un'intestazione esistente, dovrai leggere per ulteriori complicazioni.

Potrebbe essere necessario modificare il valore predefinito dell'onsuccess in tali circostanze simili a quelle elencate di seguito. Si noti inoltre che ripetere questa direttiva con entrambe le condizioni ha senso in alcuni scenari perché non è sempre un superset di onsucce rispetto alle intestazioni esistenti:

  • Stai aggiungendo un'intestazione a una risposta non di successo (non 2xx), come un reindirizzamento, nel qual caso solo la tabella corrispondente a sempre viene utilizzata nella risposta finale.
  • Stai modificando o rimuovendo un'intestazione generata da uno script CGI, nel qual caso gli script CGI sono nella tabella corrispondente a sempre e non nella tabella predefinita.
  • Stai modificando o rimuovendo un'intestazione generata da un pezzo del server, ma quell'intestazione non viene trovata dalla condizione di onsucce predefinita.

Nel tuo caso invierai un 401 Risposta invece di una risposta di 200 classica e l'intestazione è impostata solo 200 risposte se non si utilizza il always parola chiave.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top