2013-05-29 24 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客户机是应用程序)。 –