Voorkomen van HTTP 304's

Pagina: 1
Acties:

  • bartvb
  • Registratie: Oktober 1999
  • Laatst online: 05-01 14:41
Heb een server die op het moment 80GB per maand doet terwijl er volgens de HTTP logs maar 45GB per maand op en neer wordt gepompt, daar ben ik redelijk van geschrokken, 50% overhead is a bit much :D

Een deel van het probleem waren de cookies, die waren een beetje aan de grote kant. Heb nu e.e.a. veranderd en dat scheelt al een paar gig op maandbasis.

Ander groot probleem zijn de 304's. Het gaat hier voornamelijk over een forum (phpBB) met een grafisch behoorlijk intensieve template (aangepaste subSilver). Doordat er zoveel plaatjes en smileys zijn krijgt de server op een dag behoorlijk wat 304's te verwerken, namelijk iets van 70k op 250k hits. Compleet onnodig aangezien die plaatjes zo goed als niet veranderen.

Nu kan ik allerlei leuke caching headers meesturen maar dat lijkt niet veel te helpen, alle caching tutorials op Internet (en ik heb er behoorlijk wat gezien inmiddels) lijken er op gericht zoveel mogelijk 304's te produceren.

Ik wil echter het liefst dat de browser een plaatje 1x ophaalt, in de cache gooit en verder niet meer zeurt. Enig idee hoe ik dat voor elkaar krijg? Hoorde dat het helpt als je geen Etags meestuurt?

Hints? Tips?
Heb net het halve Internet afgezocht maar kan dit nergens vinden, produceren van 304's wordt erg vaak uitgelegd, over het voorkomen van die dingen wordt nergens wat gerept. Die paar honderd byte overhead is nogal overkill voor plaatjes van 200byte :\

Alvast bedankt!

  • Femme
  • Registratie: Juni 1999
  • Laatst online: 17:24

Femme

Hardwareconnaisseur

Official Jony Ive fan

Met Apache mod_expires kun je dat geloof ik voor elkaar krijgen. Wat je voor elkaar moet krijgen is dat-ie een expires header gaat sturen met een ruime expire tijd (bijv. een week). De browser of proxy gaat dan helemaal niet meer zeuren totdat de opgegeven tijd is verstreken.

Verwijderd

daarom krijg je juist een 304... 304 betekent not changed since last access... anders zou je een 200 melding krijgen...

  • bartvb
  • Registratie: Oktober 1999
  • Laatst online: 05-01 14:41
Eeh, iis, wat bedoel je precies? Ik weet wat een 304 is, weet ook waarom ik die krijg, wil er alleen van af :D Ben er alleen nog neit helemaal achter hoe browsers nou precies omgaan met caching headers :\

Door een stomme fout van me stonden m'n caching headers helemaal verkeerd, heb er nu, zoals Femme al zei, die expire headers goed bij gezet, dit scheelt erg veel. Krijg bijna geen 304's meer.

Wel is het zo dat ik nog steeds een hoop 200's krijg als iemand op reload duwt op een pagina. Wordt daar niet echt blij van aangezien het hier om een forum gaat waar mensen nogal graag op Reload duwen. Ik zou het liefst hebben dat de browser dan een 'if-modified-since' header zou sturen voor alleen de PHP pagina en verder gewoon braaf zou luisteren naar de expire headers :\

Iemand enig idee?

Verwijderd

ik snap niet waarom je er vanaf wilt...
als je er vanaf wilt moet je gewoon je cache uit zetten, maar dat lijkt me niet slim...

  • bartvb
  • Registratie: Oktober 1999
  • Laatst online: 05-01 14:41
Eeeh, huh? Welke cache :?

Ik wil van de 304's af omdat die ook redelijk wat (onnodig) verkeer genereren. Het liefst heb ik dat plaatjes 1x opgehaald worden en dat er daarna niet meer om die plaatjes gezeurd wordt, no matter what. Voor die expire headers bestond 25% van m'n hits uit 304's voor plaatjes die toch niet veranderen, dat is nogal wat GB verkeer en dat kost geld :D
Nu heb ik al bijna geen 304's meer (door die expire) maar nu worden plaatjes met een 200 opgestuurd als mensen op Reload duwen, daar wordt ik dus ook neit blij van aangezien m'n users redelijk vaak op Reload duwen.

Het gaat hier dus allemaal om het verminderen van de gebruikte bandbreedte. Tienduizenden 304's versturen a 2 euro per gig is niet fun :\

  • Treenaks
  • Registratie: April 2001
  • Laatst online: 28-04 10:25
Die 304's zijn dus van je caching ding, wat kijkt OF sinds de laatste keer dat je cachete de boel veranderd is (en dus vernieuwd moet worden).

Er is geen mogelijkheid om dat uit te zetten in huidige browsers, afaik.

  • bartvb
  • Registratie: Oktober 1999
  • Laatst online: 05-01 14:41
304's zijn redelijk uit te schakelen met Expire headers die behoorlijk in de toekomst liggen (zie de post van Femme).

Mijn volgende probleem is echter dat de plaatjes nu zonder 'If-Modified-Since' opgevraagd worden door de browser als er op reload gedrukt wordt.. Ik heb dus het liefst dat de browser niets met de plaatjes doet totdat de user op 'Shift-Reload' duwt.

  • bartvb
  • Registratie: Oktober 1999
  • Laatst online: 05-01 14:41
Dit probleem speelt eigenlijk nog steeds ;)

Ik heb voor de plaatjes nu een aparte server draaien die een minimum aan headers stuurt en die de expire tijden erg hoog zet. Een response van die server:

HTTP/1.x 200 OK
Expires: Fri, 31 Dec 2004 04:00:00 GMT
Content-Length: 344
Keep-Alive: timeout=5, max=43
Connection: Keep-Alive
Content-Type: image/gif


Dat gaat goed totdat een user op Reload duwt, dan worden ineens alle plaatjes op een pagina (en dat zijn er nogal wat) opgehaald (wat resulteert in een flinke lading 200's). Daar wordt ik dus niet gelukkig van, al helemaal niet omdat we nu op zo'n 140GB per maand zitten :>

Ik wil dus nog steeds het liefst dat mensen een plaatje 1x ophalen en dat er daarna heeeeeelemaal niet meer om dat plaatje wordt gezeurd tot de user op Shift-Reload ramt of zijn/haar cache leegt...

Iemand enig idee? Net een uur zitten zoeken met Google maar kan totaal niets nuttigs vinden over de preciese werking van browser caches :\

Verwijderd

Ja je zal met een webserver toch afhankelijk blijven van je bezoekers... zitten deze achter een proxy dan zal het verkeer wel meevallen, maar als deze geen proxy gebruiken blijf je dit houden, aangezien je niet hun browser kan configgen (neem ik aan).

als je verkeer echt veel te hoog is, dan zal je andere oplossing moeten gaan bedenken, zoals flash gaan gebruiken :)

  • Koffie
  • Registratie: Augustus 2000
  • Laatst online: 14:04

Koffie

Koffiebierbrouwer

Braaimeneer

bartvb schreef op 30 May 2003 @ 13:49:
Dit probleem speelt eigenlijk nog steeds ;)

Ik heb voor de plaatjes nu een aparte server draaien die een minimum aan headers stuurt en die de expire tijden erg hoog zet. Een response van die server:

HTTP/1.x 200 OK
Expires: Fri, 31 Dec 2004 04:00:00 GMT
Content-Length: 344
Keep-Alive: timeout=5, max=43
Connection: Keep-Alive
Content-Type: image/gif


Dat gaat goed totdat een user op Reload duwt, dan worden ineens alle plaatjes op een pagina (en dat zijn er nogal wat) opgehaald (wat resulteert in een flinke lading 200's). Daar wordt ik dus niet gelukkig van, al helemaal niet omdat we nu op zo'n 140GB per maand zitten :>

Ik wil dus nog steeds het liefst dat mensen een plaatje 1x ophalen en dat er daarna heeeeeelemaal niet meer om dat plaatje wordt gezeurd tot de user op Shift-Reload ramt of zijn/haar cache leegt...

Iemand enig idee? Net een uur zitten zoeken met Google maar kan totaal niets nuttigs vinden over de preciese werking van browser caches :\
Persoonlijk vindt ik dat je voor zo'n mega kick eigenlijk weinig zelf geprobeert hebt (of iig laat je dat niet merken).

Jij kunt wel willen dat je geen bandbreedte hebt ... dan moet je geen webserver neerplanten.
Als je op F5 ramt wordt dat plaatje gewoon weer opgehaald hoor (zie dus ook de tipcs van IIS5)

Tijd voor een nieuwe sig..


  • bartvb
  • Registratie: Oktober 1999
  • Laatst online: 05-01 14:41
Mega-kick? Ik heb heel lang gewacht voor ik hem kickte ;)

Weinig geprobeert hebt? Eeeeeeh :) Ben nu al een dag of 2 fulltime bezig met die achtelijke headers (ook voor If-Modified-Since (IMS) headers trouwens).

Ik begin me steeds meer af te vragen of het uberhaupt mogelijk is wat ik wil. Het is waarschijnlijk wel zo te maken dat de client alleen een IMS request stuurt maar dat kost bijna nog meer bandbreedte dan een volledige request (plaatjes zijn een paar honderd bytes).

Probleem is dat er nergens fatsoenlijke (uitputtende/volledige) documentatie is over het cache gedrag van browsers ;( Je hebt natuurlijk de RFCs maar zowel Mozilla als IE houden zich daar maar half aan. Verder had ik gisteren die IMS headers (voor PHP content) perfect aan de gang met zowel IE als Mozilla.. Ging goed zolang ik het testte en ik m'n users er niet op los liet. Hoop users met de meest wazige PC's die allemaal oude pagina's te zien kregen. :?

Maar goed, het begint er steeds meer op te lijken dat wat ik wil gewoon niet kan |o

Overigens: 'je moet maar geen webserver neerplanten' is wel een extreem-non-antwoord en z'n enorme quote; is dat nou nodig? Als we flauw gaan doen kan ik dat ook :)

Verwijderd

bartvb schreef op 30 mei 2003 @ 21:45:

Maar goed, het begint er steeds meer op te lijken dat wat ik wil gewoon niet kan |o
ah je begint het door te krijgen...

Verwijderd

Misschien een heel raar idee, en beantwoordt jouw vraag ook niet, maar is misschien wel een oplossing voor je dataverkeer:
Probeer met Photoshop je plaatjes zo klein mogelijk te maken, daar kan je echt heel veel mee winnen.
Dit heb je misschien al wel gedaan, maar optimaliseer dan ietsje verder.
Je weet zeker dat dit werkt, en dus wordt de energie die je erin steekt zowieso beloond.
Pagina: 1