Browser negeert Expires-header

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

SQL Database developer

Functie omschrijving Wil jij meewerken aan het creëren van slimme software om magazijnen als een geoliede machine te laten lopen? Wij zoeken een zorgvuldig persoon, iemand die niet snel de hand omdraait voor complexe algoritmes. Denk jij dat jij de SQL ontwikkelaar bent die wij zoeken? Lees snel verder en wie weet zitten we binnenkort samen aan tafel! Jouw werkzaamheden zullen er als volgt uitzien: Je houdt je bezig met het ontwerpen en ontwikkelen van MS SQL server databases, dit doe je met T-SQL als programmeer laag. Je gaat aan high-end software oplossingen werken, dit doe je voor de optimalisatie

Bekijk vacature »

Senior .NET developer

Klaar voor een nieuwe uitdaging? Welke technologieën gaan schuil achter de dagelijkse energievoorziening? Als senior .NET developer bij Kenter maak jij samen met je team het verschil, zowel voor de interne organisatie als voor eindklanten. Samen bouwen jullie aan innovatieve dienstverlening met behulp van de nieuwste technologieën en tools. Het is een functie met veel vrijheid, goede arbeidsvoorwaarden én je draagt jouw steentje bij aan de energietransitie. Klinkt dit als iets voor jou? Lees dan verder of solliciteer direct! Wat ga je doen als senior .NET developer? Als senior .NET developer bij Kenter (onderdeel van Alliander) ben je van onschatbare

Bekijk vacature »

C#.NET Developer

Functieomschrijving We are looking for a dutch native speaker In deze uitdagende functie ga je werken als onderdeel van het development team, in de functie van C#.NET Developer, Je gaat maatwerk software bouwen voor diverse klanten. Ook optimaliseer je bestaande software en bouw je API koppelingen. Je bent vooral met back-end development bezig. Je krijgt veel vrijheid in deze functie en je krijgt de kans om mee te denken in bedrijfsprocessen. Deels thuiswerken is geen enkel probleem! Bedrijfsprofiel Deze organisatie is gevestigd in de regio van Boxtel. Het is van oorsprong een familiebedrijf, die gestart zijn met het bouwen van

Bekijk vacature »

Dynamische Oracle/APEX Ontwikkelaar in de logistie

Bedrijfsomschrijving De organisatie in de regio Rotterdam is gespecialiseerd in het ontwikkelen van moderne webbased software voor de ERP branche. In totaal is er 20FTE aan specialisten actief binnen de organisatie. De ICT afdeling bestaat momenteel uit 15FTE. Ze groeien ontzettend hard en daarom zoeken zij een Oracle/APEX Developer die het reeds sterke team nog sterker komt maken. Hier werken ze op projectbasis voor verschillende grote organisaties in de logistieke sector. Het is een informele organisatie waarbinnen een fijne werksfeer heerst. Zoals aangegeven willen ze het team nog sterker maken en daarvoor zoeken ze bij voorkeur medior of senior Oracle/APEX

Bekijk vacature »

HBO startersfunctie .NET Ontwikkelaar

Functie omschrijving We are looking for a dutch native speaker Ben je in januari 2023 klaar met je HBO opleiding en zoek je een mooie uitdaging? Wacht niet langer en solliciteer direct! Voor een familiebedrijf in de regio van Boxtel ben ik op zoek naar een C#.NET Ontwikkelaar. Jij gaat aan de slag met de (door)ontwikkeling van de maatwerksoftware projecten en gaat ook nieuwe software bouwen, middels de Microsoft-stack. Het bedrijf maakt gebruik van de volgende technieken: C# & ASP.NET; MVC; MS SQL; Entity Framework; Je krijgt hier veel tijd om te leren en eventueel door te groeien en het

Bekijk vacature »

Belastingdienst - Freelance Senior Cobol Applicati

Startdatum: 01.06.2023 Richttarief: €65,00 - €75,00 Duur van de opdracht: 7 maanden Uren per week: 36 Taal: Nederlands vereist! Gelieve in het Nederlands te solliciteren. Functieomschrijving: In de applicatie ETM zijn nu de inningsvoorzieningen voor ongeveer 25 aangifte- en aanslagmiddelen opgenomen. ETM is een extern aangeschafte service en het huidige contract met leverancier Oracle loopt af op 31-12-2022. Het programma uitfaseren ETM heeft als doel om vervanging te realiseren waarmee alle nu in gebruik zijnde ETM ondersteuning wordt overgenomen in nieuwe Inningsvoorzieningen om de continuïteit van de inningsprocessen te waarborgen. Eén van de inningsvoorzieningen die voor het einde van 31-12-2022

Bekijk vacature »

(Junior) PHP Ontwikkelaar bij een retail bedrijf i

Bedrijfsomschrijving Ben jij een ervaren PHP ontwikkelaar met een passie voor retail en ICT? Wil jij werken in een team dat zich bezighoudt met het ontwikkelen van uitdagende applicaties voor een groot retailbedrijf in Delft? Dan zijn zij op zoek naar jou! Functieomschrijving Als PHP Ontwikkelaar werk je in een team aan de ontwikkeling van applicaties die door de gehele organisatie worden gebruikt. Je bent verantwoordelijk voor het ontwikkelen, testen en implementeren van deze applicaties. Je werkt hierbij nauw samen met andere ontwikkelaars, projectmanagers en stakeholders binnen de organisatie. Je taken bestaan onder andere uit: Ontwikkelen van nieuwe functionaliteiten en

Bekijk vacature »

PHP Developer

Functie Middels Scrum en sprints bouw jij in deze functie mee aan complexe webapplicaties en ons SaaS platform. Hierbij hoort ook architectuur tot een van je taken. Daarnaast ben je één van de leden van het Scrum team. Dat betekent dat je naast je kerntaken ook in contact staat met de product owner. Oftewel, je bent bij het gehele ontwikkelproces betrokken. Tools die hierbij gebruikt worden zijn o.a. PHP, Symfony en Git. Eisen • Minimaal HBO werk- en denkniveau • Minimaal 3 jaar aantoonbare ervaring met PHP • Kennis en ervaring Symfony (Laravel is pré) & Lando • Kennis van

Bekijk vacature »

Creatieve Front-end developer gezocht!

Functie Het front-end team bestaat momenteel uit 4 collega’s en is hard aan het groeien! Samen leveren jullie een essentiële bijdrage aan de applicaties die ze voor hun klanten realiseren. Je werkt in het front-end team samen met de back-end teams en product owners om te zorgen dat de applicaties een fijne gebruikerservaring opleveren. Jouw expertise zorgt ervoor dat de juiste keuzes gemaakt worden qua techniek en ontwerp, van back-end tot aan gebruiker. In samenspraak met je team bepalen jullie de beste keuze voor techniek. Ook is er altijd ruimte om nieuwe technieken te ontdekken. Eisen • Je hebt gedegen

Bekijk vacature »

C# .NET Developer

Dit ga je doen Je richt je op het doorontwikkelen en herstructureren van het platform; Je werkt in teamverband en zelfstandig aan uitdagende projecten voor verschillende klanten; Softwareontwikkeling middels C# .NET; Je staat in contact met verschillende opdrachtgevers om de klantwensen te bespreken en deze vervolgens te ontwikkelen; Verbeteren van bedrijfsprocessen; Implementaties. Hier ga je werken Als .NET Developer kom je te werken in de regio van Lelystad bij een organisatie die met toonaangevende klanten uit heel Nederland samen werkt. De producten en diensten van de organisatie bereiken miljoenen Nederlanders. Hierbij komt een grote hoeveelheid informatie kijken en deze moet

Bekijk vacature »

Junior .NET Developer

Dit ga je doen Als junior .NET Developer lever je met jouw oplossingen direct een bijdrage aan de bedrijfsprocessen van de klanten. Werkzaamheden waar jij je zoal mee bezig houdt zijn; Het ontwikkelen, onderhouden en optimaliseren van de draaiende platforms van de klanten; Softwareontwikkeling middels C#, .NET; Klantcontact om de wensen te bespreken en uit te werken; Optimaliseren van de (huidige) bedrijfsprocessen; De IT-afdeling bestaat uit 30 personen verdeeld over 3 teams. Het team waar je in terecht komt bestaat uit ongeveer tien man. Het is een team wat bestaat uit betrokken collega’s, waar iedereen bereidt is om elkaar te

Bekijk vacature »

Python Developer

Dit ga je doen Als Python Developer ben je verantwoordelijk voor: Het ontwikkelen van Stuurprogramma's in Python zodat er verbindingen kunnen worden gelegd tussen besturingssystemen en (AV) hardware; Het testen en debuggen van Stuurprorgamma's; Het communiceren met noodzakelijke partijen in gevallen waar extra technische details nodig zijn om een Stuurprogramma te ontwikkelen of problemen op te lossen; Het maken van de nodige technische documentatie (in het Engels); Het participeren in een Scrum/Agile omgeving. Hier ga je werken Deze internationale organisatie is wereldwijd een succesvol producent en leverancier van professionele AV hard- en software. Klanten gebruiken de producten o.a. voor het

Bekijk vacature »

Software Developer PHP

Functie omschrijving We are looking for a dutch native speaker Voor een opdrachtgever in de regio van Geldrop ben ik op zoek naar een Software Developer PHP. Jij krijgt een rol met veel verantwoordelijkheid in een groeiende organisatie. In deze functie werkt je voornamelijk remote en op een vast moment kom je met het team samen, om samen te werken en nieuwe doelen te bepalen. Wat ga je doen? Je wordt verantwoordelijk voor de interne applicatie; Je zorgt voor de doorontwikkeling van de applicatie: zowel back-end, front-end; De basis van het werk betreft front-end technieken; Periodiek bepaal je samen met

Bekijk vacature »

Medior Java developer (fullstack)

Wat je gaat doen: Of beter nog, wat wil jij doen? Binnen DPA GEOS zijn we dan ook op zoek naar enthousiaste Java developers om ons development team te versterken. Als Java developer werk je in Agile/Scrum teams bij onze klanten en daarbij kun je eventueel ook andere ontwikkelaars begeleiden in het softwareontwikkelproces. Verder draag je positief bij aan de teamgeest binnen een projectteam en je kijkt verder dan je eigen rol. Je gaat software maken voor verschillende opdrachtgevers in jouw regio. Je bent een professional die het IT-vak serieus neemt en kwaliteit levert. Je leert snel vanwege je diepgaande

Bekijk vacature »

Laravel / PHP developer

Functie omschrijving Wij zijn op zoek naar een Medior PHP / Laravel Developer voor een IT-consultancy in de omgeving van Hoofddorp! Ben jij op zoek naar een leuke nieuwe uitdaging binnen een veelzijdige werkomgeving? Lees dan snel verder! Binnen dit bedrijf werk je in een ontwikkelteam, waarin je zeer betrokken bent en meedenkt over softwareoplossingen. Binnen dit Team hou je je bezig met het aanpassen, verbeteren en vernieuwen van de logistieke oplossingen. Je zult je bezig houden met de volgende werkzaamheden: Je gaat aan de hand van de wensen van klanten software ontwikkelen; Je bent bij het gehele proces betrokken;

Bekijk vacature »
Willem vp

Willem vp

11/09/2015 01:16:04
Quote Anchor link
Voor een projectje ben ik een presentatie aan het maken waarin twee webpagina's met dynamische informatie afwisselend worden getoond gedurende een aantal seconden. De body van de hoofdpagina bevat alleen maar een div (100% hoog en breed) en met behulp van AHAH roep ik een script aan dat de vulling van die div genereert. Tot zover gaat alles goed.

Echter, de gegenereerde HTML van een van die pagina's bevat een verwijzing naar een PNG-image die elke twee minuten wordt ververst. De webserver geeft een Expires-header mee van "modification plus 110 seconds", maar de doorsnee browser (Chrome/Firefox) trekt zich daar niets van aan (verrassende uitzondering hierop is Edge) en laat vrolijk het oude plaatje zien.

De gemiddelde oplossing die ik tegenkom als ik met google ga zitten spelen is het helemaal uitzetten van de caching door een parameter met een timestamp mee te geven, maar dat is nou juist iets waar ik vanaf wil. Zo moeilijk moet het toch niet zijn voor een browser om zich aan een Expires-header te houden?

Is er hier iemand die dit probleem herkent, of misschien zelfs tips heeft om het op te lossen? ;-)
 
PHP hulp

PHP hulp

25/02/2025 17:45:12
 
Ward van der Put
Moderator

Ward van der Put

11/09/2015 11:19:22
Quote Anchor link
Willem, post eens alle HTTP-headers van de PNG?
 
Willem vp

Willem vp

11/09/2015 11:49:29
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Request headers:

GET /dynamic/plaatje.png HTTP/1.1
Host: img.xxx.nl
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:40.0) Gecko/20100101 Firefox/40.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en-GB;q=0.8,en-CA;q=0.7,en;q=0.5,nl;q=0.3,nl-BE;q=0.2
Accept-Encoding: gzip, deflate
DNT: 1
Cookie: [meuk gewist]
Connection: keep-alive

Response headers:

HTTP/1.1 200 OK
Date: Fri, 11 Sep 2015 09:43:35 GMT
Server: Apache
Last-Modified: Fri, 11 Sep 2015 09:42:18 GMT
Etag: "5a2802-321e0-51f75881db16a"
Accept-Ranges: bytes
Content-Length: 205280
Cache-Control: max-age=33
Expires: Fri, 11 Sep 2015 09:44:08 GMT
Access-Control-Allow-Origin: *
Connection: close
Content-Type: image/png
 
Ward van der Put
Moderator

Ward van der Put

11/09/2015 12:21:53
Quote Anchor link
Wat gebeurt er als je caching verbiedt?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
Cache-Control: no-cache
 
Willem vp

Willem vp

11/09/2015 15:01:45
Quote Anchor link
no-cache maakt geen verschil, het plaatje blijft gecachet worden.
 
Ozzie PHP

Ozzie PHP

11/09/2015 15:28:26
Quote Anchor link
Willem ... het kan ook aan je browser-settings liggen. Veel browsers cachen iets voor zo'n korte tijd.

Je zou een "hack" kunnen proberen. Wellicht niet helemaal mooi, maar wel functioneel.

Je kunt een paramater aan je plaatje meegeven. Je browser zal dan denken dat het om een ander plaatje gaat en het plaatje opnieuw binnenhalen. Als parameter kun je dan de huidige timestamp gebruiken:

plaatje.jpg?time=1441978086
 
Ward van der Put
Moderator

Ward van der Put

11/09/2015 15:42:07
Quote Anchor link
Ozzie, volgens mij wilde Willem daar nou juist van af:
Willem vp op 11/09/2015 01:16:04:
De gemiddelde oplossing die ik tegenkom als ik met google ga zitten spelen is het helemaal uitzetten van de caching door een parameter met een timestamp mee te geven, maar dat is nou juist iets waar ik vanaf wil.

Ik denk inmiddels alleen wel dat het hierop uitdraait. Laat die random URL-parameter bijvoorbeeld genereren door JavaScript met een timer.
 
Willem vp

Willem vp

11/09/2015 17:23:30
Quote Anchor link
> plaatje.jpg?time=1441978086

Zo werkt het nu ook, maar eigenlijk wil ik daar vanaf. Het plaatje wordt elke 24 seconden getoond; dat betekent dat in de twee minuten die het 'leeft', het 4 of 5 keer wordt opgevraagd. Het zou mooi zijn als dat 3 of 4 keer vanuit de cache zou kunnen, aangezien dat heel wat belasting op de server zou schelen.

Daarnaast kan het zijn dat e.e.a. bekeken wordt via een trage verbinding. De pagina met het plaatje wordt 16 seconden getoond (en daarna komt 8 seconden de andere pagina in beeld). Als de verbinding traag is, kan het dus gebeuren dat het plaatje te kort in beeld staat om te bekijken. Wanneer de caching goed zou werken komt dit hoogstens 1x per 2 minuten voor; de andere keren wordt het plaatje dan uit de cache getoond.

In ieder geval bedankt voor het meedenken (Ward ook, natuurlijk ;-) ) en als iemand nog met een lumineuze ingeving komt, hou ik me aanbevolen.
 
Ozzie PHP

Ozzie PHP

11/09/2015 17:39:42
Quote Anchor link
>> Het zou mooi zijn als dat 3 of 4 keer vanuit de cache zou kunnen, aangezien dat heel wat belasting op de server zou schelen.

Kun je dat niet met de servertijd oplossen? Dus die parameter ?time=1441978086 pas vernieuwen op het moment dat de actuele timestamp meer dan 2 minuten groter is dan de laatste timestamp?

Dus gedurende de 1e 2 minuten gebruik je telkens ?time=1441978086 en pas na 2 minuten vervang je die parameter dan. Is dat een optie?
 
Willem vp

Willem vp

11/09/2015 18:17:05
Quote Anchor link
> Kun je dat niet met de servertijd oplossen?

Hmm, daar breng je me op een idee... Het mooiste zou zelfs zijn om als timestamp de modtime van het plaatje te gebruiken. Die staat weliswaar op een andere server, maar daar moet iets op te vinden zijn.

Intussen ben ik zelf ook weer een stapje verder. Ik heb nog wat zitten experimenteren met de HTML-code.
Oude situatie (vereenvoudigd):
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<div style="background: url('$url');"></div>

(Het script wordt generiek gebruikt en afhankelijk van de website is het plaatje anders, vandaar de $url.)

Dit werkt goed in Edge, maar niet in Chrome en Firefox (andere browsers heb ik niet geprobeerd). Elk kwartier wordt de hoofdpagina gerefresht door middel van een <meta> tag; dan wordt bij Chrome en Firefox het plaatje wél bijgewerkt.

Nieuwe situatie (vereenvoudigd):
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<div>
   <img src="$url">
</div>

Dit werkt goed in Edge en Safari (iPhone 6, alhoewel de pagina niet is ontworpen voor mobiel gebruik). In Chrome lijkt het te werken, alhoewel het plaatje net een tijd stopte met verversen; mogelijk na de <meta> refresh van de hoofdpagina. In Firefox nog steeds geen verandering.

Ik ga toch eens kijken of ik iets met de modtime van het plaatje kan doen. Als het niet kan zoals het moet...
 
Ben van Velzen

Ben van Velzen

11/09/2015 19:36:58
Quote Anchor link
Als je goed naar de response headers kijkt zie je dat de Max-Age op 33 staat, wat inhoudt dat er geen validatie tegen de server gedaan hoeft te worden "gedurende 33 seconden vanaf de request". Het is aan te raden om te kijken wat meerdere opvolgende requests teruggeven als Max-Age. Als je niet wilt dat er caching plaatsvindt of de cache met enige regelmaat wilt laten verversen moet je de controle krijgen over deze header.
 
Willem vp

Willem vp

11/09/2015 20:12:55
Quote Anchor link
De max-age klopt; die is bij elke call het verschil tussen de tijden in de Expires en Date headers.
 
Ben van Velzen

Ben van Velzen

11/09/2015 21:26:03
Quote Anchor link
Als je expires inderdaad iedere request verandert kun je ook niet spreken van van negeren, dan is het gedrag dus correct. Je bent vermoedelijk beter af met het gebruiken van ETags gebaseerd op de bestandsinhoud, en de expires header gewoon te laten zitten. ETags zijn gemaakt om direct op veranderende content in te kunnen spelen.
 
Willem vp

Willem vp

11/09/2015 22:16:01
Quote Anchor link
> Als je expires inderdaad iedere request verandert

Dat heb je mij niet horen zeggen. De Expires verandert elke keer als het bestand wijzigt. Wat wel elke request verandert is de max-age, want dat is feitelijk het verschil tussen Date en Expires (en Date wijzigt wel bij elke request).

Het probleem hier is dat Firefox (en in zekere mate ook Chrome) het bestand uit de cache blijft halen als het tijdstip dat in de Expires-header staat gepasseerd is. En m.i. is dat zeker geen correct gedrag.

Overigens wordt ook een Etag-header meegestuurd die net zo vrolijk genegeerd wordt... ;-(
Gewijzigd op 11/09/2015 22:19:41 door Willem vp
 
Ward van der Put
Moderator

Ward van der Put

12/09/2015 10:43:01
Quote Anchor link
Dat is inderdaad geen correct gedrag, maar gelukkig hebben we nu de HTML5 History API. De "photo swap" die hier wordt beschreven, lijkt op wat je wilt bereiken.
 
Willem vp

Willem vp

13/09/2015 10:18:13
Quote Anchor link
Die photo swap is exact hoe mijn pagina in elkaar zit ;-) maar dan zonder het aanpassen van de URL. Die History API kende ik nog niet, ga ik onthouden.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.