簡體   English   中英

ASIHTTPRequest,請求發送兩次

[英]ASIHTTPRequest, request sent twice

我剛剛開始在iOs上使用ASIHTTPRequest,我遇到了一個小問題。 所有請求都被發送兩次到服務器,即使我只從庫中獲得一個回復給我的委托方法。

同步和異步請求都有此問題。 我使用Xcode 4和ARC,但是通過添加-fno-objc-arc作為編譯器標志來禁用ASIHTTPRequest。

有什么想法錯了..?

碼:

ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
[request startSynchronous];

NSError *error = [request error];
if (!error) {
}

這也困擾了我。 我正在使用GET請求來驗證服務器上的多用途憑證代碼。 當我們為兌換代碼添加了一個速率限制時,一些客戶報告說它們應該達到限制之前。 事實證明,一些驗證引發了兩次贖回。

您的請求正在使用GET方法。

使用GET時的默認行為是允許持久連接( Keep-Alive HTTP標頭 )。

當使用持久連接時,如果網絡上的某些東西看起來很糟糕(這是技術術語)而不是剛剛失敗的請求,則可能會重新傳輸GET請求。 這通常是可取的,因為GET請求通常不會對服務器產生任何副作用。

另一方面,POST或PUT請求默認不使用持久連接,並且不會重新傳輸您的操作,這可能是購買信用卡或其他具有重大副作用的操作。

如果您希望阻止ASIHTTPRequest GET有時發送2個或更多服務器請求(由於您的控制之外的網絡問題),您只需設置此標志:

request.shouldAttemptPersistentConnection = NO;

這應該處理服務器上的虛假GET重復項。

謝謝您的回復。 我搬到了新的MKNetworkKit,從未回頭看過ASIHttpRequest。 https://github.com/MugunthKumar/MKNetworkKit

奧伊斯坦

它可能正在發送HEAD請求以獲取響應大小,然后發送GET請求以實際獲取內容。 有關更多信息,請參閱文檔的此部分

這可能是因為持久連接正在使用中,因此您在舊連接上看到失敗的請求,然后在新連接上看到工作請求。 (GregInYEG也可以是HEAD請求。)

如果您使用wireshark或charlesproxy等工具收集網絡跟蹤,那么就可以准確地看到發生了什么。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM