Tôi đang chạy một máy chủ trên nodejs với express. Tôi dường như không thể thoát khỏi tiêu đề:
X-Powered-By:Express
Tôi đã tự hỏi nếu có cách nào để thoát khỏi tiêu đề này hoặc tôi phải sống với nó?
Tôi đang chạy một máy chủ trên nodejs với express. Tôi dường như không thể thoát khỏi tiêu đề:
X-Powered-By:Express
Tôi đã tự hỏi nếu có cách nào để thoát khỏi tiêu đề này hoặc tôi phải sống với nó?
Câu trả lời:
Trong Express> = 3.0.0rc5:
app.disable('x-powered-by');
Đây là một phần mềm trung gian đơn giản loại bỏ tiêu đề trong các phiên bản trước của Express:
app.use(function (req, res, next) {
res.removeHeader("x-powered-by");
next();
});
app.use(app.router);
nó hoạt động.
4.15.2
. @harrisunderwork giải pháp sử dụng app.set()
đã làm thủ thuật.
Chỉ cần cõng theo câu trả lời của rjack, bạn cũng có thể (tùy chọn) chỉ cần thay đổi (đặt) tiêu đề X-Powered-by thành một cái gì đó thú vị hơn / tùy chỉnh như thế này:
app.use(function (req, res, next) {
res.header("X-powered-by", "Blood, sweat, and tears")
next()
})
Từ nguồn ( http://expressjs.com/en/api.html#app.set ). Trong Express 4.X chỉ cần đặt ứng dụng bằng dòng bên dưới;
app.set('x-powered-by', false) // hide x-powered-by header!
Đây là một phần mềm trung gian tiện dụng mà bạn có thể thả vào để trao đổi X-Powered-By:
function customHeaders( req, res, next ){
// Switch off the default 'X-Powered-By: Express' header
app.disable( 'x-powered-by' );
// OR set your own header here
res.setHeader( 'X-Powered-By', 'Awesome App v0.0.1' );
// .. other headers here
next()
}
app.use( customHeaders );
// ... now your code goes here
Đặt X-Powered bởi trong trường hợp này sẽ ghi đè 'Express' mặc định, do đó bạn không cần phải tắt và đặt giá trị mới.
Để ẩn, X-Powered By bạn có thể sử dụng mũ bảo hiểm Thư viện Node .js .
Liên kết cho đó là mũ bảo hiểm
var helmet = require('helmet');
app.use(helmet.hidePoweredBy());
Đôi khi câu trả lời ở đầu không hoạt động. Đây là trường hợp của tôi. Tôi có Express 4.17.1 và không ai trả lời không hoạt động. Vì vậy, tôi đã phát minh ra giải pháp của riêng mình:
let app = express();
app.use((req, res, next) => {
const send = res.send;
res.send = (data) => {
res.removeHeader('X-Powered-By');
return send.call(res, data);
};
next();
});
Không ai trong số các công nhân giải pháp tiêu chuẩn cho tôi. Sau nhiều lần tìm kiếm, tôi phát hiện ra rằng chúng tôi đã sử dụng một tệp tuyến đường nơi một thể hiện mới được bắt đầu, sau đó được thêm vào đầu tiên bằng cách sử dụng app.use. Chỉ dành cho các tuyến đường trong thể hiện mới này, tiêu đề X-Powered-By đã có mặt.
Quan điểm đơn giản về vấn đề:
const app = express();
app.disable("x-powered-by");
app.get("/ping", (req, res) => res.send("Pong")); // <-- no X-Powered-By header
const moreRoutes = express();
moreRoutes.get("/ping", (req, res) => res.send("Pong")); // <-- X-Powered-By header still present
app.use("/api/v2", moreRoutes);
Giải pháp đơn giản là tạo một express.Router mới thay vì toàn bộ.
const moreRoutes = express.Router();
Đọc mã https://github.com/visionmedia/express/blob/master/lib/http.js#L72 khiến tôi nghĩ rằng bạn sẽ phải sống với nó vì nó dường như không có điều kiện.
Nếu bạn có nginx / apache frontend, bạn vẫn có thể xóa tiêu đề với nó (với mod_headers cho apache và headers-more cho nginx)
removeHeader sẽ chỉ hoạt động trong phần mềm trung gian tuyến đường, ví dụ về coffeescript
fix_headers = (req, res, next) ->
res.removeHeader 'X-Powered-By'
next()
app.get '/posts', fix_headers, (req, res, next) ->
...
Không cái nào trong số này hoạt động với tôi, ngoại trừ cái này (bạn cần thêm một tham số khác):
app.use(helmet.hidePoweredBy({ setTo: 'guesswhat' }))
Tôi đang sử dụng Express ^ 4.17