Hallo,
Ik werk bij een softwarebedrijf en heb een client-programma geschreven dat onze software automatisch updatet. Dit gaat over standaard http-verkeer, poort 80.
Update-pakketten worden op de server als zip-file aangemaakt. Het zippen duurt even, dus ik heb een status-check ingebouwd; de client controleert om de 2 seconden wat de status van het zippen is via een URL.
Op die status-URL heb ik in eerste instantie code 200 gebruikt, maar dan geen reason-phrase OK, maar Bezig (indien nog bezig) of Klaar als de zip-file gereed staat.
Bij een klant van ons bleek dit niet goed te werken, zij kregen gewoon 200 OK door, dus de check op 'Bezig' of 'Klaar' ging de mist in. Dit zag ik in een logfile dat aangemaakt is door de client-software. Dit loggen heb ik ingebouwd om te weten wat er speelt als er problemen zijn, dus om dan te kunnen debuggen.
Die klant draait een Linux Smoothwall (www.smoothwall.org) met daarin een transparante squid-proxy/cache. Dit heb ik nagevraagd nadat ik in het logfile zag staan: X-Cache: MISS from <proxycomputer>.
Nu dacht ik, dan ligt het misschien aan het gebruiken van 200 Bezig ipv 200 OK. In ieder geval iets om te testen. Dus ik ben maar eens overgestapt op code 202 voor bezig en 201 voor klaar. Ik heb er ook nog voor gezorgd dat alles via HTTP/1.1 verloopt en niet via 1.0.
Maar dan nog blijkt de proxy/cache het resultaat te veranderen naar HTTP/1.0 (!) en 200 OK! Het lijkt er voor mij dus op dat alles > 200 gewoon naar 200 wordt vertaald?!
Bij een tweede klant, die SME Server gebruikt (www.contribs.org , ook zoiets als Smoothwall en ook met Squid), treedt precies hetzelfde probleem op (en ook zo'n X-Cache: MISS from ... header in het debug-log).
Van andere klanten heb ik niet over dit probleem gehoord, daar zullen de http response-codes niet veranderd worden, maar die zullen waarschijnlijk geen transparante cache gebruiken.
Zelf ben ik dit ook niet tegengekomen tijdens ontwikkelen. Ik heb Ethereal gedraaid naast de client, en ik krijg gewoon 201/202 binnen op de goede manier.
Ik heb nog niet zelf getest met een transparante squid-proxy. Dit zal ik wellicht alsnog moeten doen, maar dan moet ik om een test-PC vragen waar ik SME of Smoothwall op kan installeren.
Maar dit is toch ook niet iets waar je direct rekening mee houdt, een proxy zou dit toch niet mogen/moeten doen? Weet iemand hoe dit zou kunnen, mag een proxy zomaar een response veranderen, waarom wordt niet gewoon 201 en 202 doorgegeven met HTTP/1.1?
Als ik in de docs en source kijk van Squid zie ik dat er wel rekening gehouden is met 201 en 202 e.d., dat zou ook raar zijn als ze het niet zouden doen. Maar waarom gebeurt het dan toch?
Ik heb gezocht bij Squid, SME en Smoothwall op de forums e.d. en via Google, maar dit is zo'n probleem waar je echt precies de juiste zoektermen gebruikt moet hebben wil je iets zinvols tegenkomen... niks gevonden dus wat zou kunnen helpen of verklaren.
Ik vraag het nu eerst hier omdat ik nog niet zeker weet of het nu aan iets ligt dat ikzelf toch nog fout doe, of toch aan Squid. Of zou het ook nog aan Smoothwall of SME server kunnen liggen? Misschien hebben jullie ideeën waar ik nog niet aan gedacht heb of weten jullie van bugs af.
Zou ik misschien iets kunnen regelen met no-cache directives op bepaalde plaatsen?
Ik werk bij een softwarebedrijf en heb een client-programma geschreven dat onze software automatisch updatet. Dit gaat over standaard http-verkeer, poort 80.
Update-pakketten worden op de server als zip-file aangemaakt. Het zippen duurt even, dus ik heb een status-check ingebouwd; de client controleert om de 2 seconden wat de status van het zippen is via een URL.
Op die status-URL heb ik in eerste instantie code 200 gebruikt, maar dan geen reason-phrase OK, maar Bezig (indien nog bezig) of Klaar als de zip-file gereed staat.
Bij een klant van ons bleek dit niet goed te werken, zij kregen gewoon 200 OK door, dus de check op 'Bezig' of 'Klaar' ging de mist in. Dit zag ik in een logfile dat aangemaakt is door de client-software. Dit loggen heb ik ingebouwd om te weten wat er speelt als er problemen zijn, dus om dan te kunnen debuggen.
Die klant draait een Linux Smoothwall (www.smoothwall.org) met daarin een transparante squid-proxy/cache. Dit heb ik nagevraagd nadat ik in het logfile zag staan: X-Cache: MISS from <proxycomputer>.
Nu dacht ik, dan ligt het misschien aan het gebruiken van 200 Bezig ipv 200 OK. In ieder geval iets om te testen. Dus ik ben maar eens overgestapt op code 202 voor bezig en 201 voor klaar. Ik heb er ook nog voor gezorgd dat alles via HTTP/1.1 verloopt en niet via 1.0.
Maar dan nog blijkt de proxy/cache het resultaat te veranderen naar HTTP/1.0 (!) en 200 OK! Het lijkt er voor mij dus op dat alles > 200 gewoon naar 200 wordt vertaald?!
Bij een tweede klant, die SME Server gebruikt (www.contribs.org , ook zoiets als Smoothwall en ook met Squid), treedt precies hetzelfde probleem op (en ook zo'n X-Cache: MISS from ... header in het debug-log).
Van andere klanten heb ik niet over dit probleem gehoord, daar zullen de http response-codes niet veranderd worden, maar die zullen waarschijnlijk geen transparante cache gebruiken.
Zelf ben ik dit ook niet tegengekomen tijdens ontwikkelen. Ik heb Ethereal gedraaid naast de client, en ik krijg gewoon 201/202 binnen op de goede manier.
Ik heb nog niet zelf getest met een transparante squid-proxy. Dit zal ik wellicht alsnog moeten doen, maar dan moet ik om een test-PC vragen waar ik SME of Smoothwall op kan installeren.
Maar dit is toch ook niet iets waar je direct rekening mee houdt, een proxy zou dit toch niet mogen/moeten doen? Weet iemand hoe dit zou kunnen, mag een proxy zomaar een response veranderen, waarom wordt niet gewoon 201 en 202 doorgegeven met HTTP/1.1?
Als ik in de docs en source kijk van Squid zie ik dat er wel rekening gehouden is met 201 en 202 e.d., dat zou ook raar zijn als ze het niet zouden doen. Maar waarom gebeurt het dan toch?
Ik heb gezocht bij Squid, SME en Smoothwall op de forums e.d. en via Google, maar dit is zo'n probleem waar je echt precies de juiste zoektermen gebruikt moet hebben wil je iets zinvols tegenkomen... niks gevonden dus wat zou kunnen helpen of verklaren.
Ik vraag het nu eerst hier omdat ik nog niet zeker weet of het nu aan iets ligt dat ikzelf toch nog fout doe, of toch aan Squid. Of zou het ook nog aan Smoothwall of SME server kunnen liggen? Misschien hebben jullie ideeën waar ik nog niet aan gedacht heb of weten jullie van bugs af.
Zou ik misschien iets kunnen regelen met no-cache directives op bepaalde plaatsen?
