相关疑难解决方法(0)

我可以在跨域json请求中设置标头吗?

我在互联网上做了一些研究,但我没有设法得到关于这个主题的完整图片.现在和永远都可以帮助解决这个问题吗?

这是我到目前为止发现的:

  • 可以使用jsonp进行跨域调用.永远不允许在jsonp调用中更改标头
  • 如果服务器允许,可以使用json进行跨域调用.

这就是我想要做的:

$.ajax({
    type: "GET",
    crossDomain: true,
    beforeSend: function (request) {
        request.setRequestHeader("Authorization", "Bearer " + ($("#accesstoken").val()));
    },
    contentType: "application/json; charset=utf-8",
    url: myJSonServer + encodeURI(operation),
    dataType: 'json',
    cache: false,
    success: callback,
    error: function (jqXhr, textStatus, errorThrown) { alert(textStatus + ": " + errorThrown); }
});
Run Code Online (Sandbox Code Playgroud)

这就是发生的事情:

  • 当myJSonServer在同一个域上时,根本没有问题
  • 当myJSonServer在另一个域上时,请求被发送,但没有Bearer标头

此Bearer标头是oAuth2标准的一部分.

我知道这可能不是最好的解决方案,在浏览器中设置accessToken.而且我知道我可以在这种情况下使用代理.

我只是好奇是否可以在跨域json请求上设置标头?
谢谢

- 问题解决了

我正在使用MVC4并在web.config中添加了crossDomainScriptAccessEnabled ="true".我认为这就足够了,但是apsillers的答案解决了我的问题.我现在已经在我的web.config中添加了这个:

 <system.webServer>
     <httpProtocol>
         <customHeaders>
        <add name="Access-Control-Allow-Origin" value="*" />
        <add name="Access-Control-Allow-Headers" value="Authorization" />
         </customHeaders>
      </httpProtocol>
   </system.webServer>
Run Code Online (Sandbox Code Playgroud)

javascript json cross-domain http-headers oauth-2.0

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

使用jQuery Ajax的JWT令牌

我有一个用Laravel,Dingo和JWT Tokens驱动的API.使用PAW测试API调用非常有效.使用jQuery运行API调用而没有中间件JWT令牌禁用工作正常.但是当我尝试使用JWT Tokens运行Ajax请求时,我得到401.

我错过了Ajax请求的技巧.你能看到这段代码有问题吗?

$.ajax({
    url: "http://api.domain.app/products",
    dataType : 'jsonp',
    type: 'GET',
    beforeSend : function(xhr) {
        xhr.setRequestHeader("Accept", "application/json");
        xhr.setRequestHeader("Content-Type", "application/json");
        xhr.setRequestHeader("Authorization", "Bearer XXXX");
    },
    error : function() {
        // error handler
    },
    success: function(data) {
        console.log(data);
        return data;
    }
});
Run Code Online (Sandbox Code Playgroud)

由于Cross Domain,我不得不使用jsonp.但是,这一点在JWT中间件上工作得很好.

希望你能指教..

ajax jquery jwt laravel dingo-api

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

jQuery、CORS、JSON(无填充)和身份验证问题

我有两个域。我正在尝试通过另一个域上的页面从一个域访问 JSON 对象。我已经阅读了有关此问题的所有内容,但仍然无法弄清楚。

提供 JSON 服务的域具有以下设置:

Header set Access-Control-Allow-Origin "*"
Header set Access-Control-Allow-Methods "GET, OPTIONS"
Header set Access-Control-Allow-Headers "origin, authorization, accept"
Run Code Online (Sandbox Code Playgroud)

从我的其他域,我调用以下内容:

$.ajax({
         type:'get',
         beforeSend: function(xhr) {
             var auth = // authentication; 
             xhr.setRequestHeader("Authorization", "Basic " + auth);
         }
         url:myUrl,
         dataType:'json',
         error: function(xhr, textStatus, errorThrown) { console.log(textStatus, errorThrown); }
      })
Run Code Online (Sandbox Code Playgroud)

我知道“auth”已正确初始化(记录并检查)。然而,这是行不通的。在 Firefox 的控制台中,我得到请求 URL:...

Request Method:
OPTIONS

Status Code:
HTTP/1.1 401 Authorization Required
Run Code Online (Sandbox Code Playgroud)

如果我去掉该beforeSend:...部分,我会看到以下内容

Request Method:
GET

Status Code:
HTTP/1.1 401 Authorization Required
Run Code Online (Sandbox Code Playgroud)

但是,服务 JSON 的域也可以服务 JSONP。我不想使用这个,主要是因为应用程序将在专用浏览器上不断运行,我担心这个问题。更重要的是,我真的很想知道我所做的事情到底出了什么问题。我知道出于实际目的,有多种方法可以克服 …

javascript ajax jquery jsonp cors

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

为什么我的服务器忽略了ajax请求的身份验证标头?

从我使用的JavaScript:

xhr.setRequestHeader("Authorization", make_base_auth(username,password));
Run Code Online (Sandbox Code Playgroud)

但是,HTTP请求没有Authorization标头:

OPTIONS /restService/index?_=1362589672203 HTTP/1.1
Host: myappinheroku.herokuapp.com
User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:19.0) Gecko/20100101 Firefox/19.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: es-MX,es-ES;q=0.8,es-AR;q=0.7,es;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Origin: http://127.0.0.1:8081
Access-Control-Request-Method: GET
Access-Control-Request-Headers: authorization,content-type
Connection: keep-alive
Run Code Online (Sandbox Code Playgroud)

似乎完全忽略了身份验证.怎么了?我们如何为CORS启用身份验证?


这是服务器对上述请求的响应:

HTTP/1.1 401 Full authentication is required to access this resource
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: origin, authorization, accept, content-type, x-requested-    with
Access-Control-Allow-Methods: GET, HEAD, POST, PUT, DELETE, TRACE, OPTIONS
Access-Control-Allow-Origin: *
Access-Control-Max-Age: 3600
Server: Jetty(7.x.y-SNAPSHOT)
Set-Cookie: JSESSIONID=6smxjnlqelmc1lg98ain16wv7;Path=/
WWW-Authenticate: Basic realm="Ralph's Bait and Tackle"
Transfer-Encoding: chunked
Connection: …
Run Code Online (Sandbox Code Playgroud)

jquery http basic-authentication cors

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