Tag: http

如何在Node.js Express应用程序中将来自远程URL的文件作为GET响应发送?

上下文:使用Express的多层Node.js应用程序。 前端作为Azure网站托pipe,后端数据来自Parse。 我有一个GET端点,我希望用户体验是一个文件下载。 如果该文件与我的前端位于同一台服务器上,则可以使用 res.sendfile(localPath); 然而,该文件是由我的后端托pipe在另一台服务器上,我的前端知道的是URL。 所以我现在正在做: res.redirect(externalURL); 这导致浏览器导航到资产文件URL(这是一个video),并显示在浏览器中。 我想知道的是: 如何让浏览器下载该文件,而只是停留在同一页面? 我在这里search了一段时间,没有先将文件下载到我的前端的临时文件,我不明白这样做的方式,我显然不这样做。 这可能是HTTP 101的东西,所以我感谢任何帮助!

Python – ConnectionError:超过最大重试次数

当我的服务器(称为服务器A)向另一个服务器(所有服务器B)上的资源发出请求时,偶尔会出现此错误: ConnectionError: HTTPConnectionPool(host='some_ip', port=some_port): Max retries exceeded with url: /some_url/ (Caused by : [Errno 111] Connection refused) exception中的消息是 message : None: Max retries exceeded with url: /some_url/ (Caused by redirect) 我之所以包含它是因为它有额外的信息(caused by redirect) 。 正如我所说,我控制这个请求中涉及的两台服务器,所以我可以对其中一个和/或两个进行更改。 此外,错误似乎是间歇性的,因为它不会每次都发生。 潜在的相关信息 – 服务器A是运行Apache的Python服务器,服务器B是NodeJS服务器。 我不完全是一个Web服务器向导,除此之外,我不确定哪些信息是相关的。 有没有人确切知道这个错误意味着什么,或者如何去调查修复? 或者,有没有人知道哪个服务器可能是问题,提出请求的那个,还是接收的? 编辑:错误已经开始与我们的外部networking资源调用也发生。

Node.js HTTP:请求'结束'事件永远不会被调用

我有一个客户端发送数据块到我的node.js服务器。 我想听“结束”事件并检索累积的请求主体。 这是我的代码: app.post('/users', function(req, res){ req.on('end', function() { // WHY IS THIS NEVER FIRED? console.log(req.body); res.send({ "status": "ok" }); }); }); 问题是,“结束”事件永远不会被解雇。 有人知道为什么 而且,如果我这样做,请求的身体是否会成为所有身体块的累积体?

使用Android发送HTTP发布请求

我一直在尝试从SO和其他站点上的大量示例中学习,但我无法弄清楚为什么我一起入侵的例子不起作用。 我正在构build一个小型概念validation应用程序来识别语音,并将其作为POST请求发送到node.js服务器。 我已经确认的语音识别工作,并且服务器正在接收来自常规浏览器访问的连接,所以我导致相信这个问题是在应用程序本身。 我是否缺less一些小而愚蠢的东西? 没有错误被抛出,但服务器永远不会识别连接。 提前感谢您的任何build议或帮助。 相关的Java(主要活动和必要的AsyncTask): protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == 1001) { if (resultCode == RESULT_OK) { ArrayList<String> textMatchList = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS); if (!textMatchList.isEmpty()) { String topMatch = textMatchList.get(0); PostTask pt = new PostTask(); pt.execute(topMatch); } } } } private class PostTask extends AsyncTask<String, String, String> { […]

node.js http服务器,检测客户端何时断开

我使用express和node.js作为http服务器。 我存储响应对象,这样我就可以将事件传送到该通道上的客户端。 有没有办法检测客户端何时断开连接? 当我杀死我的客户端,我仍然可以写入响应对象,而不会得到任何forms的exception/错误。 它看起来像服务保持底层TCP通道打开,只要我不断写入响应对象。

简单的node.js代理通过http服务器http请求

尝试通过制作一个简单的http代理服务器来了解关于node.js的更多信息。 使用场景很简单:用户 – >代理 – >服务器 – >代理 – >用户 下面的代码工作,直到最后一步。 无法findpipe道连接器的输出回到用户的方式。 #!/usr/bin/env node var url = require('url'), http = require('http'), acceptor = http.createServer().listen(3128); acceptor.on('request', function(request, response) { console.log('request ' + request.url); request.pause(); var options = url.parse(request.url); options.headers = request.headers; options.method = request.method; options.agent = false; var connector = http.request(options); request.pipe(connector); request.resume(); // connector.pipe(response); // […]

使用Node.JS服务HTTP / 1.0响应(未知内容长度,分块传输编码)

问题 我正在通过Node.JS提供未知长度的资源。 因此,不能设置Content-Length标题。 对于HTTP 1.1,要求分块编码用于这种性质的资源。 Node.JS知道这一点,并发送我自己的数据块大小的传输编码,与以下头: HTTP/1.1 200 OK Transfer-Encoding: chunked Connection: close … 对于乖巧的客户来说,这一切都很好。 不过,我有一些不太好的客户(即Android 2.2及更早版本),我必须支持。 这些客户端不支持正确的分块传输编码。 修复尝试#1 我最初的想法是将编码设置为none : response.writeHead(200, {'Transfer-Encoding': 'none'}); 这将禁用Node.JS的自动分块编码并保持与大多数客户端的兼容性。 不过,现在我已经打破了Android 2.3+客户端,因为他们只是看到这样一个伪造的传输编docker咳嗽和呛。 修复尝试#2(我需要帮助) 当我用HTTP/1.0发出请求时,服务器正确地返回没有分块编码的响应: HTTP/1.1 200 OK Connection: close … 这解决了我的问题,使我能够为我所有的麻烦客户服务。 我不必为Transfer-Encoding发送伪造标题,而且我也不必指定内容的长度。 如何强制Node.JS的HTTP服务器始终以HTTP / 1.0模式运行?

NodeJS:发送/上传本地文件到远程服务器

我已经使用Winston模块为我的离线应用程序创build每日日志文件。 我现在需要能够通过POST发送或上传该文件到远程服务器(该部分已经存在) 我知道我需要写块文件,所以它不占用内存,所以我使用fs.createReadStream但是我似乎只得到一个503响应,即使只发送示例文本。 编辑 我发现接收者期望数据被命名为“数据”。 我已经删除了createReadSteam,因为我只能使用“application / x-www-form-urlencoded”和一个同步的fs.readFileSync 。 如果我在php服务器上将其更改为“multipart / form-data”,我可以再次使用createReadStream,或者只有在更改为实际上传json文件时才使用。 在过去的几个星期里,我一直在学习节点,所以任何指针都会被感激地收到。 var http = require('http'), fs = require('fs'); var post_options = { host: 'logger.mysite.co.uk', path: '/', port: 80, timeout: 120000, method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded' } } var sender = http.request(post_options, function(res) { if (res.statusCode < 399) { var text = "" […]

Node.js作为转发代理,但更改URLpath?

我如何让node.js充当代理,并将从一台服务器发送到另一台服务器的所有请求,但剥离/ couchdb /从URLpath,例如POST / couchdb / mydatabase将POST / mydatabase。 当它收到响应时,应该将它发送给第一台服务器。 我所做的就是这个(使用快递)来获取URLpath以/ couchdb / app.all(/^\/couchdb\/(?:.)*/, function(req, res) { }); 有人可以指导我通过。 谢谢

针对超时POST请求的浏览器重试行为不一致

由于超时,服务器没有响应时,我偶尔会遇到POST请求重试。 所有现代浏览器都有幂等请求(GET,HEAD等)的重试逻辑,但是我无法理解为什么会发生POST请求。 我正在testing这种情况下使用一个简单的node.js服务器3路由和铬浏览器。 / : gives a html page with jquery and code snippets to fire ajax requests /hi : gives a text response 'hello' /sleep : request will timeout without any response 默认情况下,node.js http服务器在2分钟后超时请求。 retry.js var http = require('http'); var server = http.createServer(); server.on('request', function(req, res) { console.log(new Date() + ' ' + req.method […]