2015-02-23 12 views
6

Sembra che jQuery non invii l'intestazione Authorization quando si invia una richiesta OPTIONS prima di una richiesta POST (o eventualmente di altri tipi). Il server che sto cercando di raggiungere sta restituendo uno stato 401 per la richiesta OPTIONS - come posso forzare jQuery a includere l'intestazione Authorization, anche in questa richiesta iniziale?jQuery.ajax non invia l'intestazione Autorizzazione con richiesta OPZIONI

$.ajax({ 
    type: "POST", 
    url: url, 
    data: postData, 
    beforeSend: function ajaxBeforeSend(jqXHR) { 
     jqXHR.withCredentials = true; 
     jqXHR.setRequestHeader("Authorization", "Basic " + btoa(encodeURIComponent(escape($username.val())) + ":" + encodeURIComponent(escape($password.val())))); 
    }, 
    success: runReportUrlCallback, 
    error: runReportErrorCallback 
}); 

Ho anche provato ad aggiungere username e password alle opzioni Ajax, senza alcun risultato.

+0

possibile duplicato di [Perché la richiesta OPTION preflight di una richiesta CORS autenticata funziona in Chrome ma non in Firefox?] (Http://stackoverflow.com/questions/15734031/why-does-the-preflight-options-request -of-an-authentic-cors-request-work-in) – suish

+0

Sembra che rendere il server che non richiede l'autenticazione sulla richiesta OPTIONS sia l'unico modo per risolverlo. – suish

+0

Non "proprietario" del server. È un servizio web di terze parti. –

risposta

3

Sembra che il server di terze parti sia stato configurato in modo errato senza la richiesta OPTIONS in mente.

W3 afferma che la richiesta di verifica preliminare deve OPZIONI:

Escludere le credenziali dell'utente. sono definiti

credenziali dell'utente:

Le credenziali utente termine ai fini di questa specifica significa cookie, l'autenticazione HTTP, e certificati SSL lato client

Vedi https://www.w3.org/TR/cors/#cross-origin-request-with-preflight-0

Se il server è nel controllo, è sufficiente inserire il gestore delle richieste OPTIONS davanti al controllo dell'autorizzazione.

Se il server NON è sotto il vostro controllo, che sembra essere il caso qui, allora si lamenta l'amministratore del server che spiega di aver sbagliato e spero che lo cambino.

Problemi correlati