移动体验 / 方法解读

移动端跨域请求预检失败?检查 Access-Control-Allow-Methods 响应头

移动端跨域请求预检失败时,应检查服务器返回的 Access-Control-Allow-Methods 响应头是否包含无效的 HTTP 方法名称。

阿里云API网关实现跨域资源共享CORS的说明页面截图
主题资料配图,非新闻现场照片 · 配图:api网关如何实现跨域资源共享cors_api 网关(api gateway)-阿里云帮助

确认错误信息与响应头内容

在移动端浏览器控制台查看具体的报错信息,确认提示中提到的无效 token 具体是哪个值。例如,如果报错显示 'invalid token xyz',说明服务器在 Access-Control-Allow-Methods 响应头中包含了 'xyz' 这个不被识别的 HTTP 方法名称。该响应头用于告知客户端服务器支持哪些 HTTP 请求方法,其值通常由逗号分隔的字符串组成,如 GET, POST, HEAD。

使用开发者工具的 Network 面板,找到该跨域请求的响应头列表。重点查看 Access-Control-Allow-Methods 这一项,确认其值是否包含报错中提到的无效 token。如果该值中存在拼写错误、非标准 HTTP 方法名称或客户端无法识别的字符串,就会导致预检请求失败。确保该响应头中的每一个方法名称都是浏览器标准支持的合法 HTTP 方法。

排查服务器配置中的拼写或参数错误

根据报错提示,定位到服务器配置文件中设置 Access-Control-Allow-Methods 的位置。检查配置代码中是否误写了方法名称,例如将 'GET' 写成了 'GTE',或者添加了自定义的无效方法名。服务器配置错误是导致该问题的常见原因,必须修改配置以移除无效的方法名称。

修改服务器配置后,需要重新部署或重启服务。修改完成后,再次发起跨域请求,并使用开发者工具验证 Access-Control-Allow-Methods 响应头是否已更新为正确的值。确保响应头中只包含浏览器标准支持的 HTTP 方法,如 GET、POST、PUT、DELETE、OPTIONS 等,避免包含任何非标准或拼写错误的字符串。

验证客户端与库的兼容性

如果服务器配置已确认无误,但仍出现该错误,需要检查移动端使用的客户端代码或 HTTP 库是否过时。某些旧版本的客户端库可能无法识别最新的 HTTP 方法名称或对响应头的解析存在差异。确保使用的浏览器版本和 HTTP 库是最新版本,以获得对标准 HTTP 方法的完整支持。

在移动端设备上测试时,可以尝试使用不同的浏览器或更新 HTTP 库的版本。如果问题依旧,说明服务器端可能仍在发送旧的响应头,或者存在缓存问题。清除浏览器缓存并重新测试,确保客户端能够正确解析 Access-Control-Allow-Methods 响应头中的每一个方法名称。

复现检查步骤与结果判断

复现检查步骤:首先在移动端浏览器控制台查看报错信息,记录下提示的无效 token;然后打开 Network 面板,找到对应的响应头 Access-Control-Allow-Methods,查看其值;最后检查服务器配置文件,确认该值中是否包含拼写错误或无效的方法名称。

结果判断:如果 Access-Control-Allow-Methods 响应头中不包含任何无效 token,且所有方法名称均为浏览器标准支持的 HTTP 方法,则配置正确;如果响应头中包含报错提示的无效 token,或者存在拼写错误、非标准方法名,则配置错误,需要修改服务器配置以移除这些无效值。

资料与延伸阅读

你可以通过以下原始资料核对文中概念,并继续深入阅读。

  1. Reason: invalid token 'xyz' in CORS header 'Access-Control-Allow-Methods' - HTTP | MDN ↗
  2. 配图:api网关如何实现跨域资源共享cors_api 网关(api gateway)-阿里云帮助 ↗
← 更多移动体验文章返回顶部 ↑