Browser negeert Expires-header

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Traineeship Full Stack .NET Developer

Dit ga je doen Start op 7 augustus bij de Experis Academy en ontwikkel jezelf tot een gewilde Full Stack .NET Developer. Maar hoe ziet het traineeship eruit en wat kun je verwachten? Periode 1 De eerste 3 maanden volg je fulltime, vanuit huis, een op maat gemaakte training in teamverband. Je leert belangrijke theorie en krijgt kennis van de benodigde vaardigheden en competenties die nodig zijn om de IT-arbeidsmarkt te betreden. Zowel zelfstandig als in teamverband voer je praktijkopdrachten op het gebied van front- en backend development uit. Wat er per week op het programma staat kun je hier

Bekijk vacature »

Back-End Web Developer

Als Back-End Web Developer bij Coolblue zorg je ervoor dat onze webshops elke dag een beetje beter zijn. Wat doe je als Back-End Web Developer bij Coolblue? Als Back-End Web Developer werk je met andere development teams samen om onze webshop zo optimaal mogelijk te laten werken en onze klanten blij te maken. Als backend developer weet je de weg in PHP, kan je in Typescript een microservice op zetten of ben je bereid om dit te leren. Ook Web Backend Developer worden bij Coolblue? Lees hieronder of het bij je past. Dit vind je leuk om te doen PHP

Bekijk vacature »

Als Front-end developer bijdragen aan het onderwij

Functie Als front-end developer om je terecht in een team van goede en ervaren developers, en ga je werken aan de software die door miljoenen mensen gebruikt wordt. Je bent in staat om designs effectief te vertalen naar werkende feautures en hebt oog voor een goede UX van het product. Je staat voor clean code en goede documentatie. Je ziet toegevoegde waarde in het beoordelen van het werk van collega’s om zo samen te streven naar hoge kwaliteit software en code. Je dagelijkse werk bestaat uit het werken aan componenten in de Storybook. Het verbeteren en refactoren van de huidige

Bekijk vacature »

Java Developer bij een jonge groeiende organisatie

Bedrijfsomschrijving Vind jij het als Java developer ook zo belangrijk dat een bedrijf je de ruimte en tijd geeft voor persoonlijke ontwikkeling? Dan zit je hier helemaal goed. Deze jonge organisatie is opgericht in 2018 en is ondertussen uitgegroeid tot een club van ongeveer 30 medewerkers. Het gaat hier om een echte Java club, die vrijheid en verantwoordelijkheid erg belangrijk vinden. Het bedrijf heeft een informele sfeer en de teams zijn erg hecht met elkaar. Ze delen graag de kennis en ervaringen met anderen, maar vinden andermans mening ook zeer belangrijk. De organisatie zet zich in voor ontwikkeling en besteed

Bekijk vacature »

Front-End Developer

As a Front-End Developer at Coolblue you improve the user-friendliness of our webshop for millions of customers. How do I become a Front-End Developer at Coolblue? As a Front-End Developer you work on the user-friendliness of our webshop for millions of customers. You enjoy working with the UX Designer to pick up stories. You get energy from coming up with creative solutions and are happy to present these within the team. You also take pride in your work and welcome any feedback. Would you like to become a Front-End Developer at Coolblue? Read below if the job suits you. You

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 »

Front-end developer (Angular)

Functie Het team bestaat uit een architect, fullstack developers, app developers, de product owner en projectmanager. Eenieder draagt vanuit zijn discipline bij aan een complete oplossing voor de klant. Uiteraard zul je hierin nauw samenwerken met je collega’s. Jij wordt verantwoordelijk voor de front-end implementatie en fungeert als lead op dit gebied binnen het team. Je kunt helder formuleren, ideeën uitdragen en overbrengen aan je collega’s. Qua technische stack is het vooral van belang dat je ervaren bent met Angular, HTML5, CSS en TypeScript. Verder is ervaring in NgRx, Bootstrap, BEM en Cypress een pré, evenals affiniteit met UX/UI Design!

Bekijk vacature »

Front-end Developer

Do you want to work with the latest technologies on the development of new systems and applications? Create elegant interfaces using VueJS for thousands of users? Get moving and strengthen Nederlandse Loterij as a Front-end Developer. Thanks to your efforts, our services are always presented in style. As a Front-end Developer you are responsible for website development and improving customer experience based on data analyze. In this way, you directly contribute to a happy, healthy and sporty Netherlands. As a Front-end Developer you score by: Writing elegant, testable components without side-effects to provide functionality to the users Website development, adding

Bekijk vacature »

WordPress & Azure Developer

Dit ga je doen Zowel front- als back-end development aan de online website omgeving; Het up-to-date houden van alle WordPress-sites; Koppelingen maken tussen applicaties; Meedenken en adviseren over verbeteringen; Development door middel van WordPress, Javascript, HTML en CSS; Werken binnen Scrum/Agile team. Hier ga je werken Voor een grote overheidsinstelling in Den Haag zijn wij opzoek naar een WordPress developer, met kennis en ervaring op het gebied van Azure. De organisatie zit in een grote transitie waarbij de gehele website/online omgeving vernieuwd zal gaan worden. Binnen dit Scrum/Agile team ben je verantwoordelijk voor deze grote migratie/ombouw van de omgeving. De

Bekijk vacature »

C# developer

Functie omschrijving We are looking for a dutch native speaker Ik ben op zoek naar een back-end developer, die met name kennis & ervaring heeft van de programmeertaal C#. Jij gaat aan de slag bij een topspeler in de logistieke sector, die zich behalve met logistiek, ook bezig houdt met softwareontwikkeling. Welke taken komen hierbij kijken? Je gaat desktop- en webapplicaties onderhouden en optimaliseren, waarin je werkt met o.a. C#, ASP.NET, SQL Server en T-SQL. Je hebt regelmatig klantcontact om de wensen in kaart te brengen en te evalueren over de huidige draaiende applicaties. Je implementeert nieuwe functionaliteiten toe aan

Bekijk vacature »

Senior Developer ERP Dynamics 365

Samengevat: Deze werkgever is een softwarebedrijf. Ben jij een enthousiaste developer? Heb je ervaring met ERP of Dynamic 365 bussines central? Vaste baan: ERP Applicatie Specialist ERP MBO €3.600 - €5.200 Wij houden ons als bedrijf bezig met het leveren en implementeren van het Microsoft Dynamics pakket binnen verschillende industriële sectoren. Deze werkgever is een veelzijdige organisatie. Je werkt voor de eigen IT organisatie. Zij werken met moderne technologie en staan open voor innovatie. Binnen ons open team is er een no-nonsense cultuur. Daarnaast is er veel onderling contact door de korte communicatielijnen. Het team werkt enthousiast samen om een

Bekijk vacature »

Medior/Senior Python developer

Functie Jij als Senior Python developer hebt al ruime ervaring opgedaan. Bedrijven komen bij de organisatie om technische vraagstukken op te lossen. Jij als specialist bent dus de representatie van deze kwaliteit. Je zult de keuze krijgen tussen lange of korte projecten waarin je komt te werken in multidisciplinaire teams. Projecten die je gaat uitvoeren zijn zeer uitlopend. Zodoende kun je aan de ene kant kiezen voor een greenfield project en stroom je bij een ander project midden in een migratietraject in. Voor de ene klant ontwikkel je ene nieuwe portal en voor het andere project duik je veel meer

Bekijk vacature »

.NET developer

Functie Als .NET developer start jij in een ontwikkelteam met 15 developers en twee testers. Samen zijn jullie verantwoordelijk voor financiële applicaties met meer dan 50.000 gebruikers. Een deel van het team is verantwoordelijk voor de webapplicaties van deze organisatie. Ook zijn er twee app ontwikkelaars werkzaam in het team die zich focussen op de mobiele applicatie. Als .NET ontwikkelaar ga jij aan de slag met de webapplicaties van deze organisatie. Hierbij maak jij o.a. gebruik van C# .NET, ASP.NET, T-SQL, Angular en TypeScript. De nadruk van jouw functie ligt wel op de backend van de applicatie. Wat jouw functie

Bekijk vacature »

Junior/medior Back end developer PHP, Laravel

Functie Jij als ontwikkelaar komt te werken in een team bestaande uit 4 back end programmeurs, 2 vormgevers/ Front end developers en een online marketeer. Qua persoonlijkheden is het team erg gevarieerd van sportfanaten tot gameliefhebbers en Golfers. Een ding heeft iedereen hier gemeen; Passie voor goede code. In jouw rol zul je voor veel van je tijd je bezig houden met het ontwikkelen van maatwerk features en applicaties. Daarnaast hebben wij op aanvraag ook wel eens een website of onderhoudsklusje, die opgepakt moet worden en hier ben jij ook niet vies van. Jij als full stack developer zult dus

Bekijk vacature »

Medior/Senior Python developer (Django)

Functie Je komt te werken in het IT-team bestaande uit de Lead developer en 4 (medior/senior) developers. Gezamenlijk werken jullie aan de verbetering en uitbreiding van de software. Binnen het development team is er veel vrijheid en zelfstandigheid, zonder dat ze hiermee afdoen aan de kwaliteit. Zo hebben ze elke ochtend een korte stand-up (10:00 uur) en werken ze met pair-programming sessies. Ook is er een hele professionele ontwikkelcyclus waarbij code altijd eerst door een collega wordt getest voordat het naar deployement gaat. Er is een kwaliteitsfocus en dan biedt ruimte om verbeteringen echt door te voeren binnen de gehele

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

28/04/2024 20:54:00
 
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.