AngularJS Post 请求在 Firefox 上无法正常工作

2023-11-30

我正在使用 AngularJS 编写一个网站,它与服务器上的 API 进行通信并提供一些信息。 对于登录部分,我应该发送一个包含电子邮件、密码等的 http post 请求。它在 google Chrome 和 IE 上运行良好。我的意思是它发送帖子请求并获取令牌。但在 FireFox 中,当我检查网络时,它发送了一个 OPTION 请求并获得 200,但之后它不发送任何帖子!因此我的登录信息不会消失,也不会获得任何令牌。

对于这种情况我该怎么办?

应用程序配置:

  $httpProvider.defaults.withCredentials = true;
  $httpProvider.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=utf-8;';
  $httpProvider.interceptors.push('httpRequestInterceptor');

发送请求的服务中的函数:

    this.loginEmail = function(f_email, f_pass, deviceModel, deviceOs) {
    var data = $.param({
            email: f_email,
            password: f_pass,
            device_model: deviceModel,
            device_os: deviceOs
        });

        return $http({
            method: "POST",
            url: app.baseUrl + 'login_email/' + app.storeID + '/' + app.device_id,
            data: data
        }).success(function(response){
            return response.status;
        });
    /*return $http.post(app.baseUrl + 'login_email/' + app.storeID + '/' + app.device_id, data).success(function(response){
        return response.status;
    }).error(function(response){
        return response.status;
    });*/
};

服务器凭证真实

CORS 看起来不错,因为我可以获取请求

enter image description here

编辑: 这是可能与此问题相关的另一件事: 在 Chrome 中,当我登录获取请求时,它会发送 Token 标头 但对于 Post 来说则不然

httpRequest拦截器:

app.factory('httpRequestInterceptor', function ($cookieStore) {
     return {
        request: function (config) {

        config.headers['Authorization'] = $cookieStore.get('Auth-Key');;
        config.headers['Accept'] = 'application/json;odata=verbose';
        return config;
     }
   };
});

该问题是由apache配置引起的。

before:

Access-Control-Allow-Headers: "authorization"

after:

Access-Control-Allow-Headers: "authorization, Content-type"

UPDATE :

在 CORS 请求上,如果 API 需要一些特殊标头(例如授权令牌),您必须返回所有 OPTIONS 请求 200(ok!),否则上述解决方案将不起作用。 这是代码:

if($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
   header( "HTTP/1.1 200 OK" );
   exit();
}

更新2:这个 OPTIONS 问题出现在 Django 的 REST 框架中!对于 OPTIONS,如果存在问题,它会通过查询整个 api 来评估请求,即使您拥有发送请求所需的权限,您也会收到错误!

Example:

假设有一个像 api/profile 这样的 url 需要一个授权标头来响应配置文件详细信息。您想要发送跨域请求来获取它。您设置正确的标题并单击!您将收到未经授权的错误!为什么?由于预先发送的请求(OPTIONS)不包含任何特殊标头,并且浏览器将其发送到服务器,因此具有 REST 框架的服务器通过检查整个请求(带有授权标头的获取请求)来评估 OPTIONS 请求,但 OPTIONS 没有任何授权标头所以这个请求是未经授权的!

开发解决方案:这个问题可以通过客户端或后端来解决。前端开发者可以在chrome上安装以下插件:

允许控制允许来源:*

后端开发人员可以安装在 Django 框架上启用 CORS 的包。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AngularJS Post 请求在 Firefox 上无法正常工作 的相关文章

随机推荐