使用301重定向的Javascript GET请求

时间:2016-04-17 20:05:29

标签: javascript angularjs get http-status-code-301 gorilla

在无法弄清楚出了什么问题之后,我想我会在这里试试运气,看看是否有人知道发生了什么。

我有一个带有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调用但却有完全不同的行为?!

1 个答案:

答案 0 :(得分:0)

所以基本上当我删除最后的斜杠来实现它时:

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

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

这有效!!!我对于为什么没有血腥的想法。如果我愿意听到任何人知道这里发生了什么以及为什么会这样。我会重申 - 由于最后一次斜杠,请求甚至没有进入服务器。