Fetch API funktioniert nicht mit localhost/127.0.0.1
Nur als hintergrund, ich habe eine app reagieren sitzen auf einem remote-EC2-Ubuntu-Instanz. Dem gleichen server läuft auch eine Go-app lauscht auf port 8080 (port wurde geöffnet, um alle von den Sicherheits-Einstellungen).
Ich versuche, eine Anfrage zu stellen mit Fetch API, aus der app Reagieren, wie folgt:
var bearer = 'Bearer ...'
return fetch('http://localhost:8080/home', {
headers: new Headers({
'Authorization': bearer
})
})
In der Konsole von Chrome und Firefox, bin ich immer:
TypeError: NetworkError, wenn Sie versuchen zu Holen Ressource
Das gleiche gilt, wenn ich Ersatz localhost
mit 127.0.0.1
.
Verwendung der externen IP von der EC2-Instanz, jedoch klappt (und löst einen CORS-request - aufgrund der 'Authorization' - header - was ist reibungslos durch den server).
Im letzteren Fall, ich sehe auch die server-Protokollierung der eingehenden Anfragen für beide OPTIONEN, und BEKOMMEN (im ehemaligen Fall, keine logs vorhanden sind, die entweder für die Methode).
Ich habe auch versucht LOCKE ' Ing aus dem EC2-Maschine localhost
und die Anforderung effektiv geht durch die führt mich zu glauben, dass mit der Fetch-API-Anfrage wird nicht ausgelöst, an alle.
Jede Beratung wäre geschätzt. Wenn ich etwas falsch bitte zeigen Sie mich in die richtige Richtung.
- Die url, die Sie verwenden in Ihrem browser um die Seite zu öffnen (das macht die eigentliche fetch-Anfrage)?
- Ich bin mit der externen IP-Adresse von der EC2-Instanz (port 80), die gleiche IP-Adresse, wo die erfolgreichen Fetch-Anfrage gerichtet ist.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Beim schreiben
localhost
ruft Ihre (localhost) Computer (auf dem der browser vorhanden ist), weil diejs
code läuft in Ihrem browser.Sollten Sie eine domain/sub-domain für Ihre API-Endpunkt und verwenden Sie es anstelle von "localhost" oder " weiterhin verwenden, die hart-codierte IP-Adresse.
Sollten Sie auch damit nur Ihre frontend-website-domain in der zulässigen Ursprünge für Ihr backend. Ex. Ihre website kann
www.example.com
- und backend-url kannwww.api.example.com
. Sollten Sie damit nurwww.example.com
alsorigin
die bedient werden können, durchwww.api.example.com
. Konfigurieren Sie diese im backend.webkpack.config.js
undwebpack.config.prod.js
. Und verwenden DefinePlugin im webpack zu definieren, Ihre backend-subdomain. Inprod
config verwenden subdomain und in dev config, localhost verwenden. Auch Erlaube ich, dass alle Ursprünge in mein backend in der dev-Modus.Ich hatte gerade das gleiche problem. Ich schaffte es, diese arbeiten durch das hinzufügen
"proxy": "http://localhost:4000"
zupackage.json
.Dann können Sie schreiben Anfragen wie
fetch('/api/todos')
.Erklären Sie es gut hier.
Wenn Sie versuchen, senden Sie eine Anfrage an localhost, und Sie hosten Ihre server auf localhost, dann brauchen Sie nicht zu geben Sie die url, die Sie brauchen nur zu sagen
fetch()
Ihren Weg.Beispielsweise mein api-Endpunkt ist
http://localhost:8082/api/config
würde, dann würde ich das tunfetch('/api/config')
.Hier ist ein link zu
fetch
Methode, link