Questions et réponses
API Laravel + Requête frontale React, Axios renvoie 404 - Access-Control-Allow-Origin
API Laravel + Requête frontale React, Axios renvoie 404 - Access-Control-Allow-Origin
<p>J'essaie de faire une requête POST à l'API Laravel depuis React. Lorsque j'envoie la requête en mode développement, la requête aboutit, mais lorsque je déploie l'API(:8000) et le frontend(:80) sur Apache2, la requête est bloquée par la politique du mode strict et l'erreur CORS indique que mon la demande ne dispose pas d'un contrôle d'accès - Allow-Origin et 404 en réponse. Mais les pages Laravel et React sont accessibles dans le navigateur. Pour faire des requêtes, j'utilise Axios.
Et le site Web doit avoir la même URL de base <code>http://localhost</code>
J'ai essayé de nombreuses solutions mais aucune n'a fonctionné pour moi. </p>
<h1>Noyau Laravel 10.x</h1>
<p>J'ai vu de nombreux utilisateurs suggérer de créer un middleware qui ajoute des en-têtes à la réponse du serveur.Un contenu similaire est ajouté par défaut dans Laravel (<code>conf/cors.php</code>);
Mon fichier ressemble à ceci</p>
<pre class="brush:php;toolbar:false;">'paths' => 'sanctum/csrf-cookie'],
'allowed_methods' => ['*'],
'allowed_origins' => ['*'],
'allowed_origins_patterns' => [],
'allowed_headers' => ['*'],
'exposed_headers' => ['*'],
'max_age' =>
'supports_credentials' => false,</pre>
<p>Il est enregistré dans <code>Kernel.php</code> comme suit</p>
<pre class="brush:php;toolbar:false;">protected $middlewareAliases = [
// 'cors' => AppHttpMiddlewareCors::class, <- il s'agit d'un middleware personnalisé qui n'est pas utilisé actuellement
'cors' =>
'auth' => AppHttpMiddlewareAuthenticate::class,
...
middleware $ protégé = [
// AppHttpMiddlewareCors::class, <- Ceci est personnalisé
le middleware n'est pas utilisé actuellement
IlluminateHttpMiddlewareHandleCors::class,</pre>
<p>Voici ce qui se trouve dans <code>api.php</code> lorsque j'utilise un middleware personnalisé</p>
<pre class="brush:php;toolbar:false;">Route::group(['middleware'=>'cors','prefix'=>'api'], function ()
{
Route::post('/signup',[AuthController::class, 'signup']);
Route::post('/login',[AuthController::class, 'login']);
Route::post('/logout',[AuthController::class, 'logout']);
Route::post('/user/post',[PostController::class,'createPost']);
Route::get('/user/post',[PostController::class,'getPostsInMonth']);
Route::post('/media/upload',[UploadController::class,'upload']);
});</pré>
<p>Même l'utilisation d'un middleware personnalisé a échoué</p>
<pre class="brush:php;toolbar:false;">class Cors
{
handle de fonction publique (Request $request, Closure $next) : Réponse
{
retourner $suivant($requête)
->en-tête('Access-Control-Allow-Origin', '*')
->en-tête('Access-Control-Allow-Methods', 'GET, POST, PUT, PATCH, DELETE, OPTIONS')
->header('Access-Control-Allow-Headers', 'Content-Type, Authorization, Origin, X-Requested-With');
}
}≪/pré>
<h1>在 Apache Laravel VirtualHost 文件中添加标头</h1>
<pre class="brush:php;toolbar:false;"><VirtualHost *:8000>
Nom du serveur site web.com
Alias du serveur *.website.com
Administrateur du serveur webmaster@localhost
DocumentRoot .../laravel/public
En-tête ajouter Access-Control-Allow-Origin "*"
En-tête ajouter les en-têtes Access-Control-Allow-Headers "Origin, X-Requested-With, Content-Type, Accept, Authorization"
<Répertoire ".../laravel">
En-tête défini Access-Control-Allow-Origin "*"
Ensemble d'en-têtes Access-Control-Allow-Headers "Origine, X-Requested-With, Content-Type, Accept, Authorization"
Commande autoriser, refuser
Autoriser tous
Exiger que tout soit accordé
</Répertoire>
</VirtualHost></pre>
<p>React Apache VirtualHost 文件看起来与 Laravel 文件非常相似</p>
<p>我没有成功:(</p>
<h1>Laravel/public 中的 .htaccess</h1>
<pre class="brush:php;toolbar:false;"><IfModule mod_headers.c>
Ensemble d'en-tête Cross-Origin-Resource-Policy 'cross-origin'
En-tête défini Access-Control-Allow-Origin "*"
</IfModule></pre>
<h1>设置API地址作为代理</h1>
<p>在<code>package.json</code>中我添加了这一行</p>
<pre class="brush:php;toolbar:false;">"proxy" : "http://localhost:8000",</pre>
<p>还尝试使用<code>http-proxy-middleware</code>包
<code>setupProxy.js</code></p>
<pre class="brush:php;toolbar:false;">const { createProxyMiddleware } = require('http-proxy-middleware');
module.exports = fonction (application) {
app.use(
'/api/*',
createProxyMiddleware({
cible : 'http://localhost:8000',
changeOrigin: vrai,
})
);
};</pré>
<h1>axios 客户端脚本</h1>
<pre class="brush:php;toolbar:false;">importer des axios depuis "axios" ;
const axiosClient = axios.create({
baseURL : "http://127.0.0.1:8000/api",
})
axiosClient.interceptors.request.use((config)=>{
const token = localStorage.getItem('ACCESS_TOKEN');
config.headers = {
'Autorisation' : `Bearer ${token}`,
'Contrôle d'accès-Autoriser-Origin' : '*'
}
retourner la configuration ;
})
axiosClient.interceptors.response.use((response)=>{
réponse de retour ;
},(erreur)=>{
const {réponse} = erreur ;
if(réponse && réponse.status == 401){
localStorage.removeItem('ACCESS_TOKEN');
}
erreur de lancement ;
})
exporter axiosClient par défaut;</pre>
<p>Je sais que bon nombre de mes paramètres rendent mon site non sécurisé, mais ceci est uniquement destiné à des fins de développement.
S'il vous plaît, aidez-moi, j'ai du mal avec ça depuis trois jours><</p>
<p>Voici le résultat que j'ai obtenu (désolé, Stack ne veut pas que je télécharge l'image en raison de problèmes de formatage)</p>
<pre class="brush:php;toolbar:false;">![1] : https://pasteboard.co/feqZ6JrGrvBM.png
![2] : https://pasteboard.co/nluAk8scYXzY.png
![3] : https://pasteboard.co/JF7yiHhH4XtB.png</pre></p>
Your Answer
1 réponse
Enfin, j'ai déplacé l'intégralité du projet hors du dossier /var/www et créé des liens symboliques uniquement pour le dossier public de chaque site. Également dans 设置文档根路径与 même chemin. Après cela, le gestionnaire CORS par défaut du projet Laravel commence à fonctionner normalement.
Outils chauds Tags
Hot Questions
function_exists() ne peut pas déterminer la fonction personnalisée
2024-04-29 11:01:01
Comment afficher la version mobile de Google Chrome
2024-04-23 00:22:19
La fenêtre enfant exploite la fenêtre parent, mais la sortie ne répond pas.
2024-04-19 15:37:47
Il n'y a aucune sortie dans la fenêtre parent
2024-04-18 23:52:34
Où sont les didacticiels sur la cartographie mentale CSS ?
2024-04-16 10:10:18
Hot Tools
Collection de bibliothèques d'exécution vc9-vc14 (32 + 64 bits) (lien ci-dessous)
Téléchargez la collection de bibliothèques d'exécution requises pour l'installation de phpStudy
VC9 32 bits
Bibliothèque d'exécution de l'environnement d'installation intégré VC9 32 bits phpstudy
Version complète de la boîte à outils du programmeur PHP
Programmer Toolbox v1.0 Environnement intégré PHP
VC11 32 bits
Bibliothèque d'exécution de l'environnement d'installation intégré VC11 phpstudy 32 bits
SublimeText3 version chinoise
Version chinoise, très simple à utiliser
Sujets chauds
Article chaud
Prédiction des dix principales tendances du marché des cryptomonnaies en 2025 : où est la prochaine tendance ?
2025-11-07
By DDD
Comment identifier les projets de chiens autochtones dans le cercle monétaire ? Évitez les pièges et les avertissements de risque du Zerocoin
2025-11-07
By DDD
Que faire si les polices win10 sont introuvables dans le logiciel après les méthodes d'installation et d'identification des polices installation_win10
2025-11-07
By DDD





