2012-01-31 22 views
0

如果您訪問一個aspx web表單,然後單擊提交按鈕導致POST到服務器,然後在收到第一個POST的響應之前再次單擊提交導致第二個POST,響應方面會發生什麼?服務器是否同時或串行處理兩個請求?服務器是否發送了兩個響應?瀏覽器是否忽略了其中一個響應?在回答上述問題之後,這可能是不言自明的,但如果我要調用Response.Clear();到Response.End();對於第二個請求,瀏覽器端會發生什麼?IE收到的重複郵件的回覆是什麼?

回答

1

如果在服務器端沒有特殊的手段來處理多個POST,服務器將獨立處理這兩個請求。無論在處理併發 - 這取決於:

  • ,如果你的第一篇文章導致整個頁面重新加載那麼就不可能觸發第二POST在服務器端進行處理頁面之前(因爲你的第二次點擊是從已經在客戶端的頁面創建的)
  • 如果您的第一次POST導致AJAX POST發送到服務器,並且處理過程需要一些時間在服務器上,那麼您最終可能會得到兩個相同的POSTS在服務器端同時處理頁面

服務器總是發送響應和瀏覽器不要忽視他們。它是您的代碼,在服務器端或在客戶端,以防止這種意外的多個POST,例如,通過302響應到另一個不允許用戶重新放置表單的位置。

具體而言,如果您只是清除響應(發送空白內容)並且內容類型爲text/html,那麼瀏覽器將呈現空白頁面。

+0

「如果您的第一次POST會導致整個頁面重新加載,那麼在頁面在服務器端處理之前不可能觸發第二次POST」對於我來說,如果您單擊提交按鈕然後按f5在收到響應之前重新加載,它會再次發佈相同的表單。我已經看過使用[PRG](http://en.wikipedia.org/wiki/Post/Redirect/Get)模式,但我不明白這是如何消除用戶在響應之前重新提交的問題接收。如果您查看圖表,則在用戶刷新過程中,他們所做的所有更改都會更改。 – xr280xr 2012-01-31 22:08:28

+0

我問的原因是我有一個表單,它被點擊後禁用提交按鈕,但我試圖建立在服務器端的故障安全。雖然不完美,但我所做的是在第一次加載時向頁面添加令牌。回發時,檢查令牌是否處於會話狀態,如果不是,則添加並繼續。如果是這樣,我想忽略這個請求。儘管如此,我仍然需要瀏覽器接收來自第一個初始請求的響應,但我仍然不清楚它是否會。謝謝你的幫助。 – xr280xr 2012-01-31 22:10:55

+0

有人可以告訴我,如果我禁用此按鈕的方式將以任何方式允許重複回發? '的' '函數OnProcessing(按鈕)// { //檢查客戶端驗證是否在禁用之前通過 button.disabled = true; window.external。OnPaymentProcessing(); }' 我們正在繼續使用它看到重複回傳的證據。 – xr280xr 2012-02-08 23:16:36

0

我會說這些事情都可能發生,具體取決於具體時間。

我相信調用Response.Clear();到Response.End();在第二個請求上會導致瀏覽器收到一個空的響應,可能在收到第一個請求的結果後。

+0

看起來就像我的情況,當我打電話回來;在第二次請求時,瀏覽器放棄或忽略或不接收來自第一請求的響應,並且僅獲得第二次請求。 – xr280xr 2012-02-08 23:18:30

+0

由於緩衝和網絡的原因,瀏覽器可能會在第一個響應之前收到第二個響應。 – 2012-02-09 14:00:31

相關問題