带有自定义标头的跨域 jquery ajax api 调用未命中服务器

Posted

技术标签:

【中文标题】带有自定义标头的跨域 jquery ajax api 调用未命中服务器【英文标题】:Cross domain jquery ajax api call with custom headers is not hitting the server 【发布时间】:2014-09-16 00:32:43 【问题描述】:

我想使用 jquery ajax(带有自定义标头)从客户端调用 Web 服务。我几乎做到了。我已经将 Access-Control-Allow-Origin 设置为 force.com 和 salesforce.com,因为我是从 salesforce 调用网络服务的。

当我尝试在没有自定义标头的情况下调用该 API 时,它会获得响应,而当我使用标头调用时,它不会获得响应。

带有自定义标题

jQuery.ajax(
    type: 'POST',
    contentType: 'application/x-www-form-urlencoded',
    url: 'https://xxx.myclient.com/xxx/xxx/register',
    beforeSend: function(xhr) 
        xhr.setRequestHeader('orgid', '00D90000000oxxxx');
        xhr.setRequestHeader('userid', '00590000001Dxxxxxx');
    ,
    success: function(response) 
        alert('success' + JSON.stringify(response));
    ,
    error: function(jqXHR, textStatus) 
        alert('jqXHR : ' + JSON.stringify(jqXHR) + ' textStatus : ' + textStatus);
    
);

也试过

jQuery.ajax(
    type: 'POST',
    contentType: 'application/x-www-form-urlencoded',
    url: 'https://xxx.myclient.com/xxx/xxx/register',
    headers: 
        "orgid": "00D90000000oxxxx",
        "userid": "00590000001Dxxxxxx",
    ,

    success: function(data) 
        alert(JSON.stringify(data));
    ,
    error: function(jqXHR, textStatus) 
        alert('jqXHR : ' + JSON.stringify(jqXHR) + ' textStatus : ' + textStatus);
    
);

但在上述两种情况下,它都没有访问服务器并收到错误消息

当我不使用任何标头时,它会访问服务器

jQuery.ajax(
    type: 'POST',
    contentType: 'application/x-www-form-urlencoded',
    url: 'https://xxx.myclient.com/xxx/xxx/register',
    success: function(response) 
        alert('success' + JSON.stringify(response));
    ,
    error: function(jqXHR, textStatus) 
        alert('jqXHR : ' + JSON.stringify(jqXHR) + ' textStatus : ' + textStatus);
    
);

它得到了成功响应

在响应标头中显示

Access-Control-Allow-Headers: Content-Type

只有 content-type 存在,是这个问题吗? 我们是否需要在此处添加自定义标头?

当我使用 firefox firebug 分析网络时,它显示如下

    POST 寄存器(未传递任何标头) 选项注册(带有自定义标题)

我不知道为什么会这样

谁能帮忙。

在此先感谢..:)

【问题讨论】:

【参考方案1】:

尝试在您正在调用的服务的“Access-Control-Allow-Headers”列表中添加您的自定义标头(orgId 和 userId)。

【讨论】:

以上是关于带有自定义标头的跨域 jquery ajax api 调用未命中服务器的主要内容,如果未能解决你的问题,请参考以下文章

具有自定义标头和请求正文作为 JSON 字符串的跨域 jquery ajax 请求

发送带有自定义 HTTP 标头的跨域请求时禁用预检 OPTION 请求

带有 PHP 标头的跨域请求标头 (CORS)

Springboot如何优雅的解决ajax+自定义headers的跨域请求[转]

Jquery:使用 laravel 的跨域 ajax 'POST'

如何避免 jquery ajax 中使用 wcf 服务的跨域策略?