Perché l '"ultima modifica" non è corretta su Google Cloud Platform App Engine?

Sep 09 2020

Ho distribuito più volte il mio Web su Google Cloud Platform App Engine. Utilizzando l'impostazione come segue:

app.yaml

runtime: nodejs10

Tutto ha funzionato bene quando l'ho testato su localhost. Ma quando l'ho distribuito su Google Cloud Platform. L'intestazione della risposta è sempre visualizzata last-modified: Tue, 01 Jan 1980 00:00:01 GMT. Ho controllato [my-web].df.r.appspot.comper assicurarmi che il problema provenga da Google Cloud Platform.

Qualcuno ha un'idea?

Aggiornato 2020-10-07
Per chiunque abbia lo stesso problema, non esitate a partecipare alla discussione qui .

Risposte

SamuelRomero Sep 10 2020 at 00:03

Questo sembra essere un problema causato dalla cache. Per assicurarti che il nuovo index.html sia distribuito, dovresti eseguire "gcloud beta app deploy --no-cache", potrebbe essere necessario aggiungere campi aggiuntivi come app.yaml come menzionato qui . Ciò garantirebbe che il nuovo index.html associato alla tua versione venga inserito nel contenitore.

JoshKrieger Sep 13 2020 at 20:34

Stiamo riscontrando lo stesso problema che la versione precedente di index.html viene rilevata dai client dopo aver ridistribuito un'app standard di appengine. Questo problema sembrava iniziare a metà agosto. Inizialmente abbiamo scoperto che l'aggiunta di una riga al file HTML del client come: sembrava risolvere il problema. Ma questo non funziona più.

NimeetShah Oct 15 2020 at 09:57

Ho avuto lo stesso problema del vecchio index.htmlessere servito. Il problema era con il etagche è stato generato. Anche se i file sono cambiati, sono etagrimasti gli stessi.

Ciò ha causato la pubblicazione del file dalla cache del browser con codice di stato 304. Il colpevole era il mio app.yamlfile, che era

runtime: nodejs10

Modificandolo al di sotto ha risolto il problema.

env: standard
runtime: nodejs10
default_expiration: '14d'

handlers:
  - url: /static
    static_dir: build/static
    secure: always

  - url: /(.*\.(json|ico))$ static_files: build/\1 upload: build/.*\.(json|ico)$
    secure: always

  - url: .*
    static_files: build/index.html
    upload: build/index.html
    expiration: '5s'
    secure: always
WouterdeWinter Nov 15 2020 at 19:11

Apparentemente, questo è un comportamento in base alla progettazione poiché tutti i timestamp vengono azzerati durante la distribuzione dal motore dell'app. vedere:https://issuetracker.google.com/issues/168399701

Stavo inviando io stesso i file statici usando express. Quindi ho risolto il problema non impostando l'etichetta e le intestazioni dell'ultima modifica. Per esempio:

app.use("/", express.static(root, { etag: false, lastModified: false }));

O per singoli file:

app.get("/*", async (req, res) => {
  return res.sendFile("index.html", { root, lastModified: false, etag: false });
});