Autor Zpráva
Witiko
Profil
Microsoft Internet Explorer u stránek spouštěných z localhostu nevyhazuje výjimku u cross-domain AJAX požadavků, což mě přimělo k drobnému pokusu a sice snaze o provedení HTTP autorizace přes AJAX.

Script jsem zkoušel na této stránce, která zde nabízí jakýsi test HTTP autorizace. Je nám tedy řečeno správné jméno i heslo. Jméno je test a heslo je this. Pokusil jsem se proto následující script spustit z konzole Internet Exploreru:

var base64 = "dGVzdCUzQXRoaXM=", /* alias encode64(test:this) */
    site = "http://handle.library.cornell.edu/control/authBasic/authTest/";

var httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
httpRequest.onreadystatechange = function() {
  if(httpRequest.readyState == 4) alert(httpRequest.status);
}
httpRequest.open("HEAD", site, true);
httpRequest.setRequestHeader("Authorization", "Basic " + base64);
httpRequest.send(null);


Po spuštění scriptu však opět vyskočilo klasické login okno. Zajímavé je, že ačkoliv Username doplněno nebylo, vyčetl ho MSIE ze zadaného base64 kódovaného stringu a zobrazil ho v textové podobě nad políčky pro zadání uživatelského jména a hesla. Heslo však zadané nepoužil a musel jsem ho zadat ručně.

Stejná situace se opakovala, když jsem kód spustil z konzole rovnou na výše zmíněné stránce z jakéhokoliv jiného prohlížeče (tam jsem samozřejmě přepsal 4.řádek na var httpRequest = new XMLHttpRequest();)

Má otázka zní: Lze s tím něco dělat? Vím, že se občas HTTP authorization přes AJAX používalo, na internetu je spousta příkladů kódu, přišlo by mi tedy divné, kdyby to nešlo.
Witiko
Profil
Mno a druhá anomálie, vůbec ale vůbec mi nejde přes AJAX poslat HTTP požadavek na GETnutí zdejší diskuze:

var site = "http://diskuze.jakpsatweb.cz/";

var httpRequest = new XMLHttpRequest(); /* new ActiveXObject("Microsoft.XMLHTTP"); */
httpRequest.onreadystatechange = function() {
  if(httpRequest.readyState == 4) alert(httpRequest.status);
}
httpRequest.open("GET", site, true);
httpRequest.send(null);


navrátí status 0, prázdnou odpověď a žádné hlavičky. Říkám si, jestli by to nemohlo být místním robots.txt.
_es
Profil
Witiko:
Mno a druhá anomálie, vůbec ale vůbec mi nejde přes AJAX poslat HTTP požadavek na GETnutí zdejší diskuze:
navrátí status 0, prázdnou odpověď a žádné hlavičky. Říkám si, jestli by to nemohlo být místním robots.txt.
Zopakuj si základy AJAXu.
Witiko
Profil
Základy AJAXu? Co já vím je AJAX čistě interface na zasílání HTTP požadavků, přičemž má na rozdíl od nízkoúrovňového socketového přístupu cross-domain omezení?

Pokud je cross-domain základ o kterém mluvíš, pak věz, že Internet Explorer u stránek uložených na localhostu domény nerespektuje a dovolí odeslat požadavek kamkoliv a stejného výsledku jsem dosáhnul po odeslání požadavku přímo pomocí JS konzole tady na jakpsatweb.cz fóru.

Pokud myslíš jiný základ, pak bych ocenil menší popostrčení?
_es
Profil
Witiko:
Pardon, myslel som to zakázanie prenosu medzi doménami, takže som trafil vedľa.
No teraz som si všimol, že tam máš jednoduchú chybu:
http://diskuze.jakpsatweb.cz/
Síce sa to presmerováva, no to sa už asi takýmto spôsobom nespracuje.
Witiko
Profil
_es:
Jo, blbý překlep, díky.

Jinak k [#1] - zjistil jsem, že funkce open() přijímá jako čtvrtý a pátý argument jméno a heslo k HTTP autorizaci, takže jsem omylem vynalézal kolo. :)

Btw nejspíš nejde nijak obejít přesměrování? Rád bych dostal původní stránku s hlavičkou Location místo výsledku přesměrování. Už jenom kvůli tomu, že takhle příjdu o možnost rozparsovat z přijatých hlaviček cookies, protože dostanu hlavičky odpovědi až na druhý požadavek (po přesměrování) a AJAX mě z nějakých důvodů nenechá getRequestHeader, takže nemám šanci ty nastavené cookies zjistit.

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: