Kom ihåg mig?
Home Menu

Menu


Hur upptäcker jag en HEAD request i PHP?

 
Ämnesverktyg Visningsalternativ
Oläst 2011-12-22, 01:02 #1
swans avatar
swan swan är inte uppkopplad
Medlem
 
Reg.datum: Oct 2004
Inlägg: 216
swan swan är inte uppkopplad
Medlem
swans avatar
 
Reg.datum: Oct 2004
Inlägg: 216
Standard Hur upptäcker jag en HEAD request i PHP?

Jag bygger en sida som endast skall stödja GET requests. Hur gör jag i PHP för att upptäcka om någon gör en HEAD eller en POST?

Någon som vet?
swan är inte uppkopplad   Svara med citatSvara med citat
Oläst 2011-12-22, 01:15 #2
Kekke Kekke är inte uppkopplad
Medlem
 
Reg.datum: Feb 2011
Inlägg: 198
Kekke Kekke är inte uppkopplad
Medlem
 
Reg.datum: Feb 2011
Inlägg: 198
An associative array of variables passed to the current script via the HTTP POST method.

Det borde gå att köra

Kod:
if(isset($_POST)) {
    header ('Location: skickaivag.php');
}
## Samma med $_REQUEST
Men är ej 100 säker.
Kekke är inte uppkopplad   Svara med citatSvara med citat
Oläst 2011-12-22, 04:22 #3
klein klein är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Jul 2005
Inlägg: 2 225
klein klein är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Jul 2005
Inlägg: 2 225
Varför vill man blockera HEAD requester? Bara en nyfiken fråga.
klein är inte uppkopplad   Svara med citatSvara med citat
Oläst 2011-12-22, 07:25 #4
najks avatar
najk najk är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Oct 2005
Inlägg: 1 224
najk najk är inte uppkopplad
Har WN som tidsfördriv
najks avatar
 
Reg.datum: Oct 2005
Inlägg: 1 224
Exempelvis
Kod:
if ($_SERVER['REQUEST_METHOD'] != "GET") die("Sorry, we only accept get requests.");
najk är inte uppkopplad   Svara med citatSvara med citat
Oläst 2011-12-22, 07:37 #5
znap znap är inte uppkopplad
Medlem
 
Reg.datum: Jun 2007
Inlägg: 114
znap znap är inte uppkopplad
Medlem
 
Reg.datum: Jun 2007
Inlägg: 114
Citat:
Ursprungligen postat av Kekke Visa inlägg
An associative array of variables passed to the current script via the HTTP POST method.

Det borde gå att köra

Kod:
if(isset($_POST)) {
    header ('Location: skickaivag.php');
}
## Samma med $_REQUEST
Men är ej 100 säker.
isset() kollar att en variabel existerar och att den inte är null, $_POST existerar alltid så därför blir det fel. Det du där ska använda är !empty($_POST) vilket kollar att den existerar och inte kan castas till false dvs att den inte är en tom sträng, tom array, null, false, 0, eller en sträng innehållandes en nolla.


Citat:
Ursprungligen postat av klein Visa inlägg
Varför vill man blockera HEAD requester? Bara en nyfiken fråga.
Han har väl aldrig sagt att han ska blockera anropet?

Rätt kontroll vore alltså att kolla if($_SERVER['REQUEST_METHOD'] == 'head'). Det är dock något underligt varför du vill göra en sån kontroll. Ett anrop med HEAD ska hanteras precis på samma sätt ett anrop med GET enligt specen, däremot behöver inte servern skicka ut svarets body, själva html-koden (eller vad det nu kan vara) som renderas i webbläsaren.
znap är inte uppkopplad   Svara med citatSvara med citat
Oläst 2011-12-22, 08:43 #6
swans avatar
swan swan är inte uppkopplad
Medlem
 
Reg.datum: Oct 2004
Inlägg: 216
swan swan är inte uppkopplad
Medlem
swans avatar
 
Reg.datum: Oct 2004
Inlägg: 216
Citat:
Ursprungligen postat av najk Visa inlägg
Exempelvis
Kod:
if ($_SERVER['REQUEST_METHOD'] != "GET") die("Sorry, we only accept get requests.");
Det där verkar rätt. Tack!

Jag har en URL som mäter klick. Och jag har försökt att blockera alla robotar. Men igår såg jag att det i loggarna kom en ny robot som gjorde en "HEAD". Detta gör väl inte normalt människor? Så därför tänkte jag att jag blockar alla "HEAD" requests i framtiden.

Låter det rimligt?
swan är inte uppkopplad   Svara med citatSvara med citat
Oläst 2011-12-22, 09:11 #7
emilvs avatar
emilv emilv är inte uppkopplad
Bara ett inlägg till!
 
Reg.datum: Feb 2004
Inlägg: 1 564
emilv emilv är inte uppkopplad
Bara ett inlägg till!
emilvs avatar
 
Reg.datum: Feb 2004
Inlägg: 1 564
Citat:
Ursprungligen postat av znap Visa inlägg
Ett anrop med HEAD ska hanteras precis på samma sätt ett anrop med GET enligt specen, däremot behöver inte servern skicka ut svarets body, själva html-koden (eller vad det nu kan vara) som renderas i webbläsaren.
Varför ska man låta PHP generera HTTP-kroppen ifall det bara är huvudet som efterfrågas?

Citat:
Ursprungligen postat av swan Visa inlägg
Men igår såg jag att det i loggarna kom en ny robot som gjorde en "HEAD". Detta gör väl inte normalt människor? Så därför tänkte jag att jag blockar alla "HEAD" requests i framtiden.

Låter det rimligt?
Jo, normala webbläsare gör ofta HEAD, till exempel om de cachat sidan och vill se ifall de har en aktuell version. Det verkar vansinnigt att blockera HEAD-frågor.

Senast redigerad av emilv den 2011-12-22 klockan 09:18
emilv är inte uppkopplad   Svara med citatSvara med citat
Oläst 2011-12-22, 09:33 #8
nosnaj nosnaj är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Mar 2005
Inlägg: 1 012
nosnaj nosnaj är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Mar 2005
Inlägg: 1 012
Citat:
Ursprungligen postat av swan Visa inlägg
Det där verkar rätt. Tack!

Jag har en URL som mäter klick. Och jag har försökt att blockera alla robotar. Men igår såg jag att det i loggarna kom en ny robot som gjorde en "HEAD". Detta gör väl inte normalt människor? Så därför tänkte jag att jag blockar alla "HEAD" requests i framtiden.

Låter det rimligt?
Bättre du blockerar på user agent, där står ju exakt vilken sökmotor det är dessutom.
nosnaj är inte uppkopplad   Svara med citatSvara med citat
Oläst 2011-12-22, 09:34 #9
swans avatar
swan swan är inte uppkopplad
Medlem
 
Reg.datum: Oct 2004
Inlägg: 216
swan swan är inte uppkopplad
Medlem
swans avatar
 
Reg.datum: Oct 2004
Inlägg: 216
Citat:
Ursprungligen postat av nosnaj Visa inlägg
Bättre du blockerar på user agent, där står ju exakt vilken sökmotor det är dessutom.
Jag blockerar de flesta på user agent redan. Jag är dock lite orolig för de som jag ännu inte känner till...

Citat:
Ursprungligen postat av emilv Visa inlägg
Jo, normala webbläsare gör ofta HEAD, till exempel om de cachat sidan och vill se ifall de har en aktuell version. Det verkar vansinnigt att blockera HEAD-frågor.
Fast om jag bara vill räkna en person en enda gång borde det vara Ok att blocka HEAD? Eller kanske returnera "ja, du har aktuell version"
swan är inte uppkopplad   Svara med citatSvara med citat
Oläst 2011-12-22, 09:47 #10
emilvs avatar
emilv emilv är inte uppkopplad
Bara ett inlägg till!
 
Reg.datum: Feb 2004
Inlägg: 1 564
emilv emilv är inte uppkopplad
Bara ett inlägg till!
emilvs avatar
 
Reg.datum: Feb 2004
Inlägg: 1 564
Citat:
Ursprungligen postat av swan Visa inlägg
Fast om jag bara vill räkna en person en enda gång borde det vara Ok att blocka HEAD? Eller kanske returnera "ja, du har aktuell version"
Nu gör du antaganden om alla webbläsares beteenden. Det är inget som stöds av HTTP-standarden som har det här lilla att säga om HEAD:
http://www.w3.org/Protocols/rfc2616/...c9.html#sec9.4

Vill du göra sådana antaganden är det upp till dig. Jag hade inte gjort det.
emilv är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 02:45.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017