get, head (,post) ja cgi -ohjelmat, mitä sanoo alan "standardit" eli RFC:t asiasta ?
Pyytäessään tavallista html -sivua, selain saattaa lähettää ensin HEAD -pyynnön:
HEAD http://keskustelu.suomi24.fi/
ja, mikäli vastaus osoittaa, että palvelimella oleva sivu on uudempi kuin selaimen välimuistissa oleva, silloin lähetetään heti perään GET -pyyntö:
GET http://keskustelu.suomi24.fi/
Mutta: entä, jos käyttäjän syöttämä (tai linkin osoittama) URL onkin tällainen:
http://www.malliyritys.fi/cgi-bin/handler/sivu1.html?abc=1&def=2
tai, 1. pyynnön yhteydessä usein tällainen:
http://www.malliyritys.fi/cgi-bin/handler/sivu1.html
(huomaa puuttuvat parametrit jälkimmäisessä).
MISTÄ selain tietää olla lähettämättä ensin HEAD -pyyntöä palvelimelle silloin, kun haettava URL osoittaa CGI -ohjelmaan (tai muuhun vastaavaan skriptiin/web-ohjelmaan) staattisen web -sivun sijaan?
Vai pitäisiköCGI -ohjelman koodaajan varautua myös HEAD -pyyntöön ?
Itse ainakin olen nähnyt esimerkkikoodia, joka testaa, onko pyyntötyyppi GET vai POST, ja osaa käsitellä molempia, mutta jos pyyntötyyppi ei ole kumpikaan näistä tai puuttuu kokonaan, ko.esimerkkikoodi lähettää pyytäjälle virheilmoituksen, todennäköisesti http -standardiin kuuluvalla "malformed" -virhekoodilla.
Pyytäessään tavallista html -sivua, selain saattaa lähettää ensin HEAD -pyynnön:
HEAD http://keskustelu.suomi24.fi/
ja, mikäli vastaus osoittaa, että palvelimella oleva sivu on uudempi kuin selaimen välimuistissa oleva, silloin lähetetään heti perään GET -pyyntö:
GET http://keskustelu.suomi24.fi/
Mutta: entä, jos käyttäjän syöttämä (tai linkin osoittama) URL onkin tällainen:
http://www.malliyritys.fi/cgi-bin/handler/sivu1.html?abc=1&def=2
tai, 1. pyynnön yhteydessä usein tällainen:
http://www.malliyritys.fi/cgi-bin/handler/sivu1.html
(huomaa puuttuvat parametrit jälkimmäisessä).
MISTÄ selain tietää olla lähettämättä ensin HEAD -pyyntöä palvelimelle silloin, kun haettava URL osoittaa CGI -ohjelmaan (tai muuhun vastaavaan skriptiin/web-ohjelmaan) staattisen web -sivun sijaan?
Vai pitäisiköCGI -ohjelman koodaajan varautua myös HEAD -pyyntöön ?
Itse ainakin olen nähnyt esimerkkikoodia, joka testaa, onko pyyntötyyppi GET vai POST, ja osaa käsitellä molempia, mutta jos pyyntötyyppi ei ole kumpikaan näistä tai puuttuu kokonaan, ko.esimerkkikoodi lähettää pyytäjälle virheilmoituksen, todennäköisesti http -standardiin kuuluvalla "malformed" -virhekoodilla.
Vastaukset 2
Vanhimmat
on html-koodia oli se urli sitten parametrien kanssa tai ilman.
Sivun mukana tallennetaan varmaan myös http-headerit jotka sitten kertoo miten välimuistissa olevaa sivua käsitellään ja onko se jo liian vanha "Expired" arvon mukaan.
Nyt kun debuggaan omia sivujani, niin kertaakaan en ole saanut selaimelta vielä kiinni pelkkää HEAD kyselyä.
http speksin mukaan http headereita tulee aina totella ja omasssa sovelluksessa isken aina jokaiseen vastaukseen headerit
Cache-Control=no-cache, no-store, must-revalidate, proxy-revalidate
Pragma=no-cache
Ei tarvi välittää cachesta, kun sivut ei mene cacheen ikinä.
Meta-tageillä yritin ensin, mutta niitä tottelee selaimet aika vaihtelevasti
Se olennaisin kysymys oli tämä:
Vai pitäisikö CGI -ohjelman koodaajan varautua myös HEAD -pyyntöön ja siis osata käsitellä myös sellainen oikein ?
Tämä kysymys on siis edelleen vastausta vaille.