Autor | Zpráva | ||
---|---|---|---|
Witiko Profil |
#1 · Zasláno: 27. 9. 2010, 17:55:39 · Upravil/a: Witiko
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 |
#2 · Zasláno: 28. 9. 2010, 11:42:24 · Upravil/a: Witiko
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 |
#3 · Zasláno: 28. 9. 2010, 11:55:07
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 |
#4 · Zasláno: 28. 9. 2010, 22:45:18 · Upravil/a: Witiko
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 |
#5 · Zasláno: 28. 9. 2010, 22:55:18
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/ |
||
Witiko Profil |
#6 · Zasláno: 29. 9. 2010, 16:00:50 · Upravil/a: Witiko
_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. |
||
Časová prodleva: 14 let
|
0