Azure网站删除自定义标题

时间:2015-08-05 17:05:13

标签: azure azure-web-sites

我正在研究的Azure网站检查传入请求的自定义标头,以决定在内部如何处理请求。网站服务器使用客户标题发送/接收请求:

X-HEADER-1: ...
X-HEADER-2: ...

以及其他标准和非标准标题。

我通过检查FREB日志并查看GENERAL_REQUEST_HEADERS来验证了这一点,它正确地包含了我的自定义标题。

当应用程序收到请求时,那些自定义标头不存在。我显式检查其中一个然后抛出并转储错误消息中的所有可用标头。

我已经读过,应用程序请求路由模块可以删除这些标头。我尝试将其添加到网站的web.config中但仍然不起作用:

<system.webServer>
    <rewrite>
        <allowedServerVariables>
            <add name="HTTP_X_HEADER_1" />
            <add name="HTTP_X_HEADER_2" />
        </allowedServerVariables>
    </rewrite>
</system.webServer>

我知道如何将我的标题列入白名单以让ARR / Azure让它们通过吗?

更新1

以下是更多信息。

  1. 这在我的开发箱上本地工作。我在IIS中设置了站点并将其指向项目文件夹,并且标题正在按预期进行和处理。
  2. 这是一个ASP.NET MVC网站。
  3. 以下是读取标题的代码部分。再次,这在本地工作。

    public class BaseController:Controller {     public AppControllerBase(...)     {     }

    protected override void Initialize(RequestContext requestContext)
    {
        var header1Value = requestContext.HttpContext.Request.Headers["X-HEADER-1"];
        if (string.IsNullOrEmpty(header1Value))
        {
            var stringBuilder = new StringBuilder();
            // append all headers to stringBuilder
            var errorMessage = string.Format("SiteId header is not set. Headers: {0}", stringBuilder);
            throw new HttpRequestException(errorMessage);
        }
    
        base.Initialize(requestContext);
    }
    
    ...
    

    }

  4. 更新2

    我刚刚部署了与azure云服务相同的应用程序,效果很好。收到标题,应用程序成功读取它们。使用网络应用的东西不会让这些标题通过。

2 个答案:

答案 0 :(得分:0)

对我有用的答案是在评论中。归功于@Tarek Ayna。

将X-LiveUpgrade设置为0时会传输自定义标头。 例如:

<httpProtocol>
  <customHeaders>
    <add name="X-LiveUpgrade" value="0" />**
    <!-- Prevent iframes -->
    <add name="X-Frame-Options" value="SAMEORIGIN" />
    <add name="X-XSS-Protection" value="1" />
  </customHeaders>
</httpProtocol>

答案 1 :(得分:-3)

如果您的服务是无状态的,那么一种可能性是禁用ARR ......为此:

(在web.config内)

<system.webServer>
   <httpProtocol>       
      <customHeaders>         
         <add name="Arr-Disable-Session-Affinity" value="True" />
      </customHeaders>     
   </httpProtocol>
</system.webServer>