Tag: http

节点JS匿名函数和callback

有人请帮助我。 我一直在阅读大量的javascript文档和javascript的摆弄。 我能够使用这些function,但是我没有完全得到这个必要的语法爵士乐 var http = require('http'); http.createServer(function (req, res) { res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('Hello World\n'); }).listen(1337, 'myhost'); console.log('Server running at http://myhost:1337/'); 我不知道为什么它可以使用上面的匿名函数req和res。 就像他们住在http的某个地方一样。 他们没有宣布任何地方! 它们是由引用内部对象或其他东西的匿名函数中的variables名组成的。 这很疯狂。 这样的callback函数如何? 或者像 stream.on('data', function(data){ // use data… i dont know where its coming from // or how it got there, but use it }); 如果你可以发布一个模仿这个过程和语法的小例子,或者说明这些callback函数是如何工作的,或者我可以如何将这些未声明的variables传递给像这样的函数,我将不胜感激。 下面的答案类似的例子。 var b […]

遵循与node.js请求redirect

我试图学习node.js,我正在开发一个工具来login一个网站,然后提取一些信息。 我已经读过redirect应该在文档中“自动工作”,但是我不能使它工作。 request({ url: start_url, method: 'POST', jar: true, form: { action: 'login', usertype: '2', ssusername: '****', sspassword: '****', button: 'Logga in' } }, function(error, response, body) { if (error) { console.log(error); } else { console.log(body, response.statusCode); request(response.headers['location'], function(error, response, html) { console.log(html); }); } }); 首先,我做了一个POST,它给出了一个respone.statusCode == 302.正文是空的。 我期望身体包含redirect页面。 然后,我在response.headers ['location']中find了“新”url。 当使用它时,主体只包含一个“未login”页面,而不是我期望的页面。 任何人都知道如何去做这个?

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个并发请求。