【问题标题】:How to handle a request with HTTPS protocol in Tornado?如何在 Tornado 中使用 HTTPS 协议处理请求?
【发布时间】:2012-11-20 10:22:14
【问题描述】:

我是 Tornado 的新手。我开始学习这样的“Hello World”代码:

import tornado.ioloop
import tornado.web
import tornado.httpserver

class HelloHandler(tornado.web.RequestHandler):
    def get(self):
        self.write("Hello, world!")

application = tornado.web.Application([
    (r"/", HelloHandler)
])

http_server = tornado.httpserver.HTTPServer(application)

if __name__ == "__main__":
    http_server.listen(80)
    # http_server.listen(443)
    tornado.ioloop.IOLoop.instance().start()

当我在浏览器中输入“http://localhost”时,它会工作并打印出来

"Hello, world!"

但如果我尝试请求“https://localhost”,它会返回:

Error 102 (net::ERR_CONNECTION_REFUSED): The server refused the connection.

网上关于Tornado的文档太少了,谁能告诉我如何处理Https协议请求?

【问题讨论】:

  • 您是否生成了所需的证书/密钥文件等?除了“S”之外,HTTPS 还有很多其他功能。
  • 生成证书/密钥文件?我想我还有很长的路要走……我会先用谷歌搜索这个概念。
  • 嗨@PaulC 谢谢你的建议。我已经安装了 openssl 并生成了我自己的 key&crt。还要感谢 demikl ,在将 key&crt 添加到 ssl_options 之后,我的 Hello World 程序就可以工作了! :)

标签: https python-2.7 tornado


【解决方案1】:

根据tornado.httpserver documentation,需要将ssl_options字典参数传递给它的构造函数,然后绑定到HTTPS端口(443):

http_server = tornado.httpserver.HTTPServer(applicaton, ssl_options={
    "certfile": os.path.join(data_dir, "mydomain.crt"),
    "keyfile": os.path.join(data_dir, "mydomain.key"),
})

http_server.listen(443)

mydomain.crt 应该是您的 SSL 证书,mydomain.key 应该是您的 SSL 私钥。

【讨论】:

  • 谢谢!在@Paul C 和您的帮助下。我的龙卷风 Hello world to HTTPS 工作正常。
  • 请注意,如果您愿意,可以轻松创建另一个非 SSL 实例。 (至少将用户从 HTTP 重定向到 HTTPS。)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-20
相关资源
最近更新 更多