因此,我将图像存储在名为“images”的子目录下的公共文件夹中,并尝试向其中之一发出请求。
然而,我经常得到这个错误;
Access to fetch at 'http://project.test/images/4obrUhRprw6CXSHsHEGEf4Gje2baKoiS7PQJvS4F.jpeg' from origin 'http://localhost:8080' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled.
我想这是因为我使用VueJS作为SPA前端,就好像我访问project.test
并请求它工作正常一样。
我使用的是laravel-cors,但经过研究后,我发现它显然不适用于公共文件夹,所以我尝试在公共文件夹中使用.htaccess文件,这就是我得到的结果;
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews -Indexes
</IfModule>
<IfModule mod_headers.c>
SetEnvIf Origin "http(s)?://([^.]+\.)?(localhost:8080)$" AccessControlAllowOrigin=$0$1
Header add Access-Control-Allow-Origin %{AccessControlAllowOrigin}e env=AccessControlAllowOrigin
Header set Access-Control-Allow-Credentials true
</IfModule>
RewriteEngine On
# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} (.+)/$
RewriteRule ^ %1 [L,R=301]
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>
然而,它似乎仍然不能工作,当我从我的Vue本地主机而不是project.test发出请求时,我得到了同样的错误。我还需要注意的是,我使用的是Valet。
希望有人能在这方面提供一些帮助。
发布于 2020-07-16 21:03:15
我把这一行放在.htaccess
文件中:
Header always set Access-Control-Allow-Origin "*"
这对我很管用。
发布于 2019-10-22 13:09:19
使用CORS添加中间件
<?php
namespace App\Http\Middleware;
use Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode as Middleware;
use Closure;
use Illuminate\Support\Facades\Response;
class CORS extends Middleware {
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
$origin = $request->header('origin');
$origin = $origin ?? '*';
// ALLOW OPTIONS METHOD
$headers = [
'Access-Control-Allow-Origin' => $origin,
'Access-Control-Allow-Methods'=> 'GET, POST, DELETE, PUT, OPTIONS, HEAD, PATCH',
'Access-Control-Allow-Headers'=> 'Authorization,DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Set-Cookie',
'Access-Control-Allow-Credentials'=> 'true'
];
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;
}
}
文件app/Http/Kernel.php
protected $middleware = [
// Your middleware...
\App\Http\Middleware\CORS::class,
];
发布于 2020-11-09 19:17:42
我在下面的设置中遇到了类似的问题:
适用于我的图像解决方案:根据@Hadeel Mostafa的建议,我使用以下代码向/文件夹添加了一个.htaccess文件:
Header always set Access-Control-Allow-Origin "*"
另一方面,将同一行添加到公用文件夹的.htaccess中并不起作用。它导致allow-origin报头被设置了两次(由CorsMiddleware和.htaccess设置)。因此,在我的例子中,关键是将自己的.htaccess添加到子文件夹中。
https://stackoverflow.com/questions/58495988
复制相似问题