2016-04-17 11 views
0

Nachdem ich nicht in der Lage war herauszufinden, was falsch lief, dachte ich, dass ich mein Glück hier versuchen würde, um zu sehen, ob jemand weiß, was los ist.Javascript GET Anfrage mit 301 Redirect

Ich habe eine angularJS App mit einem GoLang/Gorilla Mux Server Backend. Der Web-App ist auf http://localhost:8888/ und dem Server, http://localhost:8080/

Im Prinzip habe ich diese einfache Javascript Anfrage GET:

$.get('http://localhost:8080/api/v1'+'/locations/', {borough: "Queens"}) 

Element inspiziert Verwendung in der Antwort-Header ich folgend sehen:

Content-Length:68 
Content-Type:text/html; charset=utf-8 
Date:Sun, 17 Apr 2016 20:12:00 GMT 
Location:/api/v1/locations?borough=queens 

und die folgenden in der Konsole:

XMLHttpRequest cannot load http://localhost:8080/api/v1/locations/? borough=queens. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:8888' is therefore not allowed access. 

Ich versuche, die genau die gleiche Anfrage Postman mit und 401 mit sehen:

Access-Control-Allow-Origin →* 
Content-Length →0 
Content-Type →text/plain; charset=utf-8 
Date →Sun, 17 Apr 2016 19:46:53 GMT 

Welche ist das, was ich erwarte. Aus irgendeinem Grund scheint es, dass meine Anfrage es nicht einmal auf den Server bringt, der keine 301-Anfrage anbietet. Die Tatsache, dass Postman und die App völlig unterschiedliche Antworten geben, ist verblüffend.

Ich hatte einige Probleme mit CORS aber dachte, dass ich das gelöst habe. Die Tatsache, dass Postman mir ein anderes Ergebnis mit dem Access-Control-Allow-Origin-Header gibt, lässt mich denken, dass dies etwas anderes ist.

Ich freue mich über jede Hilfe.

Edit:

Ich habe den Server Antwort zurück mit den Standardparametern Cors. Dies ist, was ich jetzt von Postman erhalten:

Access-Control-Allow-Headers →Origin, X-Requested-With, Content-Type,  Accept, Authorization 
Access-Control-Allow-Methods →GET, POST, PUT, DELETE 
Access-Control-Allow-Origin →* 
Content-Length →0 
Content-Type →text/plain; charset=utf-8 
Date →Sun, 17 Apr 2016 20:27:31 GMT 

immer noch die 301 für den JS Anruf bekommen ...

Edit2: (versucht Postman Anrufeinstell- gleiche wie Netzwerkanforderung an exakt)

Accept:*/* 
Accept-Encoding:gzip, deflate, sdch 
Accept-Language:en-US,en;q=0.8 
Cache-Control:max-age=0 
Connection:keep-alive 
Host:localhost:8080 
Origin:http://localhost:8888 
Referer:http://localhost:8888/root/mainapp/ 
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36 

Immer noch die gleichen 301 aus Inspect-Element und 401 erwartet mit Postman. Wie kann es sein, dass wir in einem Restful-HTTP-Kontext zwei identische HTTP-Aufrufe haben und dennoch ein völlig anderes Verhalten haben ?!

+0

Vielleicht sollten Sie es in https anrufen? https://en.wikipedia.org/wiki/HTTP_301 – mauros

+0

@mauros Nicht sicher, warum das nötig wäre.Wie auch immer, ich habe es versucht und net :: ERR_SSL_PROTOCOL_ERROR – JoeyN

+0

Sie sind eine Cross-Domain-Anfrage, die CORS aktiviert auf dem Server erfordert. Bitte führen Sie eine Websuche nach diesem Fehler durch. Es kommt hier mehrmals am Tag vor. Der Postbote unterliegt nicht den CORS-Beschränkungen oder der gleichen Ursprungsrichtlinie. – charlietfl

Antwort

0

Also im Grunde, wenn ich den letzten Schrägstrich entfernt, es zu machen:

von

$.get('http://localhost:8080/api/v1'+'/locations/', {borough: "Queens"}) 

zu

$.get('http://localhost:8080/api/v1'+'/locations', {borough: "Queens"}) 

Das funktionierte !!! Ich habe keine Ahnung, warum. Wenn ich gerne von jemandem hören würde, der vielleicht weiß, was hier passiert ist und warum das funktioniert. Ich wiederhole - wegen des letzten Schrägstrichs hat die Anfrage es nicht einmal zum Server geschafft.