$_SERVER['REQUEST_TIME'] ?

WRInaute accro
Bonjour

Comment est-il possible de lire/avoir ces headers request HTTP en PHP :

$_SERVER['REQUEST_TIME']

$_SERVER['REQUEST_TIME_FLOAT']

Ces headers sur mon Nginx local ou site, n'y figurent pas.

Et puis, ils donnent le timestamp au moment de la requête HTTP, ou au début de l'exécution du script PHP ?

Merci beaucoup.


 
WRInaute accro
Merci beaucoup UsagiYojimbo

C'est super, je vais pouvoir calculer le header "Age", qui me permettra d'évaluer le caractère "fresh" ou "stale" de la ressource.

J'ai presque terminé le cache HTTP de la librairie de cache HTML de noren.

Bien à vous.
 
WRInaute accro
Rebonjour

Je peux calculer time() ou microtime() à la fin du script.

Car la librairie de cache HTML de noren me permet de donner le Content-Length, le ETag, le LastModified etc...

J'ai toutes les variables pour calculer le header "Age" sauf le timestamp de réception.

Merci beaucoup.
 
WRInaute accro
Voici les détails du calcul de "Age".

Le header "Age" contient le nombre de secondes écoulées depuis le dernière validation ou création de la ressource.

Age doit être incrémenté/calculé pour le test de comparaison avec max-age=N, ( "fresh" ou "stale" ).

J'ai toutes les variables sauf "response time".

Que faire ?

Merci.





Code:
age_value          => Age | 0
date_value        => Date
*******************************************
now                   => Date ?
*******************************************
The term "now" means "the current value of the clock at the host
performing the calculation". A host ought to use NTP ([RFC5905])
or some similar protocol to synchronize its clocks to Coordinated
Universal Time.
*******************************************
request_time    => $_SERVER['REQUEST_TIME']
*******************************************
The current value of the clock at the host at the time the request
resulting in the stored response was made.
*******************************************
response_time        => ?
*******************************************
The current value of the clock at the host at the time the
response was received.
*******************************************
A response's age can be calculated in two entirely independent ways:
*******************************************
1.the "apparent_age": response_time minus date_value, if the local
clock is reasonably well synchronized to the origin server's
clock. If the result is negative, the result is replaced by
zero.
                apparent_age = max(0, response_time - date_value);
*******************************************
2.the "corrected_age_value", if all of the caches along the
response path implement HTTP/1.1. A cache MUST interpret this
value relative to the time the request was initiated, not the
time that the response was received.
*******************************************
                response_delay = response_time - request_time;
               
                corrected_age_value = age_value + response_delay;
*******************************************
                corrected_initial_age = max(apparent_age, corrected_age_value);
*******************************************
The current_age of a stored response can then be calculated by adding
the amount of time (in seconds) since the stored response was last
validated by the origin server to the corrected_initial_age.
*******************************************
resident_time = now - response_time;
current_age = corrected_initial_age + resident_time;
*******************************************
Age             => current_age
*******************************************
 
WRInaute accro
Bonjour UsagiYojimbo

Maintenant je met "response time" à Date + 1 sec.

Je calcule tout en UTC.

J'ai tout, sauf le calcul de la freshness time en fonction de LastModified et Date.

Il semblerait que : freshness_time = (Date - LastModified ) / 10.

Si ceci est < max-age server, c'est fresh sinon stale.

Comment expliquer ce "/ 10 " ?

Avec un max-age=3600 celà fait 36000 secondes ?

Merci beaucoup.
 
WRInaute accro
Rebonjour

Voici ce que çà donne sans ETag activé ni IfModifiedSince.

Le Cache-Control server max-age=300.

Je ne traite pas Expires.

Tout le reste est traité, y compris non activé.

J'ai un problème ( voir message précédent ).

Merci beaucoup de votre aide.


Code:
        ******************************************
            CLIENT HEADERS
        ******************************************
        Expires: 
        Cache-Control: max-age=0
        ******************************************
        Methode : 1
        $age_value = 0
        $request_date = Sat, 01 Oct 2022 12:40:34 GMT
        $response_date = Sat, 01 Oct 2022 12:40:35 GMT
        $delta_apparent_age = 1
        $apparent_age = 1
        $response_delay = 1
        $corrected_age_value = 1
        $corrected_initial_age = 1
        $resident_time = 1
        next $current_age = 2
        header("HTTP/1.1 All Done 200 OK")
        ******************************************
            SERVER HEADERS
        ******************************************
        Date: Sat, 01 Oct 2022 12:40:34 GMT
        Accept-Language: fr-FR,fr;q=0.9,en-US;q=0.8,en;q=0.7
        Accept-Encoding: gzip, deflate, br
        Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
        User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36
        Connection: keep-alive
        Host: localhost
        Cache-Control: max-age=300
        Content-Location: "http://localhost/"
        Last-Modified: Sat, 01 Oct 2022 12:40:34 GMT
        Etag: "d41d8cd98f00b204e9800998ecf8427e"
        IfModifiedSince: Sat, 01 Oct 2022 12:33:15 GMT
        IfNoneMatch: "d41d8cd98f00b204e9800998ecf8427e"
        Vary: Accept-Encoding
        Age: 2
        Content-Length: 21845
        ******************************************
        ******************************************
            CLIENT HEADERS
        ******************************************
        Expires: 
        Cache-Control: max-age=0
        ******************************************
        Methode : 1
        $age_value = 61
        $request_date = Sat, 01 Oct 2022 12:41:35 GMT
        $response_date = Sat, 01 Oct 2022 12:41:36 GMT
        $delta_apparent_age = 1
        $apparent_age = 1
        $response_delay = 1
        $corrected_age_value = 62
        $corrected_initial_age = 62
        $resident_time = 1
        next $current_age = 63
        ******************************************
            SERVER HEADERS
        ******************************************
        Date: Sat, 01 Oct 2022 12:41:35 GMT
        Accept-Language: fr-FR,fr;q=0.9,en-US;q=0.8,en;q=0.7
        Accept-Encoding: gzip, deflate, br
        Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
        User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36
        Connection: keep-alive
        Host: localhost
        Cache-Control: max-age=300
        Content-Location: "http://localhost/"
        Last-Modified: Sat, 01 Oct 2022 12:40:34 GMT
        Etag: "6c1199c2b240ca261125c92a0ae3b1a7"
        IfModifiedSince: Sat, 01 Oct 2022 12:40:34 GMT
        IfNoneMatch: "d41d8cd98f00b204e9800998ecf8427e"
        Vary: Accept-Encoding
        Age: 63
        ******************************************
        header("HTTP/1.1 Cache-Control 304 Not Modified")
 
WRInaute accro
Rebonjour

J'ai deux questions à poser.

Pratiquement tout est fait dans mon add-on de cache HTTP à la librairie de cache HTML de noren.

Ma première question :

Quand le Cache-Control client est à no-store, il ne faut pas mettre en cache ?

Quand c'est no-cache, il ne faut pas lire le cache ?

Ma deuxième question :

J'ai vu sur le net que lors d'un "304 Not Modified", il ne fallait pas rendre tous les headers.

C'est sûr pour le "Content-Length" qui ne doit pas y être.

Mais y a-t-il d'autres headers à ne pas mettre ?

Merci beaucoup.
 
WRInaute accro
Une question théorique

A propos des caches HTTTP et des "304 Not Modiified" :

S'il y a des nonces dans le HTML, les nonces restent-ils constants lors des lectures dans le cache ?

Merci.
 
WRInaute accro
Problème résolu

Je conserve les nonces par client et request_uri.

Je les update en cas de "200 OK".

Chaque fichier a un nom code client anonyme.

Dans chaque fichier, chaque ligne est de la forme : id_request_uriXXYnonce

Mon dossier/répertoire est en partittion tmpfs.

Je vais tester/retester puis mettre en ligne.

Bien à vous.
 
WRInaute accro
Rebonjour

Celà a l'air de marcher, je tiens compte de tous les headers, sauf Expires.

Dans la documentation, il est dit qu'il ne faut pas ( au niveau navigateur ) prendre en compte le Expires si le Cache-Control figure parmi les headers server.

Est-ce que c'est vrai, ou faut-il tenir compte côté serveur du Expires, si le Cache-Control ne déclenche pas une '304 Not Modified" ?

Pour mémoire, voici la logique :

Tant que pas 304, critère suivant :

Critères :

- Cache-Control,

- ETag & NotModifiedSince,

- ETag,

- NotModifiedSince,

- LastModified.

=> "200 OK".


Dois-je ajouter le critère Expires ?

Merci beaucoup.
 
WRInaute accro
Bof...

J'ai entièrement renoncé à mon projet de cache HTTP.

En fait, le cache du navigateur souvent ne répond pas ( vide ) celà donne des pages vides en 304.

J'ai remis le cache HTML de noren.

Merci beaucoup noren. ;)
 
WRInaute accro
ac1e7fbc2db6a2f8da59702359791960.jpg
 
WRInaute accro
Une question...

Quand un navigateur réagit aux headers serveur en gérant son cache et en envoyant les request headers au serveur, est-il possible pour le serrveur d'interpréter les headers clients **par programme**, et de simuler le comportement normal du serveur ?

J'ai eu une erreur hier sur mon site qui venait probablement du fait que j"ignorais le "no-cache" du client, et que je voulais lui imposer de cacher la réponse.

Ma question est : Le dialogue de headers entre client et serveur, entraîne-t-il nécessairement complètement le comportement du navigateur ?

Le navigateur peut-il décider tout d'un coup de ne plus cacher une réponse, alors que les headers lui disent de le faire ?

Merci aussi à Spout de s'abstenir d de ses malencontreuses moqueries.

Amicalement.
 
WRInaute accro
Rebonjour

Je vais essayer de reproduire strictement toute la logique de l'algorithme du cache HTTP.

J'avais oublié de mettre "Must Revalidate" en réponse.

Le cache n 'était plus actif, la page était vide.

Bien à vous.
 
WRInaute accro
Bonjour

Le header Cache-Control de la page d'accueil de https://www.webrankinfo.com, inclut :

private, max-age=0, must-revalidate, no-cache, no-store

Il comporte aussi le Expires, à une date antérieure à Date.

Deux questions :

- Pourquoi le must-revalidate si le cache est interdit ?

- Si pas de cache, à quoi bon le Expires ?

Merci beaucoup.
 
Discussions similaires
Haut