我试图通过连接到Flask内置的RESTful API来使用JavaScript进行授权.但是,当我发出请求时,我收到以下错误:
XMLHttpRequest无法加载http:// myApiUrl/login.请求的资源上不存在"Access-Control-Allow-Origin"标头.因此不允许原点'null'访问.
我知道API或远程资源必须设置标题,但为什么在我通过Chrome扩展程序Postman发出请求时它可以正常工作?
这是请求代码:
$.ajax({
type: "POST",
dataType: 'text',
url: api,
username: 'user',
password: 'pass',
crossDomain : true,
xhrFields: {
withCredentials: true
}
})
.done(function( data ) {
console.log("done");
})
.fail( function(xhr, textStatus, errorThrown) {
alert(xhr.responseText);
alert(textStatus);
});
Run Code Online (Sandbox Code Playgroud) 有谁知道如何使用JavaScript或jQuery添加或创建自定义HTTP标头?
我正在为我公司的数据设计一个公共API.我们希望应用程序开发人员注册API密钥,以便我们可以监控使用和过度使用.
由于API是REST,我最初的想法是将此密钥放在自定义标头中.这就是我见过谷歌,亚马逊和雅虎的方式.另一方面,我的老板认为,如果密钥只是URL的一部分,那么API更容易使用,等等" http://api.domain.tld/longapikey1234/resource ".我想有一些事情可以说,但它违反了URL的原则作为你想要的简单地址,而不是你想要它的方式或原因.
您是否认为将密钥放在URL中是合乎逻辑的?或者,如果将简单的javascript前端写入某些数据,您是否还不必手动设置HTTP标头?
我正在尝试使用Google Text-To-Speech播放音频.因此,我需要在Referer和User-Agent正确设置的情况下向其端点发布请求.这个电话应该返回一个我可以播放的MP3.
但是,我得到"拒绝设置不安全的标头"错误.这是我的代码.我该怎么做?
$.ajax({
url: 'http://translate.google.com/translate_tts?ie=UTF-8&q=Hello&tl=en&client=t',
beforeSend: function(xhr) {
xhr.setRequestHeader("Referer", "http://translate.google.com/");
xhr.setRequestHeader("User-Agent", "stagefright/1.2 (Linux;Android 5.0)");
}, success: function(data){
el.mp3 = new Audio(data);
el.mp3.play();
}
});
Run Code Online (Sandbox Code Playgroud) 我正在尝试通过 Javascript 向 REST 端点发送授权令牌承载,所以我这样做:
$.ajax( {
url: 'http://localhost:8080/resourceserver/protected-no-scope',
type: 'GET',
beforeSend : function( xhr ) {
xhr.setRequestHeader( "Authorization", "Bearer " + token );
},
success: function( response ) {
console.log(response);
}
Run Code Online (Sandbox Code Playgroud)
我的端点在 SpringBoot 容器下运行,所以我正在获取 HttpServletRequest 并尝试获取 AUthorization Header 但始终为空:
static Authentication getAuthentication(HttpServletRequest request) {
String token = request.getHeader(HEADER_STRING);
//token is always null
...
Run Code Online (Sandbox Code Playgroud)
编辑 1 这是客户端(浏览器
OPTIONS http://localhost:8080/resourceserver/protected-no-scope 403 ()
Failed to load http://localhost:8080/resourceserver/protected-no-scope: Response for preflight has invalid HTTP status code 403.
Run Code Online (Sandbox Code Playgroud)
编辑 2 要在后端启用 CORS,我在 spring 中使用以下注释: …
我对许多AJAX调用运行安全检查,以查看我记录的请求是否有相同的IP.
我使用以下一组类函数来建立IP(可以通过负载平衡器来实现,因此是长时间的方法.
private function IPMask_Match ($network, $ip) {
$ip_arr = explode('/', $network);
if (count($ip_arr) < 2) {
$ip_arr = array($ip_arr[0], null);
}
$network_long = ip2long($ip_arr[0]);
$x = ip2long($ip_arr[1]);
$mask = long2ip($x) == $ip_arr[1] ? $x : 0xffffffff << (32 - $ip_arr[1]);
$ip_long = ip2long($ip);
return ($ip_long & $mask) == ($network_long & $mask);
}
private function IPCheck_RFC1918 ($IP) {
$PrivateIP = false;
if (!$PrivateIP) {
$PrivateIP = $this->IPMask_Match('127.0.0.0/8', $IP);
}
if (!$PrivateIP) {
$PrivateIP = $this->IPMask_Match('10.0.0.0/8', $IP);
}
if (!$PrivateIP) { …
Run Code Online (Sandbox Code Playgroud) 我正在尝试将get请求发送到api,就像它是登录网址
var url = "http://demo.software.travel/gptp/api/authorization?apiKey=****&alias=****&login=****&password=****"
$.get(url, function(data) {
console.log(data);
});
Run Code Online (Sandbox Code Playgroud)
我在控制台中收到此错误
XMLHttpRequest无法加载http://demo.software.travel/gptp/api/authorization?apiKey= ****&alias = ****&login = ****&password = ****。“ Access-Control-Allow-Origin”标头包含多个值“ http://travellights.net,* ”,但仅允许一个。因此,不允许访问源“ http://travellights.net ”。
我试图在这里看到解决问题的方法,但是我没有得到我需要更改的内容,实际上这很烦人。
“ Access-Control-Allow-Origin”标头包含多个值
这由asp.net web.congif解决
顺便说一句,我正在使用CHROME BROWSER,我感激不尽。
UPDATE响应头:
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
Run Code Online (Sandbox Code Playgroud)
请求标头:
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? …
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用AJAX进行REST调用(POST).这是我的AJAX代码
<script>
var settings = {
"async": true,
"crossDomain": true,
"dataType": "json",
"url": "http://localhost:port/service/myservice",
"method": "POST",
"data": '{jsondata}',
"headers": {
"accept": "application/json",
"Authorization": "authValue"
}
}
$.ajax(settings)
.done(function (response) {
console.log(response);
});
</script>
Run Code Online (Sandbox Code Playgroud)
最初我收到此错误:XMLHttpRequest无法加载http:// localhost:port/service/myservice.对预检请求的响应未通过访问控制检查:请求的资源上不存在"Access-Control-Allow-Origin"标头.因此不允许原点'null'访问.响应具有HTTP状态代码400.
要解决此问题,我在dropwizard应用程序中添加了以下代码
Dynamic filter = env.servlets().addFilter("CORS", CrossOriginFilter.class);
filter.setInitParameter(CrossOriginFilter.ALLOWED_METHODS_PARAM, "GET,PUT,POST,DELETE,OPTIONS");
filter.setInitParameter(CrossOriginFilter.ALLOWED_ORIGINS_PARAM, "*");
filter.setInitParameter(CrossOriginFilter.ACCESS_CONTROL_ALLOW_ORIGIN_HEADER, "*");
filter.setInitParameter("allowedHeaders", "Content-Type,Authorization,X-Requested-With,Content-Length,Accept,Origin");
filter.setInitParameter("allowCredentials", "true");
filter.addMappingForUrlPatterns(EnumSet.allOf(DispatcherType.class), true, "/*");
Run Code Online (Sandbox Code Playgroud)
添加此内容后,我的初始异常消失,但我收到以下异常:XMLHttpRequest无法加载http:// localhost:port/service/myservice.预检的响应具有无效的HTTP状态代码400
这个问题与CORS有关吗?我在这做错了什么?
UPDATE
在做了更多调试后,我发现了这种行为.发送没有Authorization标头的请求时,我收到415(不支持的媒体类型)错误.
我认为我的AJAX代码有问题,有人可以帮我找到问题吗?谢谢.
javascript ×5
ajax ×4
jquery ×4
cors ×2
api-key ×1
cross-domain ×1
dropwizard ×1
http ×1
http-headers ×1
http-referer ×1
httprequest ×1
ip-address ×1
java ×1
json ×1
jwt ×1
php ×1
rest ×1
url ×1
user-agent ×1