【发布时间】:2020-05-15 05:50:50
【问题描述】:
我正在开发一个 Next.js 应用程序,我想向 所有 页面添加一个自定义 HTTP 响应标头(我不需要它是可配置的 per em> 页)。
现在我想知道如何做到这一点, 不必设置自定义服务器。这甚至可能吗?如果有,怎么做?
【问题讨论】:
标签: javascript http-headers next.js
我正在开发一个 Next.js 应用程序,我想向 所有 页面添加一个自定义 HTTP 响应标头(我不需要它是可配置的 per em> 页)。
现在我想知道如何做到这一点, 不必设置自定义服务器。这甚至可能吗?如果有,怎么做?
【问题讨论】:
标签: javascript http-headers next.js
对于 Next.js 版本 9.5 及之后的版本,您可以在 next.config.js 文件中定义自定义标头。
以下配置会将自定义标头应用于所有静态页面和服务器渲染页面。
module.exports = {
async headers() {
return [
{
source: '/:path*{/}?',
headers: [
{
key: 'x-custom-header',
value: 'my custom header value for all pages',
},
],
},
]
},
}
目前匹配所有页面有点不直观。如上例所示,它需要语法'/:path*{/}?'。目前在GitHub Issue #14930 中跟踪。
【讨论】:
如果没有权衡,这可能是不可能的。 Next.js 具有自动静态优化功能,因此可以静态导出的页面将导出为普通的.html 文件。并且.html 文件不需要在服务器上执行代码,因此没有地方添加自定义 HTTP 标头。
或者,您可以在 getServerSideProps in _app.js 中为每个响应添加自定义 HTTP 标头:
export async function getServerSideProps(context) {
// set HTTP header
context.res.setHeader('Content-Type', 'application/json')
return {
props: {}, // will be passed to the page component as props
}
}
但是拥有getServerSideProps 会禁用静态优化,因为所有页面都只会在服务器端呈现。
【讨论】: