【问题标题】:Basic Authentication with jQuery.ajax request and jsonp使用 jQuery.ajax 请求和 jsonp 进行基本身份验证
【发布时间】:2011-04-04 00:29:27
【问题描述】:

我有一些本地 html/js 文件,我想通过 https 调用一些远程服务器并最终对请求使用基本身份验证。

我遇到了两个问题。首先,如果我没有为 dataType 指定 'jsonp',jQuery.ajax() 请求会返回错误:

访问受限 URI 被拒绝代码: 1012

我的请求是否被视为跨域,因为我的主要工作文件存储在本地,但从其他地方的服务器检索数据?

很好,我更新了调用,现在看起来像:

$.ajax({ 
     url: myServerUrl,
     type: "GET", 
     dataType: "jsonp", // considered a cross domain Ajax request if not specified
     username: myUsername,
     password: myPassword,

     success: function(result)
     {
        // success handling
     },
     error: function(req, status, errThrown){
         // error handling
     }
})

因为我需要使用基本身份验证,所以我传入了用户名/密码,但如果我监控请求,我看不到它被设置,此外,服务器发送一个错误响应,因为它没有预期的信息。

另外,因为我设置了jsonpbeforeSend 不会被调用。

对于此请求,我如何使用基本身份验证传递凭据?

【问题讨论】:

    标签: javascript jquery jsonp basic-authentication


    【解决方案1】:

    试试http://user:password@restservice。这模仿了基本身份验证请求。

    【讨论】:

    【解决方案2】:

    我认为您必须添加某种服务器代理。 JSONP 只是使用脚本标签的一种特殊方式。因此,它不允许设置任意标题。当然,你不能做跨域 XHR。

    【讨论】:

      【解决方案3】:

      简短的版本是你不能这样做。您的怀疑是正确的,因为您是本地人并且这些文件是远程的,您无法访问它们,您被same-origin policy 阻止了。解决方法是 JSONP,但这似乎不适用于您的情况...

      JSONP 的工作方式不同,它是通过 <script> 标记包含获取文件的 GET 请求,因此您不会发送特殊的标头或任何东西。

      您需要通过您所在的服务器(运行此脚本的域)或其他代理选项来代理请求,但从客户端到另一个域被阻止,主要是出于安全原因。

      【讨论】:

      • 这是正确答案,JSONP 不能包含 Basic Auth 所需的 USER / PWD 标头。所以,如果你这样做,你会被诅咒,如果你不这样做,你会被诅咒:)
      猜你喜欢
      • 1970-01-01
      • 2015-08-12
      • 2017-06-13
      • 2013-05-30
      • 1970-01-01
      • 1970-01-01
      • 2011-07-27
      • 2014-05-24
      相关资源
      最近更新 更多