我收到预检错误405:按文档要求自动完成时,HERE API不允许使用该方法。
此后,我确定Axios正在将我的应用程序API客户端中的default.common身份验证标头添加到HERE API客户端中。 Axios应该将每个客户端的默认设置分开,但是似乎没有……至少不是我拥有的版本。我用每个客户端请求拦截器替换了默认值,并且工作正常。该请求不再触发OPTION预检。没有什么问题比它不支持OPTION方法等这里的API。
失败的原因是因为HERE不支持OPTIONS方法,仅支持GET。所以现在的问题是:当我未设置任何标题时,为什么axios会触发OPTIONS请求?基于XMLHttpRequest()的GET请求不会为相同的URL触发OPTIONS。 axios正在发生某些事情,但我不知道发生什么,而且我似乎无法调查axios正在发送的标头。
我试图找到有关此错误信息,以及HTTP和https。我还没有看到其他人有这个问题,所以我觉得我必须做一个简单的错误。被正确地生成的URL,因为它工作时,直接粘贴到浏览器例如
const hereClient = axios.create({
baseURL: 'https://autocomplete.geocoder.api.here.com/6.2/'
})
async function searchHere (query) {
let searchTerms = query.split(' ').join('+')
let result = await hereClient.get('suggest.json', {
params: {
app_id: '<APPID>',
app_code: '<APPCODE>',
query: searchTerms
}
})
return processHereSearchResults(result.data)
}
GET请求在OPTION预检中失败,并带有405:不允许的方法。但是,如果我生成的URL粘贴到浏览器则返回预期的结果。例如: https://autocomplete.geocoder.api.here.com/6.2/suggest.json?app_id=APPID&app_code=APPCODE&query=8131
返回:
{ “建议”:[{ “标签”: “Česko,奥尔利采河畔布兰迪斯,3123”, “语言”: “CS”, “COUNTRYCODE”: “CZE”, “locationId”:。“N < / p>
http或https的结果相同。
答案 0 :(得分:0)
此后,我确定Axios正在将我的应用程序API客户端中的default.common身份验证标头添加到HERE API客户端中。 Axios应该将每个客户端的默认设置分开,但是似乎没有……至少不是我拥有的版本。我用每个客户端请求拦截器替换了默认的标头设置来设置我的身份验证,它工作正常。该请求不再触发OPTION预检。没有什么问题比它不支持OPTION方法等这里的API。