【问题标题】:response for preflight is invalid (redirect) error预检响应无效(重定向)错误
【发布时间】:2016-06-20 21:18:36
【问题描述】:

我是 Laravel 和 Lumen 框架的新手。我正在使用 Lumen 做我的第一个项目。我正在尝试从角度创建 API 调用

这是我的 angular 代码:

app.controller('ListCtrl', ['$scope', '$http', '$location', '$window', function($scope, $http, $location, $window) {
    $scope.data = {};

    $scope.getdata = function() {
        $scope.datas = [];

        $headers = {
            'Access-Control-Allow-Origin' : '*',
            'Access-Control-Allow-Methods' : 'POST, GET, OPTIONS, PUT',
            'Content-Type': 'application/json',
            'Accept': 'application/json'
        };

        $http({
            url: "http://localhost/service/public/getdata/", 
            method: "GET",
            params: {'place':$scope.data.place,'pincode':$scope.data.pincode},
            headers: $headers
        })
        .success(function(data,status,headers,config) {
            $scope.datas=JSON.stringify(data);

            console.log($scope.datas);

            $scope.navig('/show.html');
        })
        .error(function(){
          alert("failed");
        });
    };

    $scope.navig = function(url) {
        $window.location.href = url;
    };
}]);

这是我的 Lumen route.php:

<?php

header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Headers: Content-Type");

$app->get('/', function () use ($app) {
    return $app->version();
});

$app->get('getdata','App\Http\Controllers\PlaceController@index');

这里是 PlaceController.php

<?php

namespace App\Http\Controllers;

use App\Places;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;

class PlaceController extends Controller
{

    public function __construct()
    {
        header("Access-Control-Allow-Origin: *");
        header("Access-Control-Allow-Headers: Content-Type");
        //header("Access-Control-Allow-Origin: http://localhost:8100");
    }

    public function index()
    {
        $places = Place::all();

        return response()->json($places);
    }
}

但它在 console.log 中显示“XMLHttpRequest 无法加载 http://localhost/service/public/getdata/?place=sdfs。预检响应无效(重定向)”错误。

我google了两天,没找到解决办法。

请帮忙

【问题讨论】:

    标签: php angularjs http laravel lumen


    【解决方案1】:

    您的请求中的标头无效/不正确可能会导致您遇到问题。 PlaceController 似乎允许的唯一类型的标头是 Content-Type,但您发送的还不止这些。

    此外,Access-Control-Allow-OriginAccess-Control-Allow-Methods 标头应添加到您的请求的服务器响应中,而不是请求本身。

    来自MDN,跨站请求(好像是你的情况)必须满足以下条件:

    • 唯一允许的方法是:
      • 获取
      • 发布
    • 除了由用户代理自动设置的标头(例如 Connection、User-Agent 等)外,唯一允许手动设置的标头是:
      • 接受
      • 接受语言
      • 内容-语言
      • 内容类型
    • Content-Type 标头的唯一允许值是:
      • application/x-www-form-urlencoded
      • 多部分/表单数据
      • 文本/纯文本

    注意:我从未使用过 Laravel 或 Lumen,但在我的情况下,如果我没有正确设置标题,我最终会遇到相同的 response for preflight is invalid (redirect) 错误。

    【讨论】:

      猜你喜欢
      • 2016-10-20
      • 2018-02-13
      • 2018-12-06
      • 2018-02-21
      • 2017-04-25
      • 2017-11-15
      • 1970-01-01
      • 2019-03-21
      • 2017-12-30
      相关资源
      最近更新 更多