Saat ini saya sedang mengerjakan situs web, yang memicu net::ERR_HTTP2_PROTOCOL_ERROR 200
kesalahan di Google Chrome. Saya tidak yakin persis apa yang dapat memprovokasi kesalahan ini, saya hanya memperhatikan itu muncul hanya ketika mengakses situs web di HTTPS. Saya tidak bisa 100% yakin itu terkait, tetapi sepertinya itu mencegah javascript dieksekusi dengan benar.
Misalnya, skenario berikut terjadi:
Saya mengakses situs web dalam HTTPS
Umpan Twitter saya terintegrasi melalui https://publish.twitter.com tidak dimuat sama sekali
Saya dapat melihat ERR_HTTP2_PROTOCOL_ERROR di konsol
Jika saya menghapus kode untuk memuat umpan Twitter, kesalahan tetap ada
Jika saya mengakses situs web dalam HTTP, umpan Twitter muncul dan kesalahannya hilang
Google Chrome adalah satu-satunya peramban web yang memicu kesalahan: ini berfungsi dengan baik di Edge dan Firefox. (NB: Saya mencoba dengan Safari, dan saya memiliki kcferrordomaincfnetwork 303
kesalahan serupa )
Saya bertanya-tanya apakah itu bisa terkait dengan header yang dikembalikan oleh server karena ada '200' yang disebutkan dalam kesalahan, dan halaman 404/500 tidak memicu apa pun.
Masalahnya adalah kesalahan tidak didokumentasikan sama sekali. Pencarian Google memberi saya sangat sedikit hasil. Selain itu, saya perhatikan itu muncul pada rilis Google Chrome yang sangat baru; kesalahan tidak muncul pada v.64.X, tetapi itu terjadi pada v.75 + (terlepas dari OS; saya bekerja pada Mac tho).
Petunjuk apa pun pada titik ini untuk diselidiki akan dengan senang hati dihargai!
Terima kasih sebelumnya.
Tristan
Sunting 1: Mungkin terkait dengan Situs Web OK di Firefox tetapi tidak di Safari (kCFErrorDomainCFNetwork error 303) baik Chrome (net :: ERR_SPDY_PROTOCOL_ERROR)
Sunting 2: Temuan dari penyelidikan lebih lanjut adalah sebagai berikut:
- kesalahan tidak muncul pada halaman yang sama persis jika server mengembalikan 404 bukannya 2XX
- kesalahan tidak muncul di lokal dengan sertifikat HTTPS
- kesalahan muncul di server yang berbeda (keduanya milik OVH), yang menggunakan sertifikat yang berbeda
- kesalahan muncul tidak peduli apa versi PHP yang digunakan, dari 5,6 ke 7,3 (kerangka kerja yang digunakan: Cakephp 2.10)
Sunting 3: Seperti yang diminta, di bawah ini adalah header yang dikembalikan untuk sumber daya yang gagal, yang merupakan seluruh halaman web. Bahkan jika kesalahan memicu pada setiap halaman yang memiliki header HTTP 200, halaman-halaman itu selalu memuat pada browser klien, tetapi kadang-kadang ada elemen yang hilang (misalnya, umpan Twitter eksternal). Setiap aset lain pada tab Jaringan memiliki pengembalian yang berhasil, kecuali seluruh dokumen itu sendiri.
Header Google Chrome (dengan kesalahan):
Header Firefox (tanpa kesalahan):
Sebuah curl --head --http2
permintaan di konsol mengembalikan sukses berikut:
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
Sunting 4: Mencoba masuk lebih dalam dengan chrome: // net-export / dan https://netlog-viewer.appspot.com alat memberi tahu saya bahwa permintaan diakhiri dengan RST_STREAM:
t=123354 [st=5170] HTTP2_SESSION_RECV_RST_STREAM
--> error_code = "2 (INTERNAL_ERROR)"
--> stream_id = 1
Untuk apa yang saya baca di pos lain ini , " Dalam HTTP / 2, jika klien ingin membatalkan permintaan, ia akan mengirim RST_STREAM. Ketika server menerima RST_STREAM, ia akan berhenti mengirim frame DATA ke klien, sehingga menghentikan respons (atau unduhan). Sambungan masih dapat digunakan untuk permintaan lain, dan permintaan / tanggapan yang bersamaan dengan yang telah dibatalkan dapat terus berlanjut. [...] Ada kemungkinan bahwa pada saat RST_STREAM melakukan perjalanan dari klien ke server, seluruh konten permintaan sedang dalam transit dan akan tiba ke klien, yang akan membuangnya. Namun, untuk konten respons besar, mengirim RST_STREAM mungkin memiliki peluang bagus untuk tiba ke server sebelum keseluruhan konten respons dikirim, dan karenanya akan menghemat bandwidth. "
Perilaku yang dijelaskan sama dengan yang saya amati. Tapi itu berarti browser adalah biang keladinya, dan kemudian saya tidak akan mengerti mengapa hal itu terjadi pada dua halaman yang identik dengan satu memiliki 200 header dan yang lainnya 404 (sama berlaku jika saya menonaktifkan JS).