当前位置: 首页 > 知识库问答 >
问题:

Laravel 5.2 CORS,不要使用飞行前选项

连成益
2023-03-14
$router->group(['prefix' => 'api', 'middleware' => 'cors'], function ($router) {
    $router->get('/test', 'MyController@myMethod');
});
public function handle($request, Closure $next)
    {
        header('Access-Control-Allow-Origin: *');

        // ALLOW OPTIONS METHOD
        $headers = [
            'Access-Control-Allow-Methods' => 'POST, GET, OPTIONS, PUT, DELETE',
            'Access-Control-Allow-Headers' => 'Content-Type, X-Auth-Token, Origin, Authorization'
        ];
        if ($request->getMethod() == "OPTIONS") {
            // The client-side application can set only headers allowed in Access-Control-Allow-Headers
            return Response::make('OK', 200, $headers);
        }

        $response = $next($request);
        foreach ($headers as $key => $value)
            $response->header($key, $value);
        return $response;
    }
 protected $routeMiddleware = [
        'auth' => \App\Http\Middleware\Authenticate::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
        'cors' => \App\Http\Middleware\CORS::class
    ];
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
 new Vue({
        el: '#app',
        data: {
           //data here
        },
        http: {
            headers: {
                "Authorization": "Basic " + "apiKeyHere"
            }
        },
        methods: {
            mymethod: function (e)
            {
                e.preventDefault();
                this.$http.get('http://localhost/mysite/api/test').then(
                        function (response)
                        {
                          //do something
                        }
                )
            }
        }
    });

如果我取出授权头选项,请求就会工作。

我也试过https://github.com/barryvdh/laravel-cors,但仍然没有乐趣。任何帮助都很感激!

共有1个答案

楮自珍
2023-03-14

显然不是理想的解决方案,但它是有效的。我已经在routes.php文件的顶部添加了以下内容:

header('Access-Control-Allow-Origin: *');
header( 'Access-Control-Allow-Headers: Authorization, Content-Type' );

如果不用黑客就能工作就好了...唉。

更新:原来是IIS相关的。我最终在web.config文件中设置了头部,现在CORS不用攻击routes.php文件就可以工作了。

<httpProtocol>
    <customHeaders>
       <add name="Access-Control-Allow-Headers" value="Origin, Authorization, X-Requested-With, Content-Type, Accept" />
       <add name="Access-Control-Allow-Methods" value="POST,GET,OPTIONS,PUT,DELETE" />
    </customHeaders>
</httpProtocol>
      <outboundRules>
          <clear />
                <rule name="AddCrossDomainHeader">
                    <match serverVariable="RESPONSE_Access_Control_Allow_Origin" pattern=".*" />
                    <conditions logicalGrouping="MatchAll" trackAllCaptures="true">
                        <add input="{HTTP_ORIGIN}" pattern="(http(s)?://((.+\.)?somesite\.com|(.+\.)?anothersite\.org))" />
                    </conditions>
                    <action type="Rewrite" value="{C:0}" />
                </rule>
      </outboundRules>
 类似资料:
  • 问题内容: 跨域资源共享 是一种允许网页向另一个域发出XMLHttpRequests的机制。 在过去的几天里,我一直在摆弄CORS,我认为我对所有工作原理都非常了解。 因此,我的问题不是关于CORS /预检如何工作,而是关于 将预检作为新的请求类型的原因 。我看不到任何原因,为什么服务器A需要向服务器B发送预检(PR)只是为了确定是否接受实际请求(RR)-B肯定有可能在没有请求的情况下接受/拒绝R

  • translated_page: https://github.com/PX4/Devguide/blob/master/en/tutorials/pre_flight_checks.md translated_sha: 95b39d747851dd01c1fe5d36b24e59ec865e323e 飞行前传感器和EKF检查 commander模块执行多个传感器飞行前的质量检查和EKF检查,这些

  • TL;博士 我的Axios调用的格式有一些问题,并发现在调用中使用头作为常量或变量不起作用,而将头直接转储到调用中起作用。 在PHP方面,有一些额外的大括号的访问控制允许头指令,导致头响应被括号。 总而言之,它通过浏览器开发工具中的网络选项卡进行故障排除,帮助我们找到了修复方法。 我对编程非常陌生,对Vue.js和Axios也很陌生。所以我可能在概念和句法上遗漏了一些部分。我正在开发一个运行自定义

  • 问题是,据我所知,当你向API-gateway发送请求时;浏览器将首先发送一个飞行前选项请求。此预飞行请求将不会添加任何自定义头I:头。这将导致返回一个403,甚至不按options请求。 我的理解是客户机无法控制飞行前的请求,它由浏览器处理。 get请求通过postman工作,options请求也通过postman工作,但只有当我为每个请求添加标头时。 我在发帖前查了一些问题: API网关COR

  • 问题内容: 我现在奋斗了几个小时。我想向另一个域发出简单的Ajax请求,但始终出现http 401错误: 我在服务器端设置了所有相关的CORS标头。这是网络流量: 我知道有很多关于此主题的文章,但似乎我缺少一些简单的东西。有人可以帮我吗? 问题答案: 更新 看起来我不对。标头从不发送请求。 -你需要确保你的服务器不响应到请求。 我不知道您的服务器用什么语言编写,但是您以错误的方式实现了授权-应该从

  • 问题内容: 我正在尝试使用函数式编程来创建包含键和要执行的功能的字典: 现在,我已经看到了用于在模块中查找定义的函数的代码,我需要执行以下操作: 所以我的问题是,如何列出所有功能,然后使用字典将它们分配给所需的项目?所以最后我将有 我的真正问题是,我有大量的这些物品,并且制作了一个可以处理这些物品的图书馆,因此最终用户只需要调用 我想使用检查模块,但是我不确定该如何做。 我避免的理由: 我必须保护