【问题标题】:Connect client to Node.js server with HTTP(S)使用 HTTP(S) 将客户端连接到 Node.js 服务器
【发布时间】:2015-05-28 09:59:01
【问题描述】:

用户在本地电脑上“收集”数据,他们需要能够将其上传到服务器。

我像这样设置了一个简单的 node.js 服务器:

var https = require('https');
var fs = require('fs');
var path = require('path');

var options = {
  key: fs.readFileSync('key.pem'),
  cert: fs.readFileSync('cert.pem')
};


var server = https.createServer(options, function (request, response) {
    response.writeHead(200, {'Content-Type': 'text/bold'});
    response.end("Server is running");
});

现在我想使用 httprequest 将客户端连接到它。我尝试了 JQuery/XMLhttpRequest 但我得到了跨域资源共享错误(我明白了原因,但我认为我真的不想禁用这种保护)。我认为可以使用套接字来建立连接,但我不确定这是否是一个不错的选择。我宁愿使用 HTTP 请求。

var xmlhttp, text;
xmlhttp = new XMLHttpRequest();
xmlhttp.open('GET', 'http://localhost/file.txt', true);
xmlhttp.send();

//JQuery get
$.get("http://127.0.0.1:1337")

有什么遗漏吗?欢迎随时提问。

【问题讨论】:

  • 您是否从与要发送到的节点进程不同的 url 获取 Javascript/HTML?
  • @YaManicKill,我想要获取的 HTML 是 file.txt(应该是一个 html 文件)而且我认为客户端和服务器由于给定的错误而驻留在不同的域中,在两个不同的 CMD 中启动/终端。

标签: javascript node.js http client httprequest


【解决方案1】:

在您的第二组代码中将 http:// 更改为 https://。同源包括方案/协议。 (而且您的服务器代码似乎只是在启动一个https 侦听器。:))。

【讨论】:

  • 将其更改为 https,但仍然“请求的资源上不存在‘Access-Control-Allow-Origin’标头。”从 CMD 运行服务器并在浏览器中打开客户端 html。我将尝试通过 node.js 托管它 ..
  • "opened client html in browser" -- 您是否使用相同的 node.js 进程向浏览器提供客户端代码?还是您将其作为机器上的本地文件打开——即file:///
  • 当我第一次学习 Node.js 时,我发现《The Node Beginner》这本书很有用。你可以去看看,看看你的想法。
  • 客户端代码现在使用相同的 node.js 进程提供给浏览器。所以现在这些请求似乎有效。在它在本地打开之前,我认为它是由不同的进程“托管”的。也可以看看那本书!
【解决方案2】:

只是一个提示:如果你的客户端应用程序页面不是从你的服务器组件运行的同一个域呈现的,那么你会得到这样的错误。此错误意味着您的页面将访问另一台服务器的资源,而不是来自它的源服务器。所有浏览器都有这样的限制。您可以在服务器上进行配置,以允许从其他域(托管您的客户端应用程序的域)访问,或从同一域托管客户端应用程序和服务器。

【讨论】:

  • 不建议将服务器配置为允许来自其他域的访问。从同一个域托管客户端应用程序和服务器,如何实现?
  • 然后从节点本身托管您的 html 应用程序,将它们呈现为静态。 github.com/expressjs/…
  • 但是客户端不应该在Node.js中。或者这是否只让 node.js 托管 client.html 文件?我对服务器端非常缺乏经验,因此详细说明会很有帮助。
  • 如果你想坚持你的观点“不建议配置以便服务器允许从其他域访问”,那么快速选项是通过相同的 node.js 托管你的 html 文件(这里节点可以工作就像一个简单的html服务器)所以在这种情况下你可以解决跨域访问的问题。
  • 如果您想要一个单独的 http 服务器来托管您的 html/js 文件,那么在这种情况下,您必须将代理服务器放在两个服务器的前面(节点和您的 http 服务器托管 html 页面),浏览器应该通过代理访问这些服务器,给人的印象是节点应用程序和html应用程序都托管在同一个域中。希望对您有所帮助。
猜你喜欢
  • 1970-01-01
  • 2020-06-26
  • 2022-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多