Istnieją pewne subtelne diferences z metodami odesłanie nowy nagłówek lokalizacji.
Z 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
Z status
i 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
z oryginalnym (błędnej) podejście z użyciem 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
Tak wygląda redirect
zrezygnuje z poprzednich kodów statusu i wyśle wartość domyślną (chyba, że określono to w wywołaniu metody). Ma to sens z powodu korzystania z oprogramowania pośredniego w Express. Jeśli jakiś globalny program pośredniczący wykonałby wstępne testy wszystkich żądań (takich jak sprawdzanie poprawnych nagłówków akceptacji itp.), Nie wiedziałby, aby przekierować żądanie. Jednak oprogramowanie pośredniczące do uwierzytelniania byłoby w stanie zastąpić poprzednie ustawienia, aby je poprawnie ustawić.
AKTUALIZACJA: Jak stwierdzono w poniższych komentarzach, nawet jeśli Express może wysłać kod statusu 4XX z nagłówkiem Lokalizacja, nie oznacza to, że jest to akceptowalna odpowiedź, aby klient żądania mógł zrozumieć zgodnie ze specyfikacją. W rzeczywistości większość zignoruje nagłówek Location, chyba że kod stanu ma wartość 3XX.
Zauważyłem również przekierowania ekspresowe POST do GET, co mnie zaskoczyło. – Plato
Krótka uwaga: jeśli do zasobu można uzyskać dostęp za pomocą uwierzytelnienia, kod statusu powinien wynosić 401. Jeśli jest całkowicie zabronione z uwierzytelnieniem lub bez niego, kod statusu powinien be 403. –
@brockangelo Odpowiedź Ixe jest jedynym sposobem, w jaki wiem, jak to zrobić (ręcznie .set(), następnie .send()). Ale myślę, że większe pytanie brzmi: czy naprawdę chcesz wysłać 401, jeśli planujesz przekierowanie. Spójrz na link SO w moim komentarzu do odpowiedzi Jasona –