Có một số diferences tinh tế với các phương pháp để gửi lại một tiêu đề vị trí mới.
Với 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
Với status
và 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
Với cách tiếp cận ban đầu (không chính xác) sử dụng 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
Vì vậy, nó trông giống như redirect
sẽ từ bỏ mọi mã trạng thái trước đó và gửi giá trị mặc định (trừ khi được chỉ định bên trong cuộc gọi phương thức). Điều này có ý nghĩa do việc sử dụng phần mềm trung gian trong Express. Nếu bạn có một số phần mềm trung gian toàn cầu thực hiện kiểm tra trước trên tất cả các yêu cầu (như kiểm tra các tiêu đề chấp nhận chính xác, v.v.), chúng sẽ không biết chuyển hướng yêu cầu. Tuy nhiên phần mềm trung gian xác thực sẽ và do đó nó sẽ biết ghi đè bất kỳ cài đặt trước nào để đặt chúng chính xác.
CẬP NHẬT: Như đã nêu trong các nhận xét bên dưới mặc dù Express có thể gửi mã trạng thái 4XX với tiêu đề Vị trí không có nghĩa là phản hồi có thể chấp nhận được cho ứng dụng khách yêu cầu. Trên thực tế, hầu hết sẽ bỏ qua tiêu đề Vị trí trừ khi mã trạng thái là giá trị 3XX.
Nguồn
2015-04-07 01:45:33
Tôi cũng nhận thấy chuyển hướng nhanh POST tới GET, điều này làm tôi ngạc nhiên – Plato
Chỉ cần lưu ý nhanh: nếu nội dung có thể truy cập có xác thực mã trạng thái phải là 401. Nếu hoàn toàn bị cấm hoặc không xác thực mã trạng thái 403. –
@brockangelo Câu trả lời của Ixe là cách duy nhất tôi biết làm thế nào để làm điều này (bằng tay .set(), sau đó .send()). Nhưng tôi nghĩ câu hỏi lớn hơn là liệu bạn có thực sự muốn gửi 401 nếu bạn định chuyển hướng không. Hãy xem liên kết SO trong bình luận của tôi cho câu trả lời của Jason –