Internet Info, s.r.o. Lupa Měšec Podnikatel Root Zdroják DigiZone Slunečnice Vitalia TopDrive KupDnes Navrcholu NovýTarif Dobrý web Weblogy Woko Jagg Computer.cz SK: MojeLinky

Hlavní navigace

Detekce AJAXových požadavků na serveru

Pokud používáte na klientské straně nějakou javascriptovou knihovnu, jako je třeba jQuery, můžete snadno odlišit, zda požadavek, který přišel na server, je poslán přímo prohlížečem, nebo skriptem. Mnohé knihovny (kromě jQuery třeba i Mootools, YUI či Prototype) totiž přidávají k požadavkům, posílaným přes XMLHttpRequest, speciální hlavičku:

if ( !remote ) {
 xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
}

Na serveru lze takový požadavek snadno rozpoznat, např. v PHP pomocí podmínky

$_SERVER[ 'HTTP_X_REQUESTED_WITH' ] === 'XMLHttpRequest'

Není tedy třeba přidávat k požadavku nějaké speciální příznaky ( ?ajax=1  apod.)

Zdroj: Detecting Ajax Events on the Server @ Learning jQuery

Předchozí zprávička Následující zprávička        
Kacer Donald
Kacer Donald (neregistrovaný) ---.mcrn.sk
8. 3. 2010 10:47 Nový

Zaskodnik

celé vlákno

Takze sa to da aj zneuzit ;-)

cooler
cooler (neregistrovaný) 193.85.189.---
8. 3. 2010 10:57 Nový

Re: Zaskodnik

celé vlákno

zneužít? jak můžeš změnou HTTP hlavičky něco zneužít? To bys asi nebyl dobrej programátor, kdyby ses nechat takhle zneužívat :-)

Martin Malý aura:94
8. 3. 2010 11:09 Nový

Re: Zaskodnik

celé vlákno

Pravděpodobně kolega naráží na to, že taková kontrola není jednoznačná a že tuto hlavičku lze podvrhnout – takže např. pokud skript pošle na základě téhle hlavičky nějaké „citlivější informace“ v dobré víře, že je posílá skriptu, tak je to špatně. (Ale to je špatně tak jako tak, bez ohledu na HTTP hlavičky.)

Strycek Skrblik
Strycek Skrblik (neregistrovaný) ---.net.upc.cz
8. 3. 2010 12:13 Nový

Re: Zaskodnik

celé vlákno

Což vystihuje poslední věta předchozí reakce.

Obecně mi ale tento přístup přijde zvláštní – volaný kód by se měl adresovat přímo, nikoli na základě hlaviček…

Martin Malý aura:94
8. 3. 2010 12:19 Nový

Re: Zaskodnik

celé vlákno

Pokud jde o kód, tak samosebou. Ale řekněme, že jde o obsah, třeba stránku, a ten může být načten přímo prohlížečem (pokud AJAX nepodporuje), nebo může být načten nějakým loaderem pomocí AJAX a vložen do DIVu. A podle toho, jakým způsobem je volán, tak je náležitě upraven (pro posílání AJAXem např. nebude zabalen do HTML).

cooler
cooler (neregistrovaný) 193.85.189.---
8. 3. 2010 10:51 Nový

zend

celé vlákno

Ano, HTTP má i hlavičky :-)

V Zend Frameworku v Controlleru potom staci:

if ($this->_request->isXmlHttpRequ­est()) {

 }

Martin Malý aura:94
8. 3. 2010 11:11 Nový

Re: zend

celé vlákno

Ano, HTTP má i hlavičky. A mnoho jich má! A zprávička hovoří zrovínka o jedné z nich, na které se kupodivu dokázali domluvit tvůrci různých JavaScriptových frameworků. ;)

Za doplňující informaci o ZF děkuji.

DG
DG (neregistrovaný) 95.129.103.---
8. 3. 2010 11:12 Nový

Re: zend

celé vlákno

Nebo v Nette Framework stačí

if ($this->isAjax()) {
}

:-))

Martin Malý aura:94
8. 3. 2010 11:14 Nový

Re: zend

celé vlákno

Chybí tu informace o tom, co stačí v Ruby on Rails, v Django, v Javě a v ASP.NET. Snad nějací pozorní čtenáři doplní…

Michal Augustýn
8. 3. 2010 14:30 Nový

Re: zend

celé vlákno

V ASP.NET MVC stačí Request.IsAjax­Request() ;-)

Btw. je to takovej základ, že nechápu, jak bez téhle znalosti mohl doteď někdo žít. Resp. umím si představit ty (IMHO zbytečné) workaroundy.

Znalost této hlavičky je např. dobrá při nastavení cachingu v ASP.NET, stačí dát varyByHeader…

Btw. tuhle hlavičku používá i Microsoft Ajax Library.

Vlastik
Vlastik (neregistrovaný) ---.kralikbobek.cz
8. 3. 2010 16:16 Nový

Re: zend

celé vlákno

V Djangu stačí HttpRequest.is_a­jax() :)

Jakub Vrána aura:47
9. 3. 2010 22:32 Nový

Kešování

celé vlákno

Pokud chceme výsledek odpovědi kešovat, tak je nutné nastavit HTTP hlavičku Vary.

Zasílat nově přidané příspěvky e-mailem        

Přehled názorů

Zaskodnik
Kacer Donald 8. 3. 2010 10:47
└ 
Re: Zaskodnik
cooler 8. 3. 2010 10:57
 
└ 
Re: Zaskodnik
Martin Malý 8. 3. 2010 11:09
 
 
└ 
Re: Zaskodnik
Strycek Skrblik 8. 3. 2010 12:13
 
 
 
└ 
Re: Zaskodnik
Martin Malý 8. 3. 2010 12:19
zend
cooler 8. 3. 2010 10:51
├ 
Re: zend
Martin Malý 8. 3. 2010 11:11
└ 
Re: zend
DG 8. 3. 2010 11:12
 
└ 
Re: zend
Martin Malý 8. 3. 2010 11:14
 
 
└ 
Re: zend
Michal Augustýn 8. 3. 2010 14:30
 
 
 
└ 
Re: zend
Vlastik 8. 3. 2010 16:16
Kešování
Jakub Vrána 9. 3. 2010 22:32