网页请求模型API被跨域拦截,怎样区分CORS与服务认证错误?
网页请求被跨域拦截时,应分别检查浏览器CORS规则与服务认证,不能把控制台提示一概解释为密钥错误。先查看预检和实际请求,确认服务器是否允许对应来源、方法和请求头。
先从这里排查
网页请求被跨域拦截时,应分别检查浏览器CORS规则与服务认证,不能把控制台提示一概解释为密钥错误。先查看预检和实际请求,确认服务器是否允许对应来源、方法和请求头。浏览器安全机制不应通过关闭校验解决,长期密钥也不应为了直连方便放进公开前端代码。
先区分浏览器拦截和服务错误响应
适用于命令行可调用而网页报跨域、OPTIONS失败,或错误响应没有允许来源头导致看不到正文的情况。记录页面来源与目标地址,保存不含凭证的请求信息。命令行不执行浏览器同源限制,因此其成功不能证明网页CORS设置正确;浏览器拦截也不能证明服务认证已经通过。
检查预检请求来源与允许头
检查预检是否到达目标,核对允许来源、方法及头字段,再看实际请求的服务状态。带凭据请求有更严格的来源要求,不能把通配符当作所有情况下的解决方案。CORS主要控制网页脚本读取响应,不是账号授权系统;允许来源不等于允许所有用户访问业务资源。
在受控后端中处理需要保密的调用
在自有且获授权的服务端配置准确允许范围,按架构需要由受控后端调用模型服务并保护凭证。不要使用浏览器插件关闭安全策略,也不要靠no-cors得到无法读取的响应后宣称修复。认证与权限继续独立校验,修正范围限于当前应用需要,不扩大到任意来源和任意动作。
验证允许来源及拒绝来源的行为
从真实页面来源测试预检与实际请求,确认应用能读取正确结果,同时测试未允许来源仍被拒绝。检查认证失败会得到可诊断且不泄密的错误,密钥没有出现在前端包或网络地址。成功标准是浏览器路径真实可用且限制符合设计,不是控制台暂时没有红字或命令行返回正常。
本文没有更改服务器安全配置或读取任何真实密钥。具体响应头与凭据模式需按浏览器规范及服务支持确认;某些第三方API本来不允许直接网页调用,应遵循其架构。跨域问题与网络、认证可能同时存在,修好其中一项后仍需验证完整路径,不能把CORS当作通用访问权限。
核对来源
以下资料用于核对概念和方法。文中的示例与测试范围分别注明,实际使用时请核对所用工具的版本。