Browser negeert Expires-header

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

SQL developer

Functieomschrijving Voor een erkende werkgever in de omgeving van Tilburg zijn wij op zoek naar een ervaren SQL ontwikkelaar. Hier wordt jij mede verantwoordelijk voor zowel de design en implementatie van SQL-databases als voor het verstaan van de processen van klanten naar het vertalen van deze processen naar IT-oplossingen. Jouw takenpakket komt er als volgt uit te zien: Het ontwerpen en implementeren van databaseschema's: Je bent in staat om een database te ontwerpen en de structuur van tabellen, relaties, indexen en andere objecten te definiëren; Het schrijven van complexe SQL-query's: Je kunt complexe query's schrijven om gegevens uit de database

Bekijk vacature »

C# Ontwikkelaar

In het kort Als C# .NET Core ontwikkelaar ga je binnen onze business unit Transport en Logistiek aan de slag complexe maatwerk software voor bedrijf kritische systemen binnen de technische automatisering. Denk bijvoorbeeld een IoT-oplossing voor de logistieke sector waarbij we van ruim 200.000 machines de telemetrie en events verwerken. We zijn actief in de distributielogistiek, havenlogistiek en productielogistiek. Naast C# en .NET Core maken we ook gebruik van Azure technologie. En als trotse Microsoft Gold Partner leren we graag van en met jou. Wil jij jezelf blijven ontwikkelen binnen de technische automatisering met .NET, dan gaan we deze uitdaging

Bekijk vacature »

Delphi developer

Functie Als Delphi developer ga jij aan de slag in een team met twee andere ervaren Delphi programmeurs waaronder de Hoofd programmeur. Als team zijn jullie verantwoordelijk voor de doorontwikkeling van jullie bestaande applicatie. Daarnaast zijn jullie verantwoordelijk voor het onderhouden van deze applicatie en het oplossen van eventuele bugs. Eisen - HBO werk en denk niveau; - Minimaal één jaar ervaring met Delphi; - Goede beheersing van de Nederlandse taal in woord en geschrift; - Jij bent zelfstandig, maar kan ook in team verband werken. Aanbod - €3000,-- €4000,- op basis van jouw kennis en ervaring; - 8% vakantiegeld;

Bekijk vacature »

Medior C# Developer

You'll build modern applications for Coolblue's back office. We have a lot of friends, and they crave well-structured data and user-friendly, task-focused applications. How do I become a Medior C# Developer at Coolblue? You regularly participate in brainstorm sessions about user experience, data, and task flow with the UX Designer, Product Owner, and Data Scientists in your team. Besides that you will create disconnected, highly congruent, and testable code that can easily be maintained and is future-proof. Want to become C# Developer at Coolblue? Read below if the job suits you. You enjoy doing this Working with various types of

Bekijk vacature »

Ambitieuze medior developer

Wat je gaat doen: Heb jij al een paar jaar ervaring als developer maar wil jij naar the next level? In ons NextLevelDev Programma helpen wij jou om de volgende stap te zetten: een mooi programma aan trainingen op het gebied van Java, hippe frameworks, Agile/Scrum, OCP-certificering en optioneel: andere JVM-talen als Kotlin en Scala; Cloud (AWS, Azure, GCP) Soc 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

Bekijk vacature »

Ervaren Software Developer

Functie omschrijving Ben jij een ervaren Software Developer, en heb je ervaring met technieken zoals C#, MS Access & SQL? Vind jij het leuk om maatwerk software te ontwikkelen voor klanten in een specifieke branche? Dan is dit de baan voor jou! Als ontwikkelaar ben jij samen met een team van 12 collega’s verantwoordelijk voor het bouwen van nieuwe functionaliteiten en het uitbreiden van de core applicatie. Belangrijk is dat je ervaring hebt met C# en MS Access. Je bent flexibel en klantvriendelijk ingesteld, omdat het belangrijk is om de klanten zo goed mogelijk van dienst te kunnen zijn. Thuiswerken

Bekijk vacature »

Senior .NET developer

Functie As a Senior .NET developer you will work in our Research & development team. Our team consists of 17 colleagues! We are currently busy setting up a completely new architecture for a new product. We use VS2022 and .NET 6.0 for our new product. Your function is therefore mainly backend oriented. Since we develop measuring equipment for the chemical industry, it is also very important to develop high-quality software for its control. You are also responsible for designing, implementing and testing new features. For this position its also very important to ensure future-proof and sustainable architecture. Eisen - A

Bekijk vacature »

Embedded Software Developer

Functie omschrijving Voor een mooi softwarebedrijf in omgeving Ridderkerk zijn wij op zoek naar een Embedded Software developer. Ben jij enthousiast en een echte team player? Lees dan snel of dit iets voor jou is! Binnen deze rol houdt jij je bezig met alle werkzaamheden die nodig zijn om een functionaliteit te bouwen. Denk aan ontwerpen, architectuur, programmeren en algoritmes. Je voert test en validatie werkzaamheden uit bij de implementatie bij de klant. Ben jij een Embedded Software Developer die affiniteit heeft met de allernieuwste technieken? Laat dan snel wat van je horen! Bedrijfsprofiel Onze opdrachtgever bestaat uit een groot

Bekijk vacature »

(Lead) PHP Software Developer

Functie omschrijving Voor een klein softwarebedrijf in Breda, zijn wij op zoek naar een PHP software developer met een aantal jaar werkervaring. Je krijgt een plek in een klein team met 2 andere software developers. Wil jij graag werken met de nieuwste technieken bij een bedrijf waar jij de lead gaat nemen in de verder ontwikkeling en modernisering van een eigen software pakket? Dan ben je hier aan het juiste adres! Jouw werkzaamheden gaan er als volgt uit zien: Je gaat aan de slag met de ontwikkeling en vernieuwing van het "in-house" ontwikkelde multimedia platform. Je neemt de lead in

Bekijk vacature »

Leidinggevend Full Stack Developer

Hé jij, nieuwe Pinkcuber! Ga aan de slag bij Pinkcube, online leverancier van promotieartikelen! Een innovatieve organisatie waar extra stappen zetten voor klanten de normaalste zaak van de wereld is. Ambitieus zijn we ook. ‘Naoberschap’ staat bij Pinkcube hoog in het vaandel; we helpen elkaar en iedereen is welkom. Pinkcube is Great Place to Work Certified, erkend leerbedrijf, maatschappelijk betrokken partner van stichting Present en partner van CliniClowns. En misschien wel jouw nieuwe werkgever. Wij zoeken namelijk een enthousiaste: Leidinggevend Full Stack Developer (40 uur, medior/senior) Ben jij klaar om baanbrekende ideeën tot leven te brengen en deel uit te

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 »

Fullstack Developer

Functieomschrijving Heb je kort geleden jouw HBO diploma ICT development behaald? Of zit je nog aan het begin van je carrière en heb je affiniteit met C#.NET? Voor een erkende werkgever in de omgeving van Oosterhout zijn wij op zoek naar een fullstack developer. Als C#.NET developer werk je samen met een vooruitstrevend team aan het ontwikkelen van maatwerk software voor klanten. Je hebt affiniteit met SQL, maar nog belangrijker is dat je kennis en ervaring hebt met C#.NET. Jouw werkzaamheden zien er als volgt uit: Het ontwikkelen van onze high-availability en high-performance backend; Je begint de dag rond 8:30

Bekijk vacature »

Junior .NET Software Developer

Dit ga je doen Software development met behulp van C# .NET en / of PHP, je mag zelf kiezen waar jij je in wil specialiseren Meedenken over het nieuwe pakket, waar moet het aan voldoen? Unit-, integratie- en diverse andere tests schrijven en uitvoeren Nauw samenwerken met je IT collega's zoals Testers, Developers, DevOps Specialisten en Architecten Jezelf ontwikkelen met behulp van trainingen en cursussen Hier ga je werken Onze klant, een grote speler in de medische sector, is op zoek naar een enthousiaste junior (of meer ervaren) Software Developer die klaar is voor een nieuwe stap in zijn of

Bekijk vacature »

Infrastructure Developer

Vacature details Vakgebied: Software/IT Opleiding: Senior Werklocatie: Eindhoven Vacature ID: 12945 Introductie Our client is one of the most innovative companies within the Netherlands. Currently we are looking for an Infrastructure Platform Engineer. Within this role you will be developing the infrastructure. Functieomschrijving Within this role you are responsible in the development of our distributed data and compute platform infrastructure. You will design, develop and implement new features and fixes. Next to this you will integrate and configurate other packages that supports the development of tuning applications within the organisation. You will support customer sites remotely. Design and implement the

Bekijk vacature »

Fullstack Developer TOTO

Do you want to work with the latest technologies on the development of new systems and applications? Get moving and strengthen Nederlandse Loterij as a Fullstack Developer TOTO. Thanks to your efforts, complex business critical applications are always running smoothly. In this way, you directly contribute to a happy, healthy and sporty Netherlands. As a Fullstack Developer you score by: Taking ownership of the development cycle of an application in a large scale, high availability, geo redundant landscape Coaching your peer developers and safeguarding code quality Integrating the application with other components of the system using the available API’s Managing

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/03/2024 19:38:54
 
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.