【问题标题】:Is Anything Different Between HTTPS And HTTP Protocol?HTTPS 和 HTTP 协议有什么不同吗?
【发布时间】:2012-03-24 20:09:01
【问题描述】:

(除了安全套接字和底层传输协议,我的意思是)

我正在尝试在 C# 中实现最基本的 HTTP 服务器(具体来说,我正在尝试让我的程序创建一个本地套接字侦听 http://localhost:nnnn 其中 nnnn 是一个自定义端口号,它的响应就像它是一个安全的网络服务器)。

我已经完成了基本通信代码的工作、接受连接、接收请求和响应 GET。我知道这在原则上是可行的,因为如果我通过标准 HTTP 将浏览器指向我的侦听套接字,那么一切正常,并且它会愉快地显示我返回的网页。

但是,如果我尝试使用 HTTPS 进行连接(我使用不同的端口号),它会连接、接受甚至获取 GET 请求,但尽管我返回了响应,但浏览器似乎挂起,好像它正在等待别的东西 - 但据我所知,我收到没有别的东西(我仍在监听连接,以防它决定建立其他连接)。

我的回答是这样的:

HTTP/1.1 200 OK
Host: localhost:4301
Date: <assume date is correctly formatted>
Content-Type: text/html; charset=us-ascii
Content-Length: 52
Connection: Keep-Alive

<html><head></head><body>Hello, World!</body></html>

正如我所说,这适用于标准 HTTP - 浏览器接受它。我试图包含我认为它可能坚持的标题项目(我也尝试过 Connection: Close 并强制终止连接 - 在这种情况下,浏览器显示连接问题。它发送的 GET 指定 Keep-Alive,所以我返回了那个)。

我是否缺少让浏览器像接受 HTTP 一样接受 HTTPS 的响应?

如果有帮助,我收到的 HTTPS 案例的 GET 请求是:

GET /test.html?param1=Test HTTP/1.1
Accept: text/html, application/xhtml+xml, */*
Accept-Language: en-US
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)
Accept-Encoding: gzip, deflate
Host: localhost:4301
Connection: Keep-Alive

另外,我正在使用使用 MAKECERT 创建的自签名证书 - 因此我必须接受警告并强制浏览器继续访问该页面,但重点是,它确实最终发送 GET 请求。

【问题讨论】:

  • 您确定您的服务器代码在发出请求时执行了吗?如果您附加和调试,它实际上有什么作用吗?另外-您可能对端口有问题-虽然通常可以在几乎任何未使用的端口上获得http流量-有时安全流量会受到限制(这是不完整的-但在我们的环境中,我们有一个公司代理拒绝通过服务器提供https 443 以外的任何端口 - 导致测试问题!)
  • 您是否考虑过使用 Fiddler 或 WireShark 来检查另一台服务器的 HTTPS 流量?
  • @Andras - 使用断点我可以看到它向我发送了 GET 请求,并且我发送了与非安全版本相同的回复(通过 SSL 流,当然,我收到它的方式相同)。它似乎永远不会发送任何进一步的数据(我的 BeginRead() 处理程序永远不会再次触发)。
  • @weismat - 我没想到!我会给它一个bash。谢谢。
  • 遗憾的是,WireShark 在 localhost 上不起作用,RawCap(它建议)似乎只记录 UDP,虽然 Fiddler 有帮助,但它并没有让我足够理解。我看到浏览器到我的代码和浏览器到标准安全网址的“隧道”行,它甚至显示 200(但它称它为连接已建立,而不是隧道的 OK)。对于正常的安全网址,它会神奇地收到另一个回复,即标准的 200 OK。

标签: c# ssl https web


【解决方案1】:

呃……尴尬。原来我在错误的流上发送了格式完美的回复。我将它发送回标准 NetworkStream 对象而不是 SslStream 对象。有趣的是,当你正确编码时事情会变得更好 {:v(

【讨论】:

    猜你喜欢
    • 2016-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-09
    • 1970-01-01
    • 2017-08-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多