相关疑难解决方法(0)

为什么我的JavaScript在所请求的资源上出现"No'Access-Control-Allow-Origin'标头"错误,当Postman没有?

我试图通过连接到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 same-origin-policy cors flask-restless

2320
推荐指数
29
解决办法
399万
查看次数

309
推荐指数
7
解决办法
40万
查看次数

将API密钥放在标题或URL中

我正在为我公司的数据设计一个公共API.我们希望应用程序开发人员注册API密钥,以便我们可以监控使用和过度使用.

由于API是REST,我最初的想法是将此密钥放在自定义标头中.这就是我见过谷歌,亚马逊和雅虎的方式.另一方面,我的老板认为,如果密钥只是URL的一部分,那么API更容易使用,等等" http://api.domain.tld/longapikey1234/resource ".我想有一些事情可以说,但它违反了URL的原则作为你想要的简单地址,而不是你想要它的方式或原因.

您是否认为将密钥放在URL中是合乎逻辑的?或者,如果将简单的javascript前端写入某些数据,您是否还不必手动设置HTTP标头?

authentication rest url http api-key

70
推荐指数
3
解决办法
10万
查看次数

Ajax请求:拒绝设置不安全的标头

我正在尝试使用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 ajax http-referer user-agent

17
推荐指数
1
解决办法
3万
查看次数

通过Javascript发送授权令牌承载

我正在尝试通过 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 中使用以下注释: …

javascript jquery jwt

10
推荐指数
1
解决办法
5万
查看次数

使用PHP通过代理获取IPAddress?

我对许多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)

php ip-address

6
推荐指数
1
解决办法
1770
查看次数

“ Access-Control-Allow-Origin”标头包含多个值

我正在尝试将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 jquery json google-chrome cross-domain

6
推荐指数
2
解决办法
4万
查看次数

预检的响应具有无效的HTTP状态代码400

我正在尝试使用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 java ajax cors dropwizard

5
推荐指数
1
解决办法
2万
查看次数