这是一个关于 Web 服务器如何处理 XML 文件请求的问题,具体取决于文件是否带有“.xml”后缀。盖茨比. 在本地主机上开发。
我有一个由 gatsby 提供的 xml 文件/资源(即使用gatsby develop
或gatsby serve
)
如果我将文件命名为类似的名字my-xml-file.xml
,然后通过浏览器 (Chrome) 导航到该文件http://localhost:8000/my-xml-file.xml
,那么一切都很好。Chrome 会在浏览器中加载/显示它。
但是,如果我将文件重命名为my-xml-file
,即从文件名中删除“.xml”后缀,那么当我尝试通过 浏览器 (Chrome) 导航到它时,http://localhost:8000/my-xml-file
Chrome 不会加载/显示它。相反,在这种情况下,Chrome 会打开一个另存为对话框窗口。
知道这里发生什么事了吗?
这让我感到困惑的原因是,如果我访问网络上其他我知道是 xml 文件的位置,并且这些文件没有以“.xml”为后缀,那么 Chrome 会很乐意在浏览器中加载/显示这些文件。
例如:
Chrome 直接在浏览器中加载/显示这些 URL
为什么当我提供的 xml 文件文件名中不带 .xml 后缀时的行为与其他网站提供的行为不同(如上述示例)?
我迄今已尝试过一些方法来解决这个问题。
使用 /my-xml-file.xml 在本地提供文件,在 Chrome 中打开
- 结果:Chrome 在浏览器窗口中加载/显示文件
使用 /my-xml-file 在本地提供文件,并在 Chrome 中打开
- 结果:Chrome 打开另存为对话框
重命名文件并作为/my-xml-file.rss,在 Chrome 中打开
- 结果:Chrome 在浏览器窗口中加载/显示文件
使用 /my-xml-file.xml 在本地提供文件,并在 Edge 中打开
- 结果:Edge 在浏览器窗口中加载/显示文件
使用 /my-xml-file 在本地提供文件,并在 Edge 中打开
- 结果:Edge 在浏览器窗口中加载/显示文件
在 StackOverflow 上搜索了类似的问题。找到了以下内容(但似乎没有一个与此问题特别匹配
- https://stackoverflow.com/questions/14952514/how-to-force-open-links-in-chrome-not-download-them
- https://stackoverflow.com/questions/11026466/open-with-chrome-instead-of-download-it
- https://stackoverflow.com/questions/45069386/make-a-file-open-in-browser-instead-of-downloading-it-using-chrome-firebox
- https://stackoverflow.com/questions/28006188/browsers-try-to-download-html-file-instead-of-opening
- https://support.google.com/chrome/thread/2263322?hl=en
- 检查了我本地示例的响应标头,并将其与上面的其他示例进行了比较。有些东西引起了我的注意……响应中的值
Content-type
不同……
答案1
我认为根据对响应头的调查我找到了答案。感谢您的确认大卫·波斯蒂尔
应根据 xml 资源适当设置 content-type 的值。
在我的本地主机上,名称中没有“.xml”后缀的文件被作为 application/octet-stream 提供。
它可能应该以类似 application/rss+xml; charset=utf-8 或可能是 application/xml 的形式提供。
还没有机会确认这一点,确认后我会报告。