我正在研究的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
以下是更多信息。
以下是读取标题的代码部分。再次,这在本地工作。
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);
}
...
}
更新2
我刚刚部署了与azure云服务相同的应用程序,效果很好。收到标题,应用程序成功读取它们。使用网络应用的东西不会让这些标题通过。
答案 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>