You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure App Service部署的Java应用公网访问HSTS头丢失求助

问题

我有一个部署为Azure App Service的Java 8 Spring Boot应用(内置Web服务器),可通过Azure App Service标准域名<myapp>.azurewebsites.net访问。应用会在HTTP响应中添加HSTS(Strict-Transport-Security)头,通过App Service SSH执行curl命令验证:访问http://0.0.0.0/test/debug可看到Strict-Transport-Security头及自定义X-Custom-Header头。但通过<myapp>.azurewebsites.net公网域名访问时,Strict-Transport-Security头丢失,仅能看到X-Custom-Header等其他头。现咨询:如何让通过公网<myapp>.azurewebsites.net域名访问App Service API时,响应中包含Strict-Transport-Security头?

附调试用JAX-RS控制器代码:

import javax.ws.rs.*
import javax.ws.rs.core.MediaType
import javax.ws.rs.core.Response


@Path("/test")
class DebugResource {
    @GET
    @Path("/debug")
    @Produces(MediaType.APPLICATION_JSON)
    fun debug(): Response {
        return Response.ok("test")
            .header("Strict-Transport-Security", "max-age=31536000")
            .header("X-Custom-Header", "custom-value")
            .build()
    }
}

解决方案

核心原因

Azure App Service的前端负载均衡器(ARR)会过滤HTTP请求返回的Strict-Transport-Security头,仅保留HTTPS请求返回的该头并转发给客户端。公网访问时如果走HTTP协议,头会被直接丢弃;即使走HTTPS,也可能需要额外配置确保头不被拦截。

具体解决方法

  • 开启强制HTTPS:在Azure门户进入你的App Service,依次点击「设置」→「TLS/SSL设置」,开启「强制HTTPS」选项,确保所有公网请求都通过HTTPS访问。
  • 在App Service层面配置HSTS头:直接通过平台配置添加头,绕过应用代码的限制。操作路径:Azure门户→你的App Service→「设置」→「配置」→「通用设置」,在「自定义头」区域添加键为Strict-Transport-Security,值为max-age=31536000; includeSubDomains(可根据需求调整参数)。
  • 验证生效情况:配置完成后,执行curl -I https://<myapp>.azurewebsites.net/test/debug命令,检查响应头中是否存在Strict-Transport-Security。

代码层面补充调整(可选)

如果希望通过应用代码返回HSTS头,需做以下配置:

  1. 让Spring Boot识别前端的HTTPS协议:在application.properties中添加server.tomcat.remoteip.protocol-header=x-forwarded-proto,因为App Service前端会处理SSL,应用内部实际接收的是HTTP请求。
  2. 仅在HTTPS请求时添加HSTS头:修改控制器代码,判断请求协议后再添加头,避免HTTP请求返回的头被ARR过滤。

内容的提问来源于stack exchange,提问作者Rames

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 23:29:59