Помогите протестировать проблему CORS в Firefox jQuery ajax когда 401

это управляет мной психи.

jQuery 1.4.2, Windows XP sp3

Вот мой тест.

firefox 3.5 загрузки +

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

работы

Сохраните файл к жесткому диску и работайте оттуда

Из моего офиса внешние работы и внутреннее не делает

То, что также интересно, - то, что я не могу выполнить обоих сразу.

Фон: Я делаю ПОЛУЧЕНИЕ к внутреннему веб-сервису, который использует CORS. Не отправляйте ответы о FF, не обрабатывающем перекрестный доменный запрос, когда он сделает с тех пор v3.5, как детализировано здесь и здесь

Это работает в IE8 и FF3.6.6 от одного сервера до другой и теперь почти от файловой системы (file:///) к сервису. Только от файловой системы и только когда FF 3.6.6 потребностей согласовать (пользователь уже зарегистрирован, авторизовали и отправляют учетные данные!) делают я не получаю данные после согласования. jQuery xhr состояние возвратов 0 и никакой data/responseText или независимо от того, что Кажется мне, jQuery, реагирует и сохраняет xhr от 401, а не от 200 хорошо позже

Вот результат, который я получаю в конце коммуникации, когда я предупреждаю объект XHR:

Status:success 
Data:[] 
XHR: 
some native functions,
readyState:4 
status:0
responseXML:null 
responseText: 
withCredentials:true

если я звоню на тот же сервер, но не нуждаясь в учетных данных, данные возвращаются очень хорошо перекрестный домен

Таким образом, коммуникация следующие:

GET /restapplicationusingcors/authenticationneeded-internal/someid
Accept: application/json
Accept-Language: en
.
.
Origin: null
Cookie: LtpaToken=...

возврат

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

Затем 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 ....

и вознагражден файлом, в котором я нуждаюсь, но не могу достигнуть в 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

ДАННЫЕ, ОТПРАВЛЕННЫЕ ОТ СЕРВЕРА, НЕ НАХОДЯТСЯ В ОБЪЕКТЕ 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);
}

6
задан mplungjan 20 December 2010 в 10:37
поделиться