Query/headers 如果启用身份验证,在 Azure 上太大

Query/headers too large on Azure if auth enabled

我有一个 node/express 应用程序在本地运行良好。我已将它上传到 Azure Web App,只要我不启用身份验证,它就可以正常工作。当我启用 AAD 身份验证时,应用程序失败,状态为 500.1011 "Bad Request"。我在 url 中有很多查询参数。如果我充分减少参数的长度,应用程序将再次正常加载。 Azure 中的 query/headers 似乎有一些限制?

我已经尝试了几个小时来解决这个问题,但我想我不得不承认失败。我想也许 this 会修复它,但它似乎不是。

这是我现在的 web.config:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <system.webServer>
        <webSocket enabled="true" />
        <handlers>
            <add name="iisnode" path="server.js" verb="*" modules="iisnode"/>
        </handlers>
        <rewrite>
        <rules>
            <rule name="NodeInspector" patternSyntax="ECMAScript" stopProcessing="true">
                <match url="^server.js\/debug[\/]?" />
            </rule>
            <rule name="DynamicContent">
                <conditions>
                    <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="True"/>
                </conditions>
                <action type="Rewrite" url="server.js"/>
            </rule>
        </rules>
        </rewrite>
        <security>
            <requestFiltering>
                <requestLimits maxQueryString="32768" maxUrl="65536"/>
            </requestFiltering>
        </security>
        <httpErrors existingResponse="PassThrough" />
    </system.webServer>
</configuration>

我想我找到了问题所在。在 November 2018.

中节点的最大 header 大小从 80kb 减少到 8kb

对此有很多讨论here and here

我尝试增加 max-http-header-size,但无法在 Azure 上运行。所以我现在的解决方案是使用旧版本的节点。希望最终能在这些讨论中发布解决方案。

只需在iisnode.yml中添加--max-http-header-size即可,至于在Azure Appservice中将Flag传递给NodeJS的chrome V8的详细信息: