流明仅在验证后才抛出 CORS
Posted
技术标签:
【中文标题】流明仅在验证后才抛出 CORS【英文标题】:Lumen throws CORS only with validation 【发布时间】:2021-03-29 20:06:29 【问题描述】:我已经在我的 nginx 中启用了 CORS,它似乎可以正常工作,直到我将此代码和平添加到函数存储(请求 $request):
public function store(Request $request)
$validated = $request->validate([
'title' => 'required|unique:posts|max:255',
'file' => 'mimes:application/zip,application/x-rar-compressed,application/x-7z-compressed'
只要我添加 $request->validate() 我总是得到 CORS 错误: 从源“bbb.com”访问“aaa.com/upload”处的 XMLHttpRequest 已被 CORS 策略阻止:请求的资源上不存在“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;
【问题讨论】:
向我们展示你的 nginx 配置? 【参考方案1】:您的响应返回错误,因此响应标头不正确,很可能是 403,而经过适当验证的响应应该是 200 或 202。
如果您使用的是 Laravel/Lumen 的 3 个最新版本,则不必担心手动设置 CORS 配置。现在内置的 Laravel-CORS 包会为您解决这个问题。
查看此链接:https://laravel.com/docs/8.x/routing#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,
];
该配置应该不受限制地打开它。只需调整配置以满足您的需求。
重启你的网络服务器,它应该没问题。
【讨论】:
你在说什么样的错误?我正在使用最新的 LUMEN 并使用文档中的验证。 logs/ 目录中没有错误。那么服务器怎么会有不正确的响应呢?如果 NGINX 配置可以解决这个问题,我为什么要使用额外的包? 这太粗鲁了。无论如何,据我所知,您仍在手动处理 CORS,而不是使用内置的 CORS 包。祝你好运。 因为这不能回答我的问题。这就是为什么简单的验证会破坏 CORS。这不是一个 laravel,而是一个简单的单端点流明项目。我想了解问题,不要在不了解问题的情况下盲目使用额外的包。以上是关于流明仅在验证后才抛出 CORS的主要内容,如果未能解决你的问题,请参考以下文章