POST
*Edit 1: Der Fehler scheint nur bei Anfragen aufzutreten
Ich habe eine Frontend-Website auf localhost
. Es gibt eine Registrierungsseite auflocalhost/register
Die Website ruft eine Backend-Funktion auf, um einen Benutzer zu registrieren beilocalhost:8080/api/register
Ich verwende Axios, um den Benutzernamen und das Passwort per POST zu senden. Der Browser sendet zwei Anfragen: die OPTIONS-Preflight-Anfrage und dann die POST-Anfrage.
Der Benutzer wurde erfolgreich erstellt, der Browser gibt jedoch einen Fehler für die POST-Anforderung aus:
Reason: CORS header ‘Access-Control-Allow-Origin’ missing
Und tatsächlich fehlt es in der Antwort auf den POST. Vorausgesetzt, meine Backend-Cors-Datei ist richtig konfiguriert, könnte das Problem an der Kombination meines Docker- und Nginx-Setups liegen, die es blockiert, oder könnte es sein, dass die Header an eine falsche Stelle weitergeleitet werden?
Dies ist meine Nginx-Konfiguration:
server {
listen 8080;
index index.php index.html;
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log;
root /var/www/html/public;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
try_files $uri = 404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass php:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}
server {
listen 80;
location / {
proxy_pass http://node:3000;
}
}
und das ist mein docker-compose.yml
:
networks:
mynetwork:
driver: bridge
services:
nginx:
image: nginx:stable-alpine
container_name: nginx
ports:
- "8080:8080"
- "80:80"
volumes:
- ./php:/var/www/html
- ./nginx/default.conf:/etc/nginx/conf.d/default.conf
depends_on:
- php
- node
networks:
- mynetwork
php:
build:
context: ./php
dockerfile: Dockerfile
container_name: php
user: "1000:1000"
volumes:
- ./php:/var/www/html
ports:
- "9000:9000"
networks:
- mynetwork
node:
build:
context: ./react
dockerfile: Dockerfile
container_name: next
volumes:
- ./react:/var/www/html
ports:
- "3000:3000"
networks:
- mynetwork
**Bearbeitung 2:
Das Backend ist Laravel und verfügt über eine CORS-Middleware, die sich darum kümmern soll. Und tatsächlich scheint es zu funktionieren, denn GET
eine OPTIONS
Anfrage wird ohne Fehler weitergeleitet, nur die POST
Anfrage löst diesen Fehler aus.
Dies ist die CORS-Konfigurationsdatei ( cors.php
) in Laravel:
'paths' => ['api/*', 'sanctum/csrf-cookie'],
'allowed_methods' => ['*'],
'allowed_origins' => ['http://localhost'],
'allowed_origins_patterns' => ['*'],
'allowed_headers' => ['*'],
'exposed_headers' => [],
'max_age' => 0,
'supports_credentials' => true