在 "searchfuzzyjson "api中解析accept-language头时出错。

问题描述 投票:0回答:1

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

从测试页面运行搜索 此处 工作。如果你在网络标签中查看这个请求,并将其复制为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

如果你在搜索请求上点击右键,然后点击 "在新标签页打开",它会以400Bad请求失败。如果你把这个请求复制成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

这将失败。我把问题缩小到了accept-language param'en,nl;q=0.9,en-GB;q=0.8',当我在新标签页中打开GET请求时,Chrome似乎把它添加为默认值。用'en-US'替换这个val,使请求再次成功。

我已经在以下设备上重现了这种情况:Ubuntu 18.04.4 LTS,Chrome版本81.0.4044.129(官方构建)(64位)Windows版本10.0.18362 Build 18362,Chrome版本81.0.4044.138(官方构建)(64位),我们也有客户在Edge和Chrome上报告过。

因此,假设 accept-language 的这个默认值是有效的,似乎 azure api 在解析它时出现了一个 bug。

这个问题的变通方法是chrome:/settings?search=language,只设置一种语言。

azure-maps http-accept-language
1个回答
1
投票

我认为问题在于传递了一个无效的语言参数。支持的语言列表可以在这里找到。https:/docs.microsoft.comen-usazureazure-mapssupported-languages。 传递任何其他语言都会导致错误。为了解决这个问题,你可以覆盖accept-language头,或者在请求中添加一个语言参数"&language=en-US"。

© www.soinside.com 2019 - 2024. All rights reserved.