Azure 应用服务 Java 上缺少 HSTS 标头

问题描述 投票:0回答:1

我有一个 Java 8 Spring Boot 应用程序,其中 嵌入式 Web 服务器部署为 Azure 应用服务。该应用程序可在 Azure 应用服务的标准域 -

<myapp>.azurewebsites.net
下使用。我的应用程序将 HSTS (
Strict-Transport-Security
) 标头添加到其 HTTP 响应中。我通过从应用服务 SSH 发出
curl
命令来验证这一点。从应用程序服务内的 SSH,我安装了curl,当我发出请求时,我可以看到我的
Strict-Transport-Security
标头以及我的应用程序返回的自定义
X-Custom-Header

> curl http://0.0.0.0/test/debug -v 
< HTTP/1.1 200 
< Strict-Transport-Security: max-age=31536000 
< X-Custom-Header: custom-value
< ...other headers...

但是,当我尝试通过

<myapp>.azurewebsites.net
域执行相同操作时,
Strict-Transport-Security
标头丢失:

> curl https://<myapp>.azurewebsites.net/test/debug -v 
< HTTP/1.1 200 
< X-Custom-Header: custom-value
< ...other headers visible but no Strict-Transport-Security... 

通过公共

Strict-Transport-Security
域访问我的应用服务 API 时,如何向响应添加
<myapp>.azurewebsites.net
标头?

应用程序本身设置正确,正如我通过应用服务 SSH 发出

curl
命令所证明的那样,但当通过公共
<myapp>.azurewebsites.net
域访问应用程序时,标头会被删除。

这是我用来调试此问题的 JAX-RS 控制器,它始终添加

Strict-Transport-Security
标头和
X-Custom-Header
以用于调试目的:

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()
    }
}
java azure http-headers azure-appservice hsts
1个回答
0
投票

当我尝试你的代码时,我遇到了同样的问题,这是因为 您正在使用 JAX-RS 注释而不是 Spring MVC 注释。Spring Boot 默认情况下无法识别 JAX-RS。

请参阅此 doc 以更好地了解 Spring MVC 注释。

我已将您的代码修改为以下内容,以正确检索标头。

调试资源.kt

package com.example.demoweb  
import jakarta.servlet.http.HttpServletResponse  
import org.springframework.web.bind.annotation.GetMapping  
import org.springframework.web.bind.annotation.RequestMapping  
import org.springframework.web.bind.annotation.RestController   
@RestController  
@RequestMapping("/test")  
class DebugResource {    
    @GetMapping("/debug")  
    fun debug(response: HttpServletResponse): String {  
        response.addHeader("Strict-Transport-Security", "max-age=31536000")  
        response.addHeader("X-Custom-Header", "custom-value")  
        return "test"  
  }  
}

本地输出: enter image description here

enter image description here

部署后输出:

enter image description here

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.