Laravel Lumen仅在验证后抛出COR

Laravel Lumen仅在验证后抛出COR,laravel,cors,lumen,Laravel,Cors,Lumen,我已经在我的nginx中启用了CORS,在我将这种代码的和平添加到函数存储(Request$Request)之前,它似乎可以正常工作: 添加$request->validate()后,我总是会收到CORS错误: CORS策略已阻止从源“bbb.com”访问位于“aaa.com/upload”的XMLHttpRequest:请求的资源上不存在“Access Control Allow origin”标头 验证是否通过并不重要。如果删除此验证,则一切正常 “验证”如何影响NGINX的配置 编辑: N

我已经在我的nginx中启用了CORS,在我将这种代码的和平添加到函数存储(Request$Request)之前,它似乎可以正常工作:

添加$request->validate()后,我总是会收到CORS错误: CORS策略已阻止从源“bbb.com”访问位于“aaa.com/upload”的XMLHttpRequest:请求的资源上不存在“Access Control Allow origin”标头

验证是否通过并不重要。如果删除此验证,则一切正常

“验证”如何影响NGINX的配置

编辑: Nginx配置:

location ~ \.php$ {
    if ($request_method = 'OPTIONS') {
        add_header 'Access-Control-Allow-Origin' '*';
        add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
        #
        # Custom headers and headers various browsers *should* be OK with but aren't
        #
        add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
        #
        # Tell client that this pre-flight info is valid for 20 days
        #
        add_header 'Access-Control-Max-Age' 1728000;
        add_header 'Content-Type' 'text/plain; charset=utf-8';
        add_header 'Content-Length' 0;
        return 204;
     }
     if ($request_method = 'POST') {
        add_header 'Access-Control-Allow-Origin' '*';
        add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
        add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
        add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';
     }
     if ($request_method = 'GET') {
        add_header 'Access-Control-Allow-Origin' '*';
        add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
        add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
        add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';
     }
        include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
}
    

您的响应返回错误,因此不正确的响应标题很可能是403,而正确验证的响应应该是200或202

如果您使用的是3个最新版本的Laravel/Lumen,则不必担心手动设置CORS配置。现在内置的Laravel CORS软件包为您解决了这一问题

查看此链接:

在该文件之后:

// $APP_FOLDER/config/cors.php
<?php


return [
    'paths' => ['api/*'],
    'allowed_methods' => ['*'],
    'allowed_origins' => ['*'],
    'allowed_origins_patterns' => [],
    'allowed_headers' => ['*'],
    'exposed_headers' => [],
    'max_age' => 0,
    'supports_credentials' => true,
];
/$APP\u FOLDER/config/cors.php

向我们展示您的nginx配置?您在谈论什么样的错误?我正在使用最新的流明,并使用文档中的验证。日志/目录中没有错误。那么,为什么会有来自服务器的错误响应呢?如果NGINX配置可以解决这个问题,我为什么要使用额外的包呢?这太粗鲁了。无论如何,据我所知,您仍然在手动处理CORS,而不是使用内置的CORS包。祝你好运,因为这并不能回答我的问题。这就是为什么简单的验证会弄乱CORS。这不是一个拉维,而是一个简单的单端点流明项目。我想了解问题,而不是在不了解问题的情况下盲目使用额外的软件包。
// $APP_FOLDER/config/cors.php
<?php


return [
    'paths' => ['api/*'],
    'allowed_methods' => ['*'],
    'allowed_origins' => ['*'],
    'allowed_origins_patterns' => [],
    'allowed_headers' => ['*'],
    'exposed_headers' => [],
    'max_age' => 0,
    'supports_credentials' => true,
];