Attualmente sto lavorando su un sito Web, che genera un net::ERR_HTTP2_PROTOCOL_ERROR 200
errore su Google Chrome. Non sono sicuro di cosa possa provocare questo errore, ho appena notato che viene visualizzato solo quando si accede al sito Web in HTTPS. Non posso essere sicuro al 100% che sia correlato, ma sembra che impedisca l'esecuzione corretta di JavaScript.
Ad esempio, si verifica il seguente scenario:
Sto accedendo al sito Web in HTTPS
Il mio feed Twitter integrato tramite https://publish.twitter.com non è caricato affatto
Posso notare nella console ERR_HTTP2_PROTOCOL_ERROR
Se rimuovo il codice per caricare il feed di Twitter, l'errore rimane
Se accedo al sito Web in HTTP, viene visualizzato il feed Twitter e l'errore scompare
Google Chrome è l'unico browser Web che attiva l'errore: funziona bene su Edge e Firefox. (NB: ho provato con Safari e ho un kcferrordomaincfnetwork 303
errore simile )
Mi chiedevo se potesse essere correlato all'intestazione restituita dal server poiché c'è questa menzione "200" nell'errore e una pagina 404/500 non sta attivando nulla.
La cosa è che l'errore non è affatto documentato. La ricerca di Google mi dà pochissimi risultati. Inoltre, ho notato che appare su versioni molto recenti di Google Chrome; l'errore non viene visualizzato su v.64.X, ma su v.75 + (indipendentemente dal sistema operativo; sto lavorando su Mac tho).
Qualsiasi indizio a questo punto per indagare sarebbe felicemente apprezzato!
Grazie in anticipo.
Tristan
Modifica 1: potrebbe essere correlato al sito Web OK su Firefox ma non su Safari (errore 303 kCFErrorDomainCFNetwork) né Chrome (net :: ERR_SPDY_PROTOCOL_ERROR)
Modifica 2: i risultati di ulteriori indagini sono i seguenti:
- l'errore non viene visualizzato esattamente sulla stessa pagina se il server restituisce 404 anziché 2XX
- l'errore non viene visualizzato in locale con un certificato HTTPS
- viene visualizzato un errore su un server diverso (entrambi sono OVH), che utilizza un certificato diverso
- l'errore viene visualizzato indipendentemente dalla versione di PHP, dalla 5.6 alla 7.3 (framework utilizzato: Cakephp 2.10)
Modifica 3: come richiesto, di seguito è riportata l'intestazione restituita per la risorsa non riuscita, che è l'intera pagina Web. Anche se l'errore si sta verificando su ogni pagina con un'intestazione HTTP 200, quelle pagine vengono sempre caricate sul browser del client, ma a volte manca un elemento (nel mio esempio, il feed Twitter esterno). Ogni altra risorsa nella scheda Rete ha un ritorno positivo, tranne l'intero documento stesso.
Intestazione di Google Chrome (con errore):
Intestazione di Firefox (senza errori):
Una curl --head --http2
richiesta in console restituisce il seguente successo:
HTTP/2 200
date: Fri, 04 Oct 2019 08:04:51 GMT
content-type: text/html; charset=UTF-8
content-length: 127089
set-cookie: SERVERID31396=2341116; path=/; max-age=900
server: Apache
x-powered-by: PHP/7.2
set-cookie: xxxxx=0919c5563fc87d601ab99e2f85d4217d; expires=Fri, 04-Oct-2019 12:04:51 GMT; Max-Age=14400; path=/; secure; HttpOnly
vary: Accept-Encoding
Modifica 4: Cercare di approfondire gli strumenti chrome: // net-export / e https://netlog-viewer.appspot.com mi sta dicendo che la richiesta termina con un RST_STREAM:
t=123354 [st=5170] HTTP2_SESSION_RECV_RST_STREAM
--> error_code = "2 (INTERNAL_ERROR)"
--> stream_id = 1
Per quello che ho letto in questo altro post , " In HTTP / 2, se il client desidera interrompere la richiesta, invia un RST_STREAM. Quando il server riceve un RST_STREAM, interromperà l'invio di frame DATI al client, interrompendo così la risposta (o il download). La connessione è ancora utilizzabile per altre richieste e le richieste / risposte che erano simultanee a quella che è stata interrotta possono continuare a progredire. [...] È possibile che, quando RST_STREAM viaggia da dal client al server, l'intero contenuto della richiesta è in transito e arriverà al client, che lo scarterà. Tuttavia, per contenuti di risposta di grandi dimensioni, l'invio di un RST_STREAM può avere buone probabilità di arrivare al server prima dell'intero il contenuto della risposta viene inviato e pertanto consente di risparmiare larghezza di banda " .
Il comportamento descritto è lo stesso di quello che posso osservare. Ciò significherebbe che il colpevole è il browser, e quindi non capirei perché accade su due pagine identiche con una con intestazione 200 e l'altra con 404 (lo stesso vale se disabilito JS).