我在Chrome取消某些HTTP請求時遇到了一些問題,並且我懷疑緩存的身份驗證數據是原因。首先讓我寫下關於我正在編寫的應用程序的一些重要因素。Chrome基本身份驗證和摘要授權問題
- 我用基本身份驗證計劃了一段時間守護多種服務和資源在我的web應用程序。
- 與此同時,我在完全同步我的主Google帳戶的情況下使用Chrome大量使用/測試該應用。我經常使用我的名字 - 「lukasz」 - 作爲基本身份驗證中的用戶名。
- 最近我已將我的應用程序切換到使用摘要式身份驗證。
- 現在,我所做的一些HTTP請求與
status=failed
一起失敗,沒有明顯的原因。它只發生在我使用用戶「lukasz」時,如果我輸入其他唯一用戶名 - 沒有問題。
我在後端和前端無處不在,我找不到問題在我們的代碼中。我可以很容易地重現這與用戶「lukasz」每次。所以我將我的代碼恢復到了基本身份驗證(雖然沒有觸及應用程序的其餘部分),問題消失了。
這使我認爲緩存密碼有問題。所以我清除了Chrome中的緩存,但這沒有幫助。經過幾個小時的分析,我決定確保我正在運行Chrome的新實例,因此我重新安裝了它(一路刪除磁盤數據)。 TADAAA!問題消失了,我再也無法再現了。 然後我同步我的谷歌賬戶與這個新安裝的Chrome,並在一段時間後對我的應用程序的請求開始失敗再次!所以我深入瞭解了這個問題(清理磁盤中的配置文件數據並重新執行所有步驟),事實上,只要我的帳戶與雲同步,問題就開始了!
是的,我知道這聽起來很狡猾。這聽起來很荒謬。這聽起來很愚蠢。但我幾乎可以肯定,這兩個問題有某種相關性(失敗的請求和帳戶同步)。
我的想法是這樣的:Chrome以某種方式記住我正在使用基於身份驗證的「lukasz/my-pass」來處理某些服務。在我切換到Digest Auth後,相同的證書組合(lukasz/my-pass)現在變得很有趣。也許在這個背後,Chrome仍然認爲這是基本身份驗證,並且在其他方面學習時取消請求?
UPDATE: 我已經做了一些低級別的調試與chrome://net-internals/
,看來,問題是當讀取緩存條目。這似乎證明了我最初的假設。 我做了一些調查,發現this article。顯然總是在我的http響應中添加「Last-Modified」標題已經解決了Chrome中的問題(我在FF中仍然存在一些問題,但這不是主題)。 但是,它仍然不能完全解決我的問題。爲什麼這些請求首先失敗?
隱身模式的行爲相同。 –
有一個用於選擇認證方案的鉻命令行開關。這可能有助於測試。 --auth-schemes:啓用HTTP身份驗證方案。這是一個以逗號分隔的身份驗證方案列表(基本,摘要,ntlm和協商)。默認情況下,所有方案都啓用。此命令行標誌的主要用途是幫助分類由最終用戶報告的與認證相關的問題。 – Amitabh
是的,我已經嘗試過。什麼也沒有變。我在這個參數中只使用了摘要選項,以確保總是選擇正確的方案。 –