当前位置: 首页 > 面试题库 >

Node.JS,Express和Heroku-如何处理HTTP和HTTPS?

司寇祖鹤
2023-03-14
问题内容

我有一个非常普通的Express应用程序-
简单的服务器逻辑,视图,许多客户端JS。我必须执行许多AJAX请求。其中一些需要通过HTTPS协议保护(某些不需要)。

因此,我的服务器应同时使用HTTP和HTTPS。它也应该在本地计算机(正常运行nodemon)和Heroku上都可以工作。

据我了解,Heroku为您提供了一个您可以监听的端口(process.env.PORT),并通过代理处理了所有请求(因此,您的应用程序正在监听该端口,而无需担心协议-
是吗? )

所以,我说对了吗-我应该为开发机器和Heroku使用一些不同的代码吗?

喜欢

...
app = express()
...

if process.env.NODE_ENV == 'production'
  app.listen(process.env.PORT)
else
  https = require('https')
  http = require('http')
  http.createServer(app).listen(5080) # some local port
  options = {
    key: fs.readFileSync('key.pem'), 
    cert: fs.readFileSync('cert.pem') # my self-signed files
  }
  https.createServer(options, app).listen(5443) # some different local port

这是解决这个问题的正确方法吗?


问题答案:

好吧,这些天社区看起来已经死了(希望我错了)

答案是:

a)是的,这是处理它的方法

b)检查您是否处于安全模式的方式也取决于环境:

if process.env.NODE_ENV == 'production'
  is_secure = (req) ->
    req.headers['x-forwarded-proto'] == 'https'
else
  is_secure = (req) -> req.secure

添加 如果您想强制使用HTTPS:

redirect_to_https = (req, res, next) ->
  if not is_secure(req)
    res.redirect config.SECURE_DOMAIN + req.url
  else
    next()

app
  .use(redirect_to_https)


 类似资料:
  • 问题内容: 我的Express应用程序中有一个受限制的区域“ / dashboard”。我使用一个非常小的函数来限制访问: 问题是当我通过调用注销用户时… …会话被终止,但是 当我在浏览器中单击“后退”按钮时,我从浏览器的缓存中获取了受限制的页面。 这意味着’/ dashboard’上没有GET,也没有用户登录验证。 我尝试在meta(玉模板)中使用no-cache,但仍然无法正常工作。 任何人?

  • 问题内容: 我研究了如何通过此堆栈交换在节点中进行错误处理,但是我不确定身份验证失败时护照在做什么。我有以下LocalStrategy: 在看到“错误>某些错误”控制台打印输出后,什么都没有发生。我认为它应该在带有错误参数的下一条路径上继续,但似乎没有这样做。这是怎么回事? 问题答案: 策略实施与验证请求和处理成功/失败一起使用。 假设您正在使用此路由(向其传递了电子邮件地址和密码): 这将调用该

  • 问题内容: 当客户端/浏览器取消了挂起的HTTP请求时,带有Express的Node似乎继续处理该请求。对于密集请求,CPU仍然忙于处理不必要的请求。 有没有办法让Node.js / Express杀死/停止这些被要求取消的未决请求? 它给出的是,由于AngularJS 1.5 HTTP请求是容易变得特别有用的撤销通过调用上/ 对象。 当暴露提供自动完成或搜索字段结果的API方法时,可能会发生此类

  • 问题内容: 我有一个运行在Cedar堆栈上的node.js应用程序,我很困惑为什么安全cookie无法正常工作。 在localhost上,一切正常,但在heroku上,我似乎无法设置安全cookie。我究竟做错了什么?该文档称,负载平衡器终止SSL,它说的是配置在那里? 非常感谢 问题答案: 您认为Heroku在到达您的应用之前会先终止SSL。这导致express看到非SSL流量,这可能就是为什么

  • 问题内容: 我当前正在使用一个Web应用程序,每次都调用此Web应用程序,请删除所有当前的Express会话,因此我需要一种方法来保留所有这些会话。我试图用connect- mongodb和connect- redis保留所有这些会话,但是都无效,nodemon总是说req.session是未定义的。我不知道该怎么做才能保留所有会话。 我需要一种方法来保留所有会话,执行时不要丢失它们,并为其提供教

  • 我有一个带有Express和Socket.io的Node.js服务器。在socket.io文档中,我找到了主机服务器的示例代码。 我现在的问题是:我无法从请求中读取Post数据。 我如何从请求中读出正文?我希望有人能帮助我!谢谢