Wie können Sie CORS-Anfragen mit cURL debuggen? Bisher konnte ich keine Möglichkeit finden, die Preflight-Anfrage zu "simulieren".
So können Sie CORS-Anforderungen mit curl debuggen.
Senden einer regulären CORS-Anfrage mit cUrl:
curl -H "Origin: http://example.com" --verbose \
https://www.googleapis.com/discovery/v1/apis?fields=
Das -H "Origin: http://example.com"
Flag ist die Domain eines Drittanbieters, die die Anforderung stellt. Ersetzen Sie in welcher Domain auch immer.
Das --verbose
Flag druckt die gesamte Antwort aus, sodass Sie die Anforderungs- und Antwortheader sehen können.
Die oben verwendete URL ist eine Beispielanforderung an eine Google-API, die CORS unterstützt. Sie können jedoch die von Ihnen getestete URL ersetzen.
Die Antwort sollte den Access-Control-Allow-Origin
Header enthalten.
Senden einer Preflight-Anfrage mit cUrl:
curl -H "Origin: http://example.com" \
-H "Access-Control-Request-Method: POST" \
-H "Access-Control-Request-Headers: X-Requested-With" \
-X OPTIONS --verbose \
https://www.googleapis.com/discovery/v1/apis?fields=
Dies ähnelt der regulären CORS-Anfrage mit einigen Ergänzungen:
Die -H
Flags senden zusätzliche Preflight-Anforderungsheader an den Server
Das -X OPTIONS
Flag zeigt an, dass dies eine HTTP OPTIONS-Anforderung ist.
Wenn die Preflight - Anforderung erfolgreich ist, sollte die Reaktion umfassen die Access-Control-Allow-Origin
, Access-Control-Allow-Methods
und Access-Control-Allow-Headers
Response - Header. Wenn die Preflight-Anforderung nicht erfolgreich war, sollten diese Header nicht angezeigt werden, oder die HTTP-Antwort lautet nicht 200.
Sie können auch zusätzliche Header angeben, z. B. User-Agent
mithilfe des -H
Flags.
--verbose
oben erwähnte Option hinzufügen .--head
:curl -H "Origin: http://example.com" --head https://www.googleapis.com/discovery/v1/apis\?fields\=
curl -H "Access-Control-Request-Method: GET" -H "Origin: http://example.com" -I https://s3.amazonaws.com/your-bucket/file
.Aktualisierte Antwort, die die meisten Fälle abdeckt
Access-Control-Allow-*
unterstützt Ihre Ressource CORS.Begründung für eine alternative Antwort
Ich google diese Frage ab und zu und die akzeptierte Antwort ist nie das, was ich brauche. Zuerst wird ein Antworttext gedruckt, der viel Text enthält. Hinzufügen von
--head
Ausgaben nur Header. Zweitens müssen wir beim Testen von S3-URLs zusätzlichen Header bereitstellen-H "Access-Control-Request-Method: GET"
.Hoffe das spart Zeit.
quelle
--head
dass Curl die Überschriften ausdrucken lässt, aber es führt auch dazu, dass CurlHEAD
eher eine Anfrage als eineGET
. Je nachdem, was Sie testen, möchten Sie möglicherweise eineGET
Anfrage stellen. Sie können dies tun, indem Sie hinzufügen--IXGET
.Das Bash-Skript "corstest" unten funktioniert für mich. Es basiert auf Juns Kommentar oben.
Verwendung
corstest [-v] url
Beispiele
Das positive Ergebnis wird grün angezeigt
Das negative Ergebnis wird in rot und blau angezeigt
Die Option -v zeigt die vollständigen Curl-Header an
corstest
quelle
Scheint so, als ob genau das funktioniert:
curl -I http://example.com
Suchen Sie
Access-Control-Allow-Origin: *
in den zurückgegebenen Headernquelle
*
dies nicht funktioniert, wenn Anmeldeinformationen wie ein Cookie mit der API-Anforderung angezeigt werden müssen. In diesem Fall ist der FQDN auch in derAccess-Control-Allow-Origin
Antwort erforderlichAccess-Control-Allow-Credentials: true
. Anmeldeinformationen mit Anmeldeinformationen wurden von OP jedoch nicht als Anforderung angegeben und*
funktionieren daher für nicht authentifizierte Anforderungen.