2010-12-16 62 views
33

谷歌瀏覽器發送多個請求來獲取頁面,這顯然不是一個錯誤,而是一個功能。而我們作爲開發者只需要處理它。如何使用chrome發送額外的請求?

只要我能在五分鐘內挖掘出來,chrome就可以讓衝浪更快,所以如果一個連接丟失,第二個連接就會接管。

我想如果網站開發得很好,那麼它的功能不會因此而中斷,因爲多個請求並不是新的。

但我只是不確定我是否已經說明了此功能可以產生的所有情況。

會有什麼特殊情況嗎?處理這些問題的最佳實踐?

更新1:現在我明白了爲什麼當我用chrome打開頁面時,我的銀行頁面會拋出錯誤!它說:「只有一個瀏覽器窗口應該打開。」這是他們解決安全威脅的方法嗎?

+2

你有一個鏈接到任何地方這是正式記錄? – fearofawhackplanet 2010-12-16 12:22:07

+0

我從一個問題得到了這個在計算器: 「Chrome正在嘗試一些攻擊性的戰術在其開發人員構建(我認爲這很酷)他們正在做的是推測性地打開服務器的插座,並打開第二個插座,如果他們第一次嘗試沒有得到足夠快的響應,很容易看到這個東西中的錯誤,甚至只是預期的行爲,都可能觸發濫用過濾器,但正如我所說的,我認爲這是值得的。如果Web更快,網絡初創公司將賺更多錢。「 – 2010-12-16 12:30:09

+0

Chromium問題涉及此http://code.google.com/p/chromium/issues/detail?id=39402#c11 – jrummell 2011-11-09 21:09:51

回答

13

最好的選擇是遵循標準的Web開發最佳實踐:不要因爲GET調用而改變應用程序狀態。

如果你擔心我建議更新你的數據層單元測試GET調用重複&確保他們返回相同的數據。

(我沒有看到這種行爲在Chrome 8.0.552.224,順便說一下,是很新?)

+0

我使用相同的版本,但我看到了這種行爲。嘗試調用一個在文件中增加數字的腳本。 – 2010-12-16 13:40:05

+0

我還沒有設法重現它,我寫了一個附加到文件的快速腳本,每次點擊只能在文件中獲得一行。我正在使用Linux版本,所以它可能還沒有啓用 – Peter 2010-12-16 14:05:35

+0

不能從GET中更改應用程序狀態並不總是可以實現的。如果用戶選擇了「自動登錄」,那麼我們將分析該Cookie,確定它們可以自動登錄,然後更新用戶對象中「最近登錄」屬性的時間。這是應用程序狀態更改。 – Volksman 2017-02-15 19:20:11

1

我剛剛實施了一次性使用的Guid令牌(asp.net/TSQL),這是在生成一系列兩個(+確認頁面)中的第一個表單時生成。令牌在生成時會在DB中被記錄爲「掛起」。 Guid令牌作爲隱藏字段伴隨帖子,並且在用戶操作完成(付款)時最終標記爲關閉。這種機制確實有效,並且可以防止在付款後重新提交任何表單。但是,我看到2或3個(!?)額外的令牌由附加請求快速依次產生。第一個請求是用戶(localhost - 也就是我)前面的內容,其中生成的內容結束了另外兩個我不知道的請求。我首先想知道爲什麼Page_Load處理程序爲單頁展示發佈多次,所以我在Http.Context.Current中嘗試了一個標誌 - 但是讓我沮喪的是,後續請求進入相同的URL但沒有發佈數據,並且清空Http.Context.Current數組 - 即,完全(實際用途)分開http請求。如何處理這個?某種令牌和邏輯拒絕後續頁面正文內容請求,而第一個仍在處理中?我想這可能會發生作爲一個全球性的背景?

2

這隻發生在啓用「webug」擴展(這是一個用於Chrome的FirePHP替代品)時。如果我禁用擴展名,服務器只會收到一個請求。

+1

我爲Webug中的這個錯誤表示歉意 - 在當前版本中已修復。 – fedosov 2013-05-23 09:08:46

1

我遇到了這個問題,但沒有一個解決方案是這個問題。對我而言,這是由Chrome中的APNG擴展引起的(支持動畫PNG)。一旦我禁用了該擴展程序,我不再在瀏覽器中看到對圖像的雙重請求。我應該注意到,無論頁面是否輸出PNG圖像,禁用此擴展功能都會解決問題(即APNG似乎會導致圖像問題,而不管圖像類型如何,它們不一定是PNG)。

我還有很多其他的擴展(比如許多人提出的「Web Developer」就是這個問題),而這些都不是問題所在。禁用它們並不能解決問題。我也在開發者模式下運行,這對我來說沒有任何影響。

13

我在編寫我的服務器應用程序時看到了受到的行爲,發現以前的答案可能不是真實的。

Chrome將單個請求分發到多個http請求中,以並行地獲取資源。在這種情況下,它是一個圖像,它作爲一個單獨的http獲取。

我附上了通過wireshark捕獲數據包的屏幕截圖。

這是一個簡單的獲取請求端口8080,我的服務器返回一個hello消息。

Chrome發送第二個獲取請求獲取您在每個打開的標籤上打開的最喜歡的圖標。這不是第二次滿足時間或任何這樣的事情。

它應該被認爲是跨瀏覽器不同的另一個元素。

這裏是一個參考的問題,我發現後者

Chrome sends two requests SO

chrome requests favorite icon

Chrome issue on google code

2

它也可以通過link標籤空href屬性引起的, 。至少在鉻(V41)。例如,每個下面的行的將產生頁面上的一個附加的查詢:

<link rel="shortcut icon" href="" /> 
<link rel="icon" type="image/x-icon" href="" /> 
<link rel="icon" type="image/png" href="" /> 

它接縫的是尋找在頁面空屬性是一個好的起點,無論是hrefsrc

2

我在觀看這個特徵(bug/feature/whatever)時發生在我輸入URL並且自動完成功能着陸在匹配中,同時仍然輸入URL。 鉻需要那場比賽和抓取網頁的內容,我想爲自己加載頁面時會出現緩存的好處....

0

在我來說,我有enpoint(JSON)數據到不同的服務器和瀏覽器先創建一個空請求(Request Method:OPTIONS)來檢查一個端點是否接受來自我的服務器的請求,即同源策略。另外要知道的是一個Angular 1應用程序。 總之,我從本地主機請求一個在線假json數據。