【问题标题】:Http request response debuggingHttp请求响应调试
【发布时间】:2010-01-11 20:48:33
【问题描述】:

我有两部手机连接到一个 Wifi 接入点,它们的 ip 都在私有范围内。 其中一部手机上运行着 HTTP 服务器,而另一部手机则充当客户端。客户端将 GET 请求数据作为 name/ 发送到服务器 URL 查询字符串中的值对。目前,服务器仅在接收到查询字符串时在 HTTP.OK 上发送。

正在发生的事情是客户端可能不是静止的并且可能四处移动,因此它可能无法始终处于 Wifi 访问范围内 点,因为我没有在服务器端获得从客户端发送的所有数据。 我想确保服务器实际接收到所有发送的数据。

我应该实施什么样的纠错?我可以检查一些相关的 HTTP 错误代码等吗?

【问题讨论】:

    标签: debugging http mobile-phones


    【解决方案1】:

    如果 HTTP 服务器在 GET 请求中没有接收到整个查询字符串,那么 HTTP 请求不可能是有效的,因为这些参数位于请求的第一行。

    服务器将无法处理请求,在这种情况下可能会返回状态代码 400(错误请求)。

    如果您的客户端收到此消息(这似乎不太可能无法传输请求,但仍会收到响应),那么您就会知道要重新传输。一般来说,TCP 连接的属性(如自动重传、校验和和超时)应该是成功传递或确定失败所需的全部内容。

    【讨论】:

    • 任何服务器都极不可能响应排除标头结尾(2 个 CRLF)的请求。您唯一的响应将是没有响应(即超时)。
    • 嗯。 echo "GET / HTTP/1.0" | nc httpd.apache.org 80(或 microsoft.com)立即给我一个 400 错误。
    • @Christopher:这意味着如果我得到一个 400 代码,这将被认为是服务器得到了一个错误或格式错误的查询字符串,对吧?如果服务器宕机了,我仍然会得到 400。
    • 是的,没错。如果服务器关闭或连接中断,您的 HTTP 客户端很可能会抛出适当的 IO 异常。
    【解决方案2】:

    您需要在客户端检查超时。这取决于所使用的流程/语言。

    编辑:http://wiki.forum.nokia.com/index.php/Using_Http_and_Https_in_Java_ME

    看起来您只是设置了超时并捕获 IO 错误。

    【讨论】:

    • 我该怎么做?我已经用 JavaME 编写了应用程序
    • 我不做 java,你必须检查你的 HTTP 请求对象的文档。大概会抛出一个错误,您需要捕获它,否则会返回某种类型的状态代码。
    【解决方案3】:

    过早的优化。

    连接完整性已在网络堆栈的较低部分处理。因此,如果请求中间有任何丢失(假设它跨越多个数据包),TCP 堆栈将在将数据传递到服务器之前尝试恢复它们。

    如果您需要向自己证明这一点,那么只需添加一个校验和作为查询的最后一部分。

    C.

    【讨论】:

    • 在客户端套接字上使用短暂的保持活动和超时将是一个好主意。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-28
    • 2020-11-17
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    • 2015-04-28
    • 1970-01-01
    相关资源
    最近更新 更多