gpt4 book ai didi

node.js - 这个简单的 Node.js 代理为什么以及如何工作?

转载 作者:太空宇宙 更新时间:2023-11-03 22:07:34 24 4
gpt4 key购买 nike

我在 Netlify 上有一个仅前端的 Web 应用程序,它必须使用 OpenSubtitles.org 上的 API。尽管 OpenSubtitles.org 启用了 CORS,但有时我会遇到预检错误,因此我决定使用代理。

我在使用 Netlify 的代理功能时遇到问题,因此我决定在 Heroku 上创建自己的代理,并将我的请求从前端发送到那里,这样这些请求就会从服务器代理到 OpenSubtitles.org。

我根据我找到的代码想出了以下内容 here :

const express = require('express');
const request = require('request');

express()
.use('/', function(req, res) {
req.pipe(
request({
url: 'http://rest.opensubtitles.org/search' + req.url,
headers: {
'User-Agent': 'TemporaryUserAgent'
}
})
).pipe(res);
})
.listen(process.env.PORT || 8000);

我想我部署这个,尝试一下,然后我将在其上启用 CORS。然而我刚刚意识到它运行得很好,无需做任何其他事情。这怎么可能?为什么我可以从不同域上的仅前端应用程序调用它,而无需显式启用 CORS?

另外,如果服务器崩溃了,如何处理那里的错误?

最佳答案

CORS 正在运行,因为您请求的 url 响应的 header Access-Control-Allow-Origin 设置了值 *。由于您将该响应及其 header 通过管道传输回原始 res 对象,因此它将启用 CORS,就好像它来自您的本地代理一样。

下面是一个更简单的示例,说明如何将请求代理到另一个站点并使用 Node 流完整返回其响应。

const express = require('express')
const request = require('request')
const port = process.env.PORT || 1337

let server = express()

const proxyMiddleware = (req, res, next) => {
let url = `https://www.google.com/${req.url}`
let proxyRequest = request(url)

// Pass request to proxied request url
req.pipe(proxyRequest)

// Respond to the original request with the response from proxyRequest
proxyRequest.pipe(res)
}

server.use(proxyMiddleware)

server.listen(port, () => console.log(`Listening on ${port}`))

关于node.js - 这个简单的 Node.js 代理为什么以及如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51315780/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com