You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google Chrome 65 CORS问题:AngularJS 1.6.9项目POST/PUT请求失效求助

针对AngularJS 1.6.9在Chrome 65+下POST/PUT请求失效的解决方案

我之前在维护老项目时刚好碰到过几乎一模一样的问题,结合你的场景,大概率是Chrome 65版本开始对CORS规则、请求头处理的严格执行导致的,给你几个具体的排查和解决方向:

1. 优先检查CORS预检请求(OPTIONS)的响应

Chrome 65对跨域预检请求的要求大幅提升,只要你的POST/PUT请求带了自定义头、或者Content-Type不是application/x-www-form-urlencoded/multipart/form-data/text/plain这三类,浏览器就会先发送OPTIONS请求验证权限:

  • 打开Chrome DevTools的Network面板,筛选OPTIONS请求,查看它的响应状态码(必须是200)和响应头:
    • 必须包含Access-Control-Allow-Origin(匹配你的前端域名)
    • 必须包含Access-Control-Allow-Methods,且里面要明确列出POST、PUT
    • 如果你的请求带了自定义头(比如Authorization),Access-Control-Allow-Headers里必须包含这个头
  • 如果OPTIONS请求失败,后续的POST/PUT会直接被浏览器拦截,这是最常见的原因。

2. 修复AngularJS $http的请求序列化问题

AngularJS 1.6.x默认给POST/PUT请求设置的Content-Type是application/json,但部分服务器在Chrome 65后对JSON格式的解析逻辑出现兼容性问题,你可以尝试强制切换为表单编码格式:

单个请求修改

$http.put('/api/records/' + recordId, $.param(updatedData), {
  headers: {
    'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8'
  }
})
.then(function(res) {
  // 处理成功逻辑
})
.catch(function(err) {
  console.log('PUT请求错误详情:', err);
});

全局配置修改(所有请求生效)

angular.module('yourAppName')
.config(['$httpProvider', function($httpProvider) {
  // 覆盖默认POST/PUT的Content-Type
  $httpProvider.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=utf-8';
  $httpProvider.defaults.headers.put['Content-Type'] = 'application/x-www-form-urlencoded;charset=utf-8';
  
  // 添加数据序列化器,把JSON对象转成表单格式
  $httpProvider.defaults.transformRequest = [function(data) {
    return angular.isObject(data) && String(data) !== '[object File]' ? $.param(data) : data;
  }];
}]);

3. 检查SameSite Cookie政策影响

Chrome 65开始推行SameSite Cookie的默认限制,如果你的API请求依赖Cookie做身份验证,且是跨域场景:

  • 要确保后端设置Cookie时加上SameSite=None; Secure属性(注意Secure要求必须是HTTPS环境)
  • 如果是同域场景,也可以检查是否Cookie的SameSite设置为Strict导致请求无法携带

4. 升级AngularJS补丁版本

AngularJS 1.6.9确实存在和Chrome 65+的兼容性小问题,官方在后续的1.6.10及以上补丁版本中修复了部分浏览器适配问题,你可以尝试升级到同大版本的最新补丁包,成本很低但可能直接解决问题。

另外,如果你能补充完整PUT请求的错误信息(比如Console里的报错提示、Network面板里的请求失败原因),可以更精准地定位问题。

内容的提问来源于stack exchange,提问作者slee423

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:27:23