Ci sono alcuni diferences sottili con i metodi per l'invio di nuovo un nuovo header posizione.
Con redirect
:
app.get('/foobar', function (req, res) {
res.redirect(401, '/foo');
});
// Responds with
HTTP/1.1 401 Unauthorized
X-Powered-By: Express
Location: /foo
Vary: Accept
Content-Type: text/plain; charset=utf-8
Content-Length: 33
Date: Tue, 07 Apr 2015 01:25:17 GMT
Connection: keep-alive
Unauthorized. Redirecting to /foo
Con status
e location
:
app.get('/foobar', function (req, res) {
res.status(401).location('/foo').end();
});
// Responds with
HTTP/1.1 401 Unauthorized
X-Powered-By: Express
Location: /foo
Date: Tue, 07 Apr 2015 01:30:45 GMT
Connection: keep-alive
Transfer-Encoding: chunked
Con l'approccio originale (non corretta) utilizzando redirect
:
app.get('/foobar', function (req, res) {
res.status(401).redirect('/foo')();
});
// Responds with
HTTP/1.1 302 Moved Temporarily
X-Powered-By: Express
Location: /foo
Vary: Accept
Content-Type: text/plain; charset=utf-8
Content-Length: 38
Date: Tue, 07 Apr 2015 01:26:38 GMT
Connection: keep-alive
Moved Temporarily. Redirecting to /foo
Quindi sembra che redirect
abbandonerà eventuali codici di stato precedenti e invierà il valore predefinito (se non specificato nella chiamata al metodo). Questo ha senso a causa dell'uso del middleware all'interno di Express. Se avessi alcuni middleware globali che eseguono i pre-controlli su tutte le richieste (come il controllo delle intestazioni di accettazione corrette, ecc.) Non saprebbero reindirizzare una richiesta. Tuttavia, il middleware di autenticazione avrebbe e quindi avrebbe ignorato eventuali impostazioni precedenti per impostarle correttamente.
AGGIORNAMENTO: Come indicato nei commenti seguenti, anche se Express può inviare un codice di stato 4XX con un'intestazione di posizione non significa che sia una risposta accettabile per un client di richiesta da comprendere in base alle specifiche. In effetti la maggior parte ignorerà l'intestazione Location a meno che il codice di stato non sia un valore 3XX.
fonte
2015-04-07 01:45:33
Ho anche notato il reindirizzamento espresso POST to GET, che mi ha sorpreso – Plato
Solo una breve nota: se l'asset può accedere con autenticazione il codice di stato dovrebbe essere 401. Se è completamente vietato con o senza autenticazione il codice di stato dovrebbe be 403. –
@brockangelo La risposta di Ixe è l'unico modo in cui so come farlo (manualmente .set(), poi .send()). Ma penso che la domanda più grande sia se vuoi veramente mandare un 401 se stai pianificando un reindirizzamento. Dai un'occhiata al link SO nel mio commento alla risposta di Jason –