【问题标题】:Post request in HTTP and HTTPS protocol以 HTTP 和 HTTPS 协议发布请求
【发布时间】:2017-06-22 07:59:52
【问题描述】:

我们正在尝试在我们的嵌入式系统和 Web 服务器之间建立安全通信。首先,我们在微控制器中实现 HTTP 连接。我只是连接到我的网络服务器的 80 端口并向该端口发送简单的 GET 请求,如下例所示:

GET /foo.php?msg=test HTTP/1.1
HOST: foo.com

我的问题是,我们如何将其转换为 HTTPS?我应该连接哪个端口? 上面的 GET 请求的结构会有什么不同吗?我是否必须手动进行一些加密或连接到“https”链接而不是“http”对于安全通信来说已经足够了。

感谢您提供任何信息

【问题讨论】:

    标签: http ssl https http-post http-get


    【解决方案1】:

    HTTP 请求和 HTTPS 请求的唯一区别是第一个是通过普通 TCP 连接发送,另一个是通过 TLS 连接发送,即:

    • 使用 HTTP 建立 TCP 连接并通过此连接发送请求
    • 您使用 HTTPS 建立 TCP 连接,将此连接升级到 TLS(包括正确的证书验证等!),然后通过此连接发送与使用 HTTP 相同的请求。

    除此之外,我建议使用已建立的 HTTP 库或仔细阅读 standard虽然 HTTP 看起来很简单,但实际上并非如此,这里有很多问题,用户尝试执行简单的 HTTP 请求并遇到他们没有预料到的行为。

    例如,在您的情况下,服务器可能会使用分块编码、内容长度或简单地以连接关闭来结束响应。由于 HTTP/1.1 隐式启用 HTTP keep-alive,因此它可能会等待同一连接上的进一步请求。你的代码真的能解决所有这些情况吗?

    【讨论】:

    • 在我们得到服务器的响应后。我们正在手动关闭通信。
    • @user3077756:你怎么知道服务器何时完成发送响应?
    • 下面是我们的服务器响应示例。 +IPD,343:HTTP/1.1 200 OK 内容类型:application/json 服务器:Microsoft-IIS/8.5 X-Powered-By:ASP.NET X-Powered-By-Plesk:PleskWin 日期:2017 年 6 月 22 日,星期四 08 :46:25 GMT Content-Length: 154 { "success": 1 } 当我看到 "success" 我知道服务器回复了我。这可以处理大多数情况。对于其他情况,我们在嵌入式和服务器端实现其他连接句柄机制。
    • 我明白了。您实际上是在假设一个非常具体的服务器行为,即不是通用的 HTTP 处理。希望您也可以完全控制服务器,这样您所做的服务器特定假设将永远不会改变。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-31
    • 1970-01-01
    • 1970-01-01
    • 2017-12-25
    • 2014-02-26
    • 1970-01-01
    相关资源
    最近更新 更多