Articles of http

Node.js:获取响应时间

我如何知道URL的响应时间? 我使用http.get()来发出HTTP GET请求。

“使用Node.js进行直接响应” – 使用不同的Node.js进程发送HTTP响应(与主进程不同)

使用Node.js服务器,我想知道是否可能,并build议发送来自委托工作进程,而不是主进程的HTTP响应。 这些工作进程可以是Node.js服务器本身,也可以是通过IPC进行通信的Node.jssubprocess。 我不认为集群核心模块https://nodejs.org/api/cluster.html可以做我想做的事情,因为在该模型中,所有的工作人员都在同一个端口上侦听,并且他们处理所有的请求代表主人的过程。 我正在寻找的是一个主要的Node.js进程,它响应所有的HTTP请求,可能会进行身份validation并处理一些请求,但也能够将数据密集型或CPU密集型请求委托给工作池。 想象一下,我们对大量的数据有一个GET请求,比如2-3MBs。 我们至less有三种可能的情况: 主进程接收到请求,向数据库请求大量的数据,然后将数据发送回请求者。 主进程接收到请求后,使用IPC将一些数据发送给工作进程,工作人员从数据库获取数据做了一些繁重的操作,然后工作人员使用IPC将所有3MB的数据全部发送回主进程,然后发送回应。 主进程接收请求,向工作人员发送尽可能less的关于请求stream的信息,工作人员完成所有工作,工作人员发回HTTP响应。 我特别好奇#3可能。 情景3的简单描述如下: (要明确一点,我不想要一个请求的三个响应,我只是想表明一个工作人员可能代表主进程发送响应)。 任何人都知道这可能与Node.js工作? 它如何在其他语言中起作用? 通常,我对Node.js并发模型没有任何问题,但对于某些types的数据,使用Cluster模块可能不是实现最高并发性的最佳方式。 我相信这个模型的一个术语是“直接回应”,意思是工作人员直接回应请求。 也许可以简单地使用集群核心模块https://nodejs.org/api/cluster.html 。

Node.js服务器超时问题(EC2 + Express + PM2)

我相对较新的运行生产node.js应用程序,我最近有问题,我的服务器超时。 基本上在一定的使用和时间后,我的node.js应用程序停止响应请求。 我甚至不再看到路由器在我的控制台上被触发 – 就像整个事情刚刚停止,来自客户端(运行AFNetworking的iPhone)的HTTP呼叫不再到达服务器。 但是,如果我重新启动我的node.js应用程序服务器,一切都会重新开始,直到事情不可避免地再次停止。 该应用程序从不崩溃,它只是停止响应请求。 我没有得到任何错误,我已经确保处理和logging所有数据库连接错误,所以我不知道从哪里开始。 我认为这可能与内存泄漏有关,所以我安装了node-memwatch并为内存泄漏build立了一个侦听器,但是在我的服务器停止响应请求之前,这个侦听器没有被调用。 任何线索可能会发生什么以及我如何解决这个问题? 这是我的堆栈: AWS EC2 Micro Instance上的Node.js(使用Express 4.0 + PM2) 运行MySQL的AWS RDS卷上的数据库(使用node-mysql) 与node.js应用程序在同一个EC2实例上存储了与Redis相同的会话 客户端是通过AFNetworking访问服务器的iPhone 上面提到的任何一个模块都没有发生错误。

使用从chrome到node-http2服务器的HTTP / 2时,请参阅多个TCP连接

更新(对于任何对结果感兴趣的人:) 我无法弄清为什么chrome和node-http2服务器之间的下一个协议协商失败。 我的怀疑是自签名证书或ALPN / NPN支持问题。 所以我搬到了golang HTTP / 2的实现 。 相同的设置完美地工作,我看到单个多路复用的TCP连接(铬 – > golang) 我一直在阅读关于HTTP / 2的知识,以及它如何通过每个主机的单个多路复用TCP连接来解决HTTP / 1.1的延迟问题,所以我决定尝试一下。 本实验 创build一个简单的HTML文件,引用一个CSS,一个JS和几个图像。 Node.js中的一个简单的http服务器,它提供所有这些文件 使用chrome发出http请求 在Ubuntu上使用tcptrack( tcptrack )来跟踪到http服务器的TCP连接。 tptrack窗口显示build立了4个连接。 所以浏览器打开不同的连接图像和CSS / JS请求。 我使用tcpdump获得类似的输出。 供参考使用的tcptrack命令是 tcptrack -d -i eth0 -r 3600端口8989 而tcpdump也显示类似的输出 tcpdump -i eth0 -nns 0“dst port 8989 and tcp [tcpflags] == tcp-syn” 服务这些文件的简单的一台http服务器就像下面这样(相关的代码) (function(){ ……….. var […]

使用NodeJSstream式传输Http响应

我正在试验一个简单的NodeJS HTTP服务器的各种响应。 我试图实现的效果是更快的网页视觉渲染。 由于响应是stream传输到浏览器与transfer-encoding: chunked (对吧?)我想我可以呈现页面布局第一次和其他数据延迟后。 var http = require('http'); http.createServer(function (req, res) { res.writeHead(200, { 'Content-Type': 'text/html' , 'Transfer-Encoding': 'chunked' }); res.write('<html>\n'); res.write('<body>\n'); res.write('hello '); res.write('</body>\n'); res.write('</html>\n'); setTimeout(function () { res.end('world'); },1500); }).listen(3000, '127.0.0.1'); 事情是这样的,直到res.end('world')才发送响应,除非已经写入的数据足够长,例如res.write(new Array(2000).join('1'))而不是那个res.write('hello') ,会做的伎俩。 节点是否正在caching我的写入,直到数据足够大才能发送? 如果是这样的话,块大小是可configuration的吗?

在HTTP请求中了解引用者/引用者的安全方式是什么?

我正在使用nodejs来编写图片上传服务。 支付客户端将能够发送图像文件到我在我的服务器上设置的端点。 但是,当每个请求进入时,我需要确认它实际上是一个付费客户提出请求。 我想让客户给我他们的域名,我只是检查referer头。 但是,有人可以很容易地欺骗引用标题和使用我的服务,而不付钱。 SaaS开发者如何面对这个技术问题? 有没有可能解决这个问题,而不需要我的客户端有一些服务器端代码?

在Nodejs中读取原始http消息

我使用http.request函数发送一个http请求,我想读取整个http响应,如文本; 也就是原始的http协议文本。 可能吗? 我写了下面的代码,但它不工作。 // Set up the request console.log('Sending request'); var post_req = http.request(post_options, function(res) { res.setEncoding('utf8'); console.log('Response statusCode: ' + res.statusCode); // res.on('data', function (chunk) { // console.log('Response: ' + chunk); // }); // res.on('end', function() {}); }); post_req.on('socket', function (socket) { var response = ""; socket.on('data', function(chunk){ console.log(chunk); }); }); // post […]

强制net / http使用c-ares而不是getaddrinfo()

正如文件所说: 除了在线程池中使用getaddrinfo(3)的dns.lookup以外,dns模块中的所有方法都使用C-Ares。 但是, net和http模块总是使用dns.lookup 。 有没有办法改变这个? getaddrinfo是同步的,池将只允许4个并发请求。

如何在HTTP中发送UpperCase头

标准说头是不区分大小写的。 Ruby和node都强制小写头。 我们正在使用一个外部的服务器程序,期望头文件“AuthToken”是区分大小写的,使用.NET框架,显然两者都不遵循标准。 在这种情况下,我们需要头文件。

NodeJS – 使用Core NodeJS和最初的Node解决scheme,通过进度条上传文件

Ryan Dahl曾经说过他发明了NodeJS来解决file upload进度条问题( https://youtu.be/SAc0vQCC6UQ )。 使用Node于2009年推出的技术时,所以在Express和更高级的客户端JavaScript库自动告诉你进度更新之前,NodeJS究竟是如何解决这个问题的呢? 现在试着只使用Core NodeJS,我理解了请求stream,我可以看看头文件,获得总文件大小,然后获取每个数据块的大小,告诉我完成百分比。 但是,我不明白如何将这些进度更新stream回到浏览器,因为浏览器似乎没有更新,直到request.end()。 我想再一次围绕NodeJS最初如何解决这个进度更新问题的问题进行讨论。 WebSocket还没有,所以你不能打开一个WebSocket连接到客户端,并将进度更新stream传回浏览器。 有没有使用另一个客户端JavaScript技术? 这是我迄今的尝试。 进度更新stream式传输到服务器端控制台,但浏览器仅在响应stream收到response.end()后才更新。 var http = require('http'); var fs = require('fs'); var server = http.createServer(function(request, response){ response.writeHead(200); if(request.method === 'GET'){ fs.createReadStream('filechooser.html').pipe(response); } else if(request.method === 'POST'){ var outputFile = fs.createWriteStream('output'); var total = request.headers['content-length']; var progress = 0; request.on('data', function(chunk){ progress += chunk.length; var […]