Angular2 - 如何将 HTTP 标头添加到我的应用发送到浏览器的响应中?



我正在制作一个Angular2应用程序的原型。该应用程序应该在某个公司中间件下运行,该中间件期望从 angular2 应用程序获得的响应中有多个链接标头。 不幸的是,我一直无法弄清楚如何将标头添加到 Angular 提供的开箱即用的响应中。

为了澄清我的意思 - 当我直接向我的 Angular 应用程序发送 GET 请求时,它会发回浏览器可以渲染到 SPA 中的文本/HTML 响应。我想在此响应中添加标题,但不知道如何添加。我发现的最接近的是这里的讨论:Angular2 - 为每个请求设置标头

这听起来像是重复的,但是在查看了类似的问题之后,我发现了如何将标头添加到我使用来自 HttpModule 的 HTTP 对象显式生成的响应中,但没有了解如何将标头附加到 Angular 开箱即用的响应。我很想使用像 HTTP 拦截器这样的东西,它只是将标头附加到我的应用程序发出的每个响应上,但看起来 Angular2 在 4.1 版之前不会有拦截器。

编辑:我尝试过的事情:

  • 在我的(主)AppModule 中添加 Http 响应选项的提供程序,用于向响应添加标头
    • 这会将标头添加到我的应用从 HttpModule 接收的 http 请求接收的所有响应中,但不会将标头添加到我的应用本身发送到外部服务的响应中。

编辑 2:我误解了我的 Angular 应用程序在哪里结束以及托管它的服务器从哪里开始。像这样的标头可以添加到服务器中 - 对于我的简单示例,我需要配置 webpack-dev-server。请参阅下面接受的答案。

WebStarter Pack 使用 webpack-dev-server 作为开发托管平台/Web 服务器来完成您的工作,但它最终不是您最终 Angular 应用程序的一部分。 您最终将从其他一些强化的Web服务器软件(如Apache,IIS等)提供Angular应用程序。

出于开发目的,您应该能够配置 webpack-dev-server 以添加自定义标头,方法是通过设置headers选项来修改您的webpack.config.js

devServer.headers

向所有请求添加标头:

headers: {
"X-Custom-Foo": "bar"
}

例如:

webpack.config.js

...
devServer: {
...
headers: {
"X-Custom-Foo": "bar"
}
...
}
...

尽管要在 Angular 应用程序初始化后实际读取 Angular 应用程序中的"初始加载"标头(如果这是您要做的),您可能需要将您的值添加为 [non-httpOnly] cookie,然后在ngInit()读取它们。

来源:开发服务器文档 - 标头

我不知道 angular2-webpack-starter,但我想它只是一个命令行工具,可以轻松开发您的 Angular 应用程序。所以它只为你提供JavaScript,HTML和资产。这不是应用程序本身。Angular 应用程序在浏览器中运行,并充当后端的客户端。因此,您需要另一台服务器为您的后端应用程序提供服务,并且您的所有 XHR 调用都将转到此后端。当你部署你的应用程序时,它可能不会在angular2-webpack-starter中运行,而是在一些更高级的HTTP服务器中运行,如Apache HTTPD或nginx。

然后你需要创建一个自定义的Http服务(扩展angular自己的Http服务)或XHRBackend。它有权访问请求和响应对象,并可以在那里添加额外的标头。

最新更新