【问题标题】:Cant disable X-Powered-By: Express无法禁用 X-Powered-By: Express
【发布时间】:2019-06-01 17:57:30
【问题描述】:

我试过用这个,但没用:app.disable("x-powered-by"); 我读过这样的帖子:

how to remove X-Powered-By in ExpressJS

Can't get rid of header X-Powered-By:Express

我使用 "express": "^4.16.4" 作为后端。在前端我使用 "react": "^16.7.0" 单页应用。

更新

express.js 在端口 5000 react.js 在 3000 端口

当我尝试点击这个网址时,http://localhost:5000/api/product x-powered-by :express 不见了。

在我的反应应用程序中,当我尝试点击 API http://localhost:5000/api/product 时,它会再次显示 x-powered-by:express

每次使用 API http://localhost:5000/api/product 这意味着 node.js/express 服务器我得到了x-powered-by : express

但是当我尝试console.log(app); 时,我得到了这个:

          settings:
[0]       { 'x-powered-by': false,
[0]         etag: 'weak',
[0]         'etag fn': [Function: generateETag],
[0]         env: 'development',
[0]         'query parser': 'extended',
[0]         'query parser fn': [Function: parseExtendedQueryString],
[0]         'subdomain offset': 2,
[0]         'trust proxy': false,
[0]         'trust proxy fn': [Function: trustNone],
[0]         view: [Function: View],
[0]         views: 'D:\\WEBSITE\\hammerstout_nodejs_client\\views',
[0]         'jsonp callback name': 'callback' } }, 

'x-powered-by': false, 这应该可行吗?

代码

import express from 'express';
import bodyParser from 'body-parser';
// import passport from 'passport';
import connection from './config/conn';
import { CategoryRoutes,ProductRoutes } from './modules';
import session  from 'express-session';
const app = express();
app.disable("x-powered-by");
console.log(app);
app.use(session({
    secret: 'keyboard cat',
    resave: false,
    saveUninitialized: true,
    cookie: { secure: true }
}))

app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
// app.use(passport.initialize());

app.use('/api/', [CategoryRoutes, ProductRoutes]);


const port = process.env.PORT || 5000;
app.listen(port, (err) => {
    if(err){
        console.log(err);
    }else{
        console.log(`Server running on port ! ${port}`);
    }

});

【问题讨论】:

  • 我在 v4.16.* 上遇到了同样的问题,但 app.disable("x-powered-by"); 现在似乎在 v4.17.1 中再次正常工作。
  • 如果你认为你成功了,那不是因为 app.disable("x-powered-by");突然在某些版本的 Express 中工作。这是因为您正在查看您的应用程序没有代理。例如,如果您使用 React 及其代理来传递 API 流量,即使您在 Express 服务器上禁用了该代理,该代理也会添加标头。

标签: javascript node.js reactjs express


【解决方案1】:

我的 Angular 应用也有同样的效果。我正在使用角度代理(最终是 webpack-dev-server)来访问我的服务器(避免 CORS 问题)。

当我使用邮递员或浏览器访问服务器(端口 3000)上的 REST-API 时,响应不包含“x-powered-by”标头。 使用代理使用我的 Angular 应用程序(在端口 4200 上)访问同一服务器会显示标题。

我的发现是:webpack-dev-server 使用 express 作为基础;所以我假设“错误”标头来自代理服务器,而不是来自端口 3000 上的服务器。

【讨论】:

  • 我认为你是正确的。这就是人们在禁用它后仍然看到标题的原因。
【解决方案2】:

app.disable("x-powered-by"); 是在 express 4.16.4 中禁用自定义标头的正确方法。这是一个使用 express 4.16.4 和节点 10.14.2 的工作示例:

const express = require('express');
const app = express();

app.disable("x-powered-by");
app.get('/', function(req, res) {
  res.status(200);
  res.send("hello\n\n");
  res.end();
});
app.listen(9876, function() {
  console.log('ready');
});

从命令行运行它,然后调用 curl -i http://localhost:9876/ 会产生以下输出:

HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 7
ETag: W/"7-RYgBn9PSVn8wOBXbat/kibLuX5I"
Date: Mon, 07 Jan 2019 03:24:09 GMT
Connection: keep-alive

hello

【讨论】:

  • 这可能是两者之间的代理。检查其他答案
猜你喜欢
  • 2023-02-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-09
  • 2012-01-08
  • 2017-06-23
  • 2021-09-27
  • 1970-01-01
  • 2013-12-28
相关资源
最近更新 更多