我们使用web queries
在Excel中检索数据以进行报告。这些Web查询在Excel 2007,2010,2013和2016中正常运行
但是当在 Mac Excel 2016中使用时,它会失败。
我们使用VBA
执行这些网页查询,并检索Spring REST
界面生成的数据。
我已尝试使用http GET
代替http POST
,并尝试通过用户界面执行网络查询('数据' - >'获取外部数据' - >'运行保存的查询'使用.iqy
档案。)
此外,错误似乎与内容无关(尝试过非常简单的html; <html><body><table><tr><td>col1</td></tr><tr><td>value1</td></tr></table></body></html>
)。
使用Wireshark分析流量时,REST调用的响应是正确的(http 200
具有正确的内容)。
使用“.iqy”文件使用UI导入报告的错误:"cannot locate the internet server or proxy server"
。
使用VBA执行Web查询时出错:"Error 1004 Application-defined or Object-defined error"
。
有没有人知道会导致这种行为的原因是什么?
答案 0 :(得分:0)
找到原因:Spring MVC(REST)设置了一些default headers。其中一个是X-Content-Type-Options: nosniff
。我们生成一些REST响应数据的方式导致未设置Content-Type
标头。
Mac Excel无法确定内容类型(因为X-Content-Type-Options:nosniff选项)。
这可以通过不设置X-Content-Type-Options标头或明确设置Content-Type
标头来解决。
奖励信息:我使用WireMock来模拟REST界面,并且能够逐个删除标题,从而暴露出罪魁祸首。