Http请求,用response.getStatusLine().getStatusCode()判断返回值为200,是不是说明对方一定收到请求了?对方是IIS服务器,我的方法已经正确返回200,日志有打印,对方却一直咬定没有收到,我没有接触过IIS服务器,除了这个人以外,别的都没有问题!并且根据对方所说,并不是一直存在类似问题,一天会出现几次,抓包都不好抓!所以想请有遇到过类似问题或有经验丰富的开发帮助分析一下!
迷茫2017-04-18 10:52:12
如果服務端回傳200,可以確實伺服器成功接收了客戶端請求。你這種情況的話,你可以把服務端回傳的報文全部記錄到log裡,包括報文頭資訊和報文體資訊以及通訊時間。當在此出現這種問題時,根據出現時間找到那條報文,然後拿這條報文與其他報文比較下,看有什麼異常沒
阿神2017-04-18 10:52:12
首先,要先弄清楚什麼是 HTTP 200 :
請求已成功,請求所希望的回應頭或資料體將隨此回應傳回。
請求已經實現,而且有一個新的資源已經依據請求的需要而創建,且其URI已經隨Location頭信息返回。如果需要的資源無法及時創建的話,應返回'202 Accepted'。
伺服器已接受請求,但尚未處理。正如它可能被拒絕一樣,最終該請求可能會也可能不會被執行。在非同步操作的場合下,沒有比發送這個狀態碼更方便的做法了。
傳回202狀態碼的回應的目的是允許伺服器接受其他流程的請求(例如某個每天只執行一次的基於批次的操作),而不必讓客戶端保持與伺服器的連線直到批次作業全部完成。在接受請求處理並傳回202狀態碼的回應應在傳回的實體中包含一些指示處理目前狀態的信息,以及指向處理狀態監視器或狀態預測的指針,以便使用者可以估計操作是否已完成。
伺服器已成功處理了請求,但傳回的實體頭部元資訊不是在原始伺服器上有效的確定集合,而是來自本地或第三方的拷貝。目前的資訊可能是原始版本的子集或超集。例如,包含資源的元資料可能導致原始伺服器知道元資訊的超集。使用此狀態碼不是必須的,而且只有在回應不使用此狀態碼便會回傳200 OK的情況下才是合適的。
其次,你收到200的請求,僅代表服務成功收到,不代表對方的業務代碼是否能收到。一般的公司會有防火牆服務,分送服務等網路層,還有的會有業務網關層。
最後,還有檢查一下通訊的資料格式。