Kasper Katzmann wrote :
>> Response.CacheControl = "no-cache"
>> Response.AddHeader "pragma","no-cache"
>
> Det er jo fint nok. Men hvorfor skrive i ASP hvad man ligeså godt kan
> skrive i HTML??
fordi proxier ikke kigger på, hvad der står i body af svar fra serveren.
Derfor vil den aldrig se, hvad der eventuelt måtte stå af META-data i
HTML-siden. Man kan derfor risikere følgende for brugere, der anvender
proxy til at tilgå internettet.
1.
Klient efterspørger en fil fra en webserver
2.
Proxy henter filen fra serveren og undersøger dens headers. Denne kan fx
være sat til at udløbe efter session er færdig. Derfor gemmer proxy siden
i sin cache.
3.
Klient modtager svaret fra proxy og ser, at der i META-tags står, at
siden udløber med det samme, og at den ikke skal gemmes i cache.
4.
Klient efterspørger lidt senere i samme session, at siden igen skal
hentes. Den ved nu, at den hverken har den i cache og at den allerede er
udløbet, så den beder proxien om at hente filen igen.
5.
Proxien modtager et request om en bestemt fil ved en webserver. Den ser
nu, at den allerede har hentet denne fil, og at den ligger i dens cache,
samt at den ikke er udløbet endnu (jvf originale headers). Derfor henter
den ikke en ny side fra webserveren men serverer den "gamle" version til
klienten.
6.
Klienten burde nu have modtaget en sprit-ny side fra webserveren, men da
headers var sat i HTML-body og ikke i headers, så får den en gammel
version, som proxien havde gemt i sin cache.
> Er det ikke altid bedre at få klienten til at lave det klienten kan
> (og i det her tilfælde gør den det vel under alle omstændigheder) og
> så få serveren til at lave alt det andet?
> Jeg ved godt det ikke betyder noget rent praktisk i det her tilfælde,
> men principielt er det vel sådan man bør tænke??
ja ... principielt. Man kan også bede sin webserver om at sætte disse
headers alle steder, og det vil måske kunne lette presset lidt. Man skal
også tænke på, at det som oftest ikke vil være et spørgsmål om at sætte
nye headers - men i stedet at ændre indholdet i dem. Fx sættes der som
standard altid headeren
CacheControl: private
hvis der ikke specificeres andet.
> Nu kender jeg ikke rigtigt AddHeader funktionen så det kan jo være der
> rent faktisk er en fornuftig forklaring (det plejer der jo at være
AddHeader bruges til at sætte en header af eget valg. Du kan fx bruge den
til at gøre
Response.Addheader "CacheControl","no-cache"
der vil give det samme som
Response.CacheControl = "no-cache"
--
Jesper Stocholm -
http://stocholm.dk
if you are competing with the darknet, you must compete on the darknet's
own terms: that is convenience and low cost rather than additional
security. (
http://crypto.stanford.edu/DRM2002/darknet5.doc )