谷歌 Chrome 瀏覽器 ERR

自從發佈了【說說 360 網站衛士 CDN 正確使用姿勢】一文以後,明月就開始關注有關 360 網站衛士使用方面的小技巧了,很多站長們提到的“hosts 回源大法”,明月感覺真的是使用 CDN 後,網站管理員必備的一種方式了,可以很好的解決使用 CDN 後, WordPress 、 Typecho 的後臺登陸因 CDN 緩存策略造成的各種問題,速度上還很不錯。

谷歌 Chrome 瀏覽器 ERR_SPDY_PROTOCOL_ERROR 錯誤的分析解決

圖片來自明月登樓博客【imydl.com】

但是,明月在通過修改 hosts 實現本地訪問博客強制回源的時候,在 Chrome 瀏覽器下總是碰到“ERR_SPDY_PROTOCOL_ERROR”的錯誤提示,無論如何的清除瀏覽器緩存都是依然如故,而在 Firefox、IE 11、EDGE、360 極速瀏覽器上都可以流暢打開網站,並回源到主機,就 Chrome 瀏覽器下是這個錯誤提示。並且這個“ERR_SPDY_PROTOCOL_ERROR”幾乎是我博客站點的一個頑疾,可以說是經常性的出現這個東西,看來必須要找出問題所在解決掉了,否則以後很影響工作效率的(不能使用 Chrome 對於一個站長來說真的是難受呀,有沒有?)

在度娘、谷姐反覆查找瀏覽一番後,終於通過谷姐找到了一個有效並且分析的也很全面的解決辦法,明月在解決後感覺受益良多,所以今天就分享給大家。

出現“ERR_SPDY_PROTOCOL_ERROR”這個錯誤一般都是站點遷移、開啟 HTTP/2 協議支持的時候最容易觸發這個錯誤的發生,錯誤信息裡面沒有提到 HTTP/2, 可能是因為 HTTP/2 是從 SPDY 協議發展而來,所以錯誤信息還是老的 SPDY。

出現 ERR_SPDY_PROTOCOL_ERROR 可能是因為服務器發送了一個無效的 HTTP header。Chrome 處理二進制的 HTTP/2 協議時有一些嚴格,不會處理以空格代替破折號的 header(例如用 Referrer Policy 代替 Referrer-Policy),也不會處理帶著 2 個冒號的 header(例如 Content-Security-Policy:: ...),所以檢查下你的 header 是否準確。Firefox 會忽略這些無效的 header,正常顯示頁面。

給出一個如何找到這些有問題的 header 的方法。訪問 chrome://net-internals/#events(這鏈接沒法點擊,只能複製然後粘貼到地址欄再訪問),在搜索框輸入你的域名(我以 example.com 為例),然後在其他標籤中打開出問題的網站。返回 chrome://net-internals/#events ,選中 Source Type 是 HTTP2_SESSION 的行。

谷歌 Chrome 瀏覽器 ERR_SPDY_PROTOCOL_ERROR 錯誤的分析解決

圖片來自明月登樓博客【imydl.com】

在右邊紅色箭頭所指,可以看到 HTTP/2 協議的詳細信息

看到 HTTP2_SESSION_RECV_INVALID_HEADER 那行了嗎?無效的 header 就在它下面,在這個問題中,無效的 header 是x-frame-options:allow-from,那麼在 Nginx 的站點配置文件裡註釋這個 header 響應頭語句後 reload nginx 網站在 Chrome 瀏覽器里正常可以打開了,感覺問題可能是出在 Nginx 裡 header 響應頭的語法不被谷歌 Chrome 支持造成的,這應該是個“兼容性”問題了,因為別的瀏覽器都不會出現這個錯誤的,看來 Chrome 要求還是蠻嚴格的。


分享到:


相關文章: