预检交叉原始请求中的错误

时间:2016-11-24 15:54:06

标签: javascript php

您好这件事让我非常沮丧。我不得不承认我不了解原始请求。这是我的代码:

javascript:

var config = {

            headers: {

                'Access-Control-Allow-Origin' : '*',
                'Access-Control-Allow-Methods': 'POST, GET, OPTIONS',
                'X-Parse-Application-Id' : 'xxxx',
                'dataType' :'json',
                'Content-Type' : 'application/json'

            }
      }



    $http.post(link,data_model,config).
      then(function(response) {

        deffered.resolve(response);
      }, function(response) {

        deffered.reject(response)
      });
      return deffered.promise;
  };

这是我在发布到服务器时设置标头的方式。我发布到名为utility.php的页面。

在utility.php中的

我有以下标题;

<?php
    /**
     * End point utility class
     * 
     *
     * @author Tariiq Henry Bbosa
     */
    header('Access-Control-Allow-Origin: *');

    header('Access-Control-Allow-Methods: POST, GET, OPTIONS');

当我尝试发布我的帖子请求时,我收到此错误:

XMLHttpRequest cannot load http://localhost:89//fotoserver/utility.php. Request header field Access-Control-Allow-Origin is not allowed by Access-Control-Allow-Headers in preflight response.

有人请告诉我哪个标题应该包含在哪里。所以myy请求可以通过。请你把我推荐给一个大页面阅读。请帮帮我。我会读完。

1 个答案:

答案 0 :(得分:0)

要解决CORS问题,服务器应在其响应标头中发送'Access-Control-Allow-Origin' : '*',...

如果客户端在与服务器不同的域上运行,则浏览器会阻止安全性请求。如果服务器允许跨域请求,浏览器将不会抱怨。

因此,不要将标头放在客户端$http.post()请求中,而是将标头放回utility.php

的响应中

在预检请求期间,您应该看到以下两个标题:Access-Control-Request-Method和Access-Control-Request-Headers。这些请求标头要求服务器发出实际请求的权限。您的预检响应需要确认这些标题,以便实际请求起作用。

参考:https://stackoverflow.com/a/8689332/3830485