我按照以下方法创建了一个 Azure 静态网站微软的教程一切正常,只是 Azure 不返回404.html
HTTP 404 请求的页面。
我的静态网站设置:
当我导航到不存在的页面时,Azure 返回以下标头:
HTTP/1.1 404 The requested content does not exist.
Content-Length: 1214
Content-Type: text/html
Server: Windows-Azure-Web/1.0 Microsoft-HTTPAPI/2.0
x-ms-error-code: WebContentNotFound
x-ms-request-id: 2680e62d-a01e-002a-7d48-de2087000000
x-ms-version: 2018-03-28
Date: Sat, 08 Feb 2020 06:25:27 GMT
这些标头是正确的。但浏览器中显示的内容如下:
404.html
通过直接导航到该页面,我已经验证了我的页面运行正常:
如果我使用“存储资源管理器”,我还可以看到我的404.html
文件位于$web
:
但是 Azure 不会返回 HTTP 404 错误的页面。
我尝试过的事情:
- 不同的浏览器(Firefox 和 Chrome)。得到相同的结果。
- 清空浏览器缓存。
- 重新上传404.html页面。
- 在线搜索有同样问题的人(没有找到)。
- 根据网上的几个教程验证了我的静态网站设置。看来我的设置是正确的。
更新:根据 Biren 的建议,我将$web
容器设置为“容器”访问级别。重新上传文件后,问题仍然存在。但现在浏览器中的文本看起来不同了:
这些是针对不在 blob 中的文件返回的 HTTP 标头(与之前相比没有变化,据我所知仍然是正确的 404):
HTTP/1.1 404 The requested content does not exist.
Content-Length: 966
Content-Type: text/html
Server: Windows-Azure-Web/1.0 Microsoft-HTTPAPI/2.0
x-ms-error-code: WebContentNotFound
x-ms-request-id: 6bfc762c-b01e-0026-1113-dfb78f000000
x-ms-version: 2018-03-28
Date: Sun, 09 Feb 2020 06:38:03 GMT
答案1
我今天自己解决了这个问题。我用来上传网站的软件默认会使用 Gzip 压缩每个 HTML 文件。这是相当标准和良好的行为。不幸的是,Azure Blob Storage 404 页面不要支持Gzip编码。
虽然有针对 404 页面 Gzip 编码的反馈请求,但尚未记录此限制这里。
因此解决方案很简单:上传静态网站时,对除 之外的所有 HTML 页面进行 Gzip 压缩404.html
。我这样做之后,404 页面上的奇怪文本就消失了,现在一切都正常了。