2013-05-29 23 views
1

我寫過一個iOS應用程序,它使用HTTP在服務器和設備之間進行通話,過去的一個小問題已經成爲需要解決的問題。具體而言,如何檢查/驗證消息完整性 - 數據不知何故在服務器和設備之間被破壞。原始問題可能是編碼問題,或者它可能是數據實際上在設備和服務器之間出現混亂(現場wi-fi是......不幸的)。編碼是我需要處理的一件事,但我還需要檢查,測試並修復後面的問題。HTTP協議是否包含任何消息完整性檢查功能?

我很快想出了一個基於MD5哈希的解決方案。好主意啊。但顯而易見的是,在我開始深入研究並編程之前,我應該花時間退一步問自己:'有人已經爲我寫了這篇文章嗎?'

我要查找庫的問題,但打擊我的是,它似乎是一個明顯的想法,把這種類型的代碼在網絡堆棧的某個地方。在某個地方,不要太生硬,可以重複使用,最好是相當低的水平。事實上,儘管我不知道是否是這種情況,但應該自動而透明地處理它,這似乎是合乎邏輯的,無需調用它。我試着用Google搜索這個主題,但是......我不知道我是否知道正確的關鍵字,因爲我設法解決的通常是驗證亞馬遜SMS信息,在線檢查您的AT短信和類似的東西無用的垃圾,其中一半我發誓甚至沒有涉及HTTP協議(也許谷歌忽略HTTP關鍵字,或者只是用它來限制自己到HTTP網站而不是HTTPS?)。

因此:由PHP和iOS處理的HTTP協議(或HTTPS)是否具有內置的任何類型的錯誤檢查?我在浪費時間嗎?

+0

我想說這是沒用的,對於小文件不需要完整性檢查。 – n1xx1

+0

@ N1xx1誰說了關於文件的任何事情?我正在處理JSON字符串。 – RonLugge

回答

1

它確實在網絡堆棧中。 對於HTTP的具體示例,它在TCP(傳輸層),IP(僅限v4)(鏈路層)和傳輸層中。 雖然仍然有可能引入哪一個較低層不能檢測到錯誤(校驗和無法檢測到錯誤,硬件錯誤,操作系統錯誤等等),但它比應用程序邏輯中的錯誤要少得多。

+0

不是我所希望聽到的...我唯一可能遇到的其他問題來源是一些非常奇怪的字符編碼問題,說實話,我不知道如何開始測試和糾正。 – RonLugge

+0

@Ron創建一個新問題來描述您的問題並要求提供關於從哪裏開始的指示? :P – Sysyphus

+0

@Sysphus一旦我有足夠的數據,我可以做到這一點,但我並沒有在這一點上 - 原始錯誤中的數據被刷新以嘗試使設備正常工作。不要擔心太多,這只是我會'很棒,在這裏我希望這是問題......謝謝你告訴我,我是一個白癡,即使它做了更多的工作' – RonLugge

2

應答傳送至核心問題HTTP是否有一定的流量控制或完整性檢查:

沒有設計。

您需要在應用程序級別執行此操作 - 如果需要的話。在服務器和客戶端之間的通信問題中,99.99%的問題是其「自制軟件」導致問題,而不是底層基礎架構。而其餘的0.01%不會被任何「完整性檢查」發現,因爲沒有任何連接。

+0

在許多「剩餘的0.01%」情況下,完整性檢查會發現腐敗。這些情況是當HTTP用於下載已知完整性檢查的靜態文件時。例如,對文件的已知MD5(或更好的是,SHA256)的自動檢查將快速確認其真實性或損壞。 由於這個原因,一些「託管文件傳輸」和其他專門的文件傳輸Web應用程序包括傳輸後基於散列的完整性檢查(如傳統FTP客戶端一樣)。 – ftexperts

+0

@ftexperts你幾乎是正確的。您的意思是對通過HTTP傳輸的有效負載進行完整性檢查。有像內容長度頭等基元,但沒有任何可以告訴你從HTTP協議層面來看,有效載荷是否正常。那是OP的問題。所以。您必須在應用程序級別執行此操作(並且受管FTP客戶機是應用程序)。 –