请在401时帮助测试Firefox jQuery ajax中的CORS问题

mpl*_*jan 6 javascript authentication jquery json cors

这让我疯狂.

jQuery 1.4.2,windows XP sp3

这是我的测试.

加载Firefox 3.5+

http://plungjan.name/test/testcors.html

作品

将文件保存到硬盘并从那里运行

从我的办公室,外部工作和内部工作没有

同样有趣的是,我无法一次完成这两项任务.

背景:我对使用CORS的内部Web服务进行了GET.请不要发布有关FF的任何答案,因为这里此处详细说明自v3.5以来的处理跨域请求

它适用于从一台服务器到另一台服务器的IE8和FF3.6.6,现在几乎从文件系统(文件:///)到服务. 仅限文件系统,并且当FF 3.6.6需要协商时(用户已经登录,授权并发送凭证!)我是否在协商后得不到数据.jQuery xhr返回状态0并且没有data/responseText或者其他什么对我来说,jQuery会对401的xhr作出反应并保存xhr而不是200以后的OK

这是我在提醒XHR对象时在通信结束时得到的结果:

Status:success 
Data:[] 
XHR: 
some native functions,
readyState:4 
status:0
responseXML:null 
responseText: 
withCredentials:true
Run Code Online (Sandbox Code Playgroud)

如果我调用同一台服务器但不需要凭据,则返回的数据就是精确的跨域

所以沟通如下:

GET /restapplicationusingcors/authenticationneeded-internal/someid
Accept: application/json
Accept-Language: en
.
.
Origin: null
Cookie: LtpaToken=...
Run Code Online (Sandbox Code Playgroud)

回报是

HTTP/1.1 401 Unauthorized
Server: Apache
Pragma: No-cache
Cache-Control: no-cache
Expires: Thu, 01 Jan 1970 01:00:00 CET
WWW-Authenticate: Negotiate
Connection: close
Transfer-Encoding: chunked
Content-Type: text/html
Run Code Online (Sandbox Code Playgroud)

然后FF发送

GET /restapplicationusingcors/authenticationneeded-internal/someid HTTP/1.1
Host: myhost.myintranet.bla
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.6) Gecko/20100625 Firefox/3.6.6
Accept: application/json
Accept-Language: en
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Origin: null
Cookie: LtpaToken=....
Authorization: Negotiate ....
Run Code Online (Sandbox Code Playgroud)

并获得我需要的文件奖励,但无法获得FF:

HTTP/1.1 200 OK
Date: Tue, 20 Jul 2010 12:08:39 GMT
Pragma: No-cache
Cache-Control: no-cache, max-age=600, s-maxage=3600
Expires: Thu, 01 Jan 1970 01:00:00 CET
X-Powered-By: ...
Content-Disposition: inline;filename=nnnnnn.json
Content-Language: en
Access-Control-Allow-Origin: ...
Keep-Alive: timeout=6, max=70
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: application/json;charset=UTF-8
Run Code Online (Sandbox Code Playgroud)

从服务器发的数据是不是在XHR对象

这是我的代码

function getJSON(url,func,lang) {
  accept = 'application/json';
  lang=lang?lang:"*";
  // gruesome hack to handle that APPENDS the mime header to */* !!!
  // NOW HANDLED by first setting Accept to "" !!! 
//  if ($.browser.msie && url.indexOf('serveAsMime')==-1)  {
//    url+= '?serveAsMime='+accept;
//  }
  if (currentRequest != null) currentRequest.abort();
  var requestObjectJSON =   {
    url    : url,
//    dataType: "json",
    method : 'get',
    beforeSend: function(xhr){
      xhr.setRequestHeader('Accept', ""); // IE hack
      xhr.setRequestHeader('Accept', accept);
      xhr.setRequestHeader('Accept-Language', lang);
      if (url.indexOf('-internal') !=-1) {
        try {
          xhr.withCredentials = true;
          alert('set credentials') 
        }
        catch(e) {
          alert('cannot set xhr with credentials')
        }
      }
    },

    success: function(data,status,xhr) {
      var responseText = xhr.responseText;
      var responseJSON = xhr.responseJSON;


      var t = "";
      try{
        for (var o in xhr) t += '\n'+o+':'+xhr[o];
      }
      catch(e) {
        if (e.message.indexOf('.channel')==-1)alert(e.message);
      }
      alert('Status:'+status+'\nData:['+data+']\nXHR:'+t);
      func(responseText);
    },
  }
  currentRequest = $.ajax(requestObjectJSON);
}
Run Code Online (Sandbox Code Playgroud)

zwo*_*wol 3

这是在黑暗中刺伤,因为我不完全理解你的问题,但我认为你可能遇到了file:URL 的问题,这些 URL 不被视为具有任何来源。我不确定是否可以文件 URL 授权 CORS。


归档时间:

查看次数:

3524 次

最近记录:

8 年,9 月 前