在无法弄清楚出了什么问题之后,我想我会在这里试试运气,看看是否有人知道发生了什么。
我有一个带有GoLang / Gorilla多路复用服务器后端的angularJS应用程序。 网络应用程序位于http://localhost:8888/,服务器位于http://localhost:8080/
基本上我有这个简单的Javascript GET请求:
$.get('http://localhost:8080/api/v1'+'/locations/', {borough: "Queens"})
使用inspect元素,在响应头中我可以看到以下内容:
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
以下内容在控制台中:
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.
我使用Postman尝试完全相同的请求,并看到401:
Access-Control-Allow-Origin →*
Content-Length →0
Content-Type →text/plain; charset=utf-8
Date →Sun, 17 Apr 2016 19:46:53 GMT
这是我的期望。出于某种原因,似乎我的请求甚至没有发送到服务器,它没有提供301请求。 Postman和应用程序提供完全不同的响应这一事实令人困惑。
我在CORS上遇到了一些问题,但我认为我解决了这个问题。 Postman给我一个与Access-Control-Allow-Origin标题不同的结果的事实使我认为这是另一回事。
我欢迎任何帮助。
修改
我让服务器回复了标准的Cors参数。这就是我现在从邮递员那里得到的:
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
仍然获得JS电话的301 ...
编辑2 :(尝试将邮差调用设置为与网络请求完全相同)
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
仍然从inspect元素获得相同的301,并且预期401与Postman相同。怎么可能在Restful HTTP上下文中,我们有两个相同的HTTP调用但却有完全不同的行为?!
答案 0 :(得分:0)
所以基本上当我删除最后的斜杠来实现它时:
这
$.get('http://localhost:8080/api/v1'+'/locations/', {borough: "Queens"})
到
$.get('http://localhost:8080/api/v1'+'/locations', {borough: "Queens"})
这有效!!!我对于为什么没有血腥的想法。如果我愿意听到任何人知道这里发生了什么以及为什么会这样。我会重申 - 由于最后一次斜杠,请求甚至没有进入服务器。