我试图向api发送获取请求,就像它是一个登录网址
var url = "http://demo.software.travel/gptp/api/authorization?apiKey=****&alias=****&login=****&password=****"
$.get(url, function(data) {
console.log(data);
});
我在我的控制台中收到此错误
XMLHttpRequest无法加载http://demo.software.travel/gptp/api/authorization?apiKey= ****& alias = ****& login = ****& password = ****。 ' Access-Control-Allow-Origin'标头包含多个值' http://travellights.net,*',但只允许一个。起源' http://travellights.net'因此不允许访问。
我试图在这里看到问题来解决它,但我没有得到我需要改变的东西,实际上这很烦人。
The 'Access-Control-Allow-Origin' header contains multiple values
这解决了asp.net web.congif
顺便说一句,我使用 CHROME BROWSER 的任何帮助,我都很感激。
更新响应标头:
Access-Control-Allow-Credentials:true
Access-Control-Allow-Credentials:true
Access-Control-Allow-Headers:origin, x-requested-with, Content-Type, accept, Token
Access-Control-Allow-Methods:GET, HEAD, POST, PUT, DELETE, TRACE, OPTIONS
Access-Control-Allow-Origin:http://travellights.net
Access-Control-Allow-Origin:*
Connection:close
Content-Encoding:gzip
Content-Type:application/json;charset=utf-8
Date:Thu, 02 Jun 2016 16:41:18 GMT
Server:nginx/1.1.19
Set-Cookie:JSESSIONID=51FEE1A1206B9B481DD3EEA4167A9256; Path=/gptp
Vary:Origin
Vary:Accept-Encoding
X-UA-Compatible:IE=EmulateIE7
请求标题:
Accept:application/json, text/javascript, */*; q=0.01
Accept-Encoding:gzip, deflate, sdch
Accept-Language:en-US,en;q=0.8,ar;q=0.6,en-GB;q=0.4
Connection:keep-alive
Host:demo.software.travel
Origin:http://travellights.net
Referer:http://travellights.net/b2b/Pages/login?
User-Agent:Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36
答案 0 :(得分:3)
您正在尝试执行跨源资源共享(CORS),这是一种机制,允许从源自该资源的域之外的另一个域请求网页上的受限资源。 (例如访问字体或JSON文件)。
浏览器限制您从同源策略访问其他来源的资源,作为互联网用户的安全措施。
要解决此问题,您必须选择:
在服务器上启用CORS以便能够访问其他域。 这可以通过在响应中添加以下标题来完成:
Access-Control-Allow-Origin: http://travellights.net
Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept
JSONP在回调中包装JSON对象,从技术上讲,该请求是一个非受限资源(脚本标记),因此可以跨域共享。
可以通过在页面上添加脚本标记来通过vanilla js完成。
function process(data) {
// do stuff with JSON
}
var script = document.createElement('script');
script.src = '//domainURL?callback=process'
document.getElementsByTagName('head')[0].appendChild(script);
或者您可以使用jquery来实现相同的目标:
$.ajax({enter code here
url: "http://query.yahooapis.com/v1/public/yql",
jsonp: "callback",
dataType: "jsonp",
data: {
q: "select title,abstract,url from search.news where query=\"cat\"",
format: "json"
},
success: function( response ) {
console.log( response ); // server response
}
});
答案 1 :(得分:3)
如果您在nginx中设置"Full" CORS(使用OPTION预请求),请添加' access-control-allow-origin *'并独立地将该标头(对于Simple CORS - 没有OPTION预请求)添加到SERVER中的每个响应(例如php):
header('Access-Control-Allow-Origin', "*");
然后你会遇到这个问题。解决方案:如果已经在nginx配置中添加了此标头,请删除在服务器中添加此标头的代码:)
我找到了这个建议here