接口用 curl 正常,网页却提示 CORS,可能是浏览器没有允许脚本读取跨来源响应。来源由协议、主机名和端口共同确定;同一主机换了端口,也可能产生跨来源请求。先保留浏览器报错和请求记录,再判断失败发生在哪一步。
打开开发者工具的网络面板,保留日志并复现一次。记下页面来源、接口完整地址、请求方法、状态和时间。查找是否先出现 OPTIONS:这是某些跨来源请求的预检,浏览器用它询问实际方法及请求头是否获准;不是每次请求都有预检。
如果 OPTIONS 被拒绝、跳到登录页,或没有返回匹配的许可,实际业务请求可能尚未发送。没有预检时,业务响应即使返回 200,脚本仍可能因为缺少正确的跨来源许可而读不到内容。
下面仅示范一个带自定义请求头的 GET 预检。把两个域名、路径和请求头换成真实值,不填写密码或 Cookie。Windows PowerShell 执行:
curl.exe -sS --connect-timeout 8 --max-time 15 -X OPTIONS -H "Origin: https://app.example.com" -H "Access-Control-Request-Method: GET" -H "Access-Control-Request-Headers: x-request-id" -D - -o NUL "https://api.example.com/data"
Ubuntu、macOS 使用 curl,并把 NUL 换成 /dev/null。比较响应中的 Access-Control-Allow-Origin、Access-Control-Allow-Methods 和 Access-Control-Allow-Headers。命令能显示响应,但不会代替浏览器执行 CORS 判定;它成功不等于网页已经恢复。
管理员核对反向代理与应用是否正确处理 OPTIONS,并按需要允许明确的页面来源、方法和请求头。需要携带凭据时,还要核对凭据许可及浏览器 Cookie 策略,允许来源不能简单写成通配符。CORS 许可也不能替代接口身份认证。
修复后从原页面重试,确认预检和实际请求都符合预期,脚本也确实读到了内容。FB4 网站测速可辅助比较公开接口的连通性与状态,但不会运行你的网页脚本,无法单独验收 CORS。反馈时保留脱敏后的请求条件;若同时有证书、DNS 或连接错误,应先处理相应故障。
参考:CORS 机制与排错 https://developer.mozilla.org/en-US/docs/Web/HTTP/Guides/CORS https://developer.mozilla.org/en-US/docs/Web/HTTP/Guides/CORS/Errors
Fetch 标准 https://fetch.spec.whatwg.org/#http-cors-protocol
curl 参数 https://curl.se/docs/manpage.html