0

我们遇到了一个奇怪的问题,即模糊搜索请求已经开始在某些浏览器中失败。

在此处从测试页面运行搜索有效。如果您在网络选项卡中查看此请求,并将其复制为 CURL,您会得到如下内容:

curl 'https://atlas.microsoft.com/search/fuzzy/json?api-version=1.0&query=New%20York&radius=100000&view=Auto&subscription-key=tTk1JVEaeNvDkxxnxHm9cYaCvqlOq1u-fXTvyXn2XkA' \
  -H 'authority: atlas.microsoft.com' \
  -H 'dnt: 1' \
  -H 'accept-language: en-US' \
  -H 'content-type: application/json; charset=utf-8' \
  -H 'user-agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.129 Safari/537.36' \
  -H 'ms-am-request-origin: ServiceModule' \
  -H 'map-agent: ServiceModule/2.0.5 (Web)' \
  -H 'accept: */*' \
  -H 'origin: https://azuremapscodesamples.azurewebsites.net' \
  -H 'sec-fetch-site: cross-site' \
  -H 'sec-fetch-mode: cors' \
  -H 'sec-fetch-dest: empty' \
  -H 'referer: https://azuremapscodesamples.azurewebsites.net/Services%20Module/Fuzzy%20Search%20using%20Services%20Module.html' \
  --compressed

如果您右键单击搜索请求并单击“在新选项卡中打开”,则会失败并显示 400/Bad Request。如果您将此请求复制为 CURL,它将为您提供如下内容:

curl 'https://atlas.microsoft.com/search/fuzzy/json?api-version=1.0&query=New%20York&radius=100000&view=Auto&subscription-key=tTk1JVEaeNvDkxxnxHm9cYaCvqlOq1u-fXTvyXn2XkA' \
  -H 'authority: atlas.microsoft.com' \
  -H 'cache-control: max-age=0' \
  -H 'dnt: 1' \
  -H 'upgrade-insecure-requests: 1' \
  -H 'user-agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.129 Safari/537.36' \
  -H 'accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9' \
  -H 'sec-fetch-site: none' \
  -H 'sec-fetch-mode: navigate' \
  -H 'sec-fetch-user: ?1' \
  -H 'sec-fetch-dest: document' \
  -H 'accept-language: en,nl;q=0.9,en-GB;q=0.8' \
  --compressed

这将失败。我已将问题缩小到接受语言参数 'en,nl;q=0.9,en-GB;q=0.8' 当我在新选项卡的 GET 请求中打开时 Chrome 似乎已将其添加为默认值. 将此 val 替换为 'en-US' 会使请求再次起作用。

我已在以下位置复制此内容:Ubuntu 18.04.4 LTS、Chrome 版本 81.0.4044.129(官方版本)(64 位)Windows 版本 10.0.18362 版本 18362、Chrome 版本 81.0.4044.138(官方版本)(64 位)和我们也有客户在 Edge 和 Chrome 上报告它。

因此,假设这个接受语言的默认值是有效的,那么在解析它的 azure api 中似乎存在一个错误。

此问题的解决方法是 chrome://settings/?search=language 并仅设置一种语言。

4

1 回答 1

1

我认为问题在于传入的语言参数无效。可以在此处找到支持的语言列表:https : //docs.microsoft.com/en-us/azure/azure-maps/supported-languages除了其中之一将导致错误。要解决此问题,您可以覆盖 accept-language 标头,或将语言参数添加到请求“&language=en-US”。

于 2020-05-18T16:00:35.467 回答