response for preflight is invalid (redirect) error

10,319

You might be having problems due to invalid/incorrect Headers in your request. The only type of header that PlaceControllerseems to allow is Content-Type, but you're sending more than that.

Also, Access-Control-Allow-Origin and Access-Control-Allow-Methods headers should be added to the server response for your request, not to the request itself.

From MDN, cross-site requests (which seems to be your case) have to meet the following conditions:

  • The only allowed methods are:
    • GET
    • HEAD
    • POST
  • Apart from the headers set automatically by the user agent (e.g. Connection, User-Agent, etc.), the only headers which are allowed to be manually set are:
    • Accept
    • Accept-Language
    • Content-Language
    • Content-Type
  • The only allowed values for the Content-Type header are:
    • application/x-www-form-urlencoded
    • multipart/form-data
    • text/plain

Note: I never worked with Laravel or Lumen, but in my case if I don't set the headers correctly I end up with the same response for preflight is invalid (redirect) error.

Share:
10,319
Abdulla
Author by

Abdulla

Updated on June 04, 2022

Comments

  • Abdulla
    Abdulla about 2 years

    I am new to Laravel and Lumen framework. I am doing my first project using Lumen. I am trying to create an API calling from angular

    Here is my angular code :

    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;
        };
    }]);
    

    And here is my 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');
    

    And here is 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);
        }
    }
    

    But it shows "XMLHttpRequest cannot load http://localhost/service/public/getdata/?place=sdfs. Response for preflight is invalid (redirect)" error in console.log.

    I have googled for two days,but cant find a solution.

    Please help