谷歌云函数替换 url 中的双斜杠
Posted
技术标签:
【中文标题】谷歌云函数替换 url 中的双斜杠【英文标题】:Google cloud functions replaces double slash in url 【发布时间】:2019-11-21 11:58:30 【问题描述】:我正在尝试在 Google Cloud Functions 上部署 cors-anywhere。我应该在 gcp 的链接之后提供 url。
看起来像这样:
https://us-central1-my-project.cloudfunctions.net/my-function/http://dummy.restapiexample.com/api/v1/employees
但它已转换为:
https://us-central1-my-project.cloudfunctions.net/my-function/http:/dummy.restapiexample.com/api/v1/employees
主机后面的所有双斜杠都转换为简单的。
我尝试替换 req.url 以将 http:/ 转换为 http://,但仍然无法正常工作。也许这需要在网络服务器级别进行修复。
这是我在 GCP 中的函数
var cors_proxy = require('cors-anywhere').createServer(
requireHeader: ['origin', 'x-requested-with'],
removeHeaders: [
'cookie',
'cookie2',
],
// See README.md for other options
);
exports.myFunction = (req, res) =>
req.url = req.url.replace('/my-function/', '/'); // Strip '/my-function' from the front of the URL, else the proxy won't work.
return cors_proxy.emit('request', req, res);
;
有人尝试在无服务器功能中部署它吗?
【问题讨论】:
这不是合法的 URL。当您需要将 URL 添加为查询参数时,请查看 URL Encoding。 只需使用https://us-central1-my-project.cloudfunctions.net/my-function/dummy.restapiexample.com/api/v1/employees
作为 URL。正如您在问题中链接到的github.com/Rob--W/cors-anywhere 的自述文件所述,“代理 URI 的协议部分是可选的,默认为“http”。如果指定了端口 443,则协议默认为“https”。” 因此,如果您想代理 https://dummy.restapiexample.com/api/v1/employees
(https),则应使用 URL https://us-central1-my-project.cloudfunctions.net/my-function/dummy.restapiexample.com/api/v1/employees:443
【参考方案1】:
您正在使用 req.url
,其中包含请求 URL 的规范化版本。您需要使用req.originalUrl
,顾名思义,它保留了原始请求的 URL。请参阅Express docs 了解更多信息。
【讨论】:
以上是关于谷歌云函数替换 url 中的双斜杠的主要内容,如果未能解决你的问题,请参考以下文章
通过谷歌云功能在 DataFlow 作业中的 GCS .csv
谷歌云在使用 PostMan 时签署了 url “SignatureDoesNotMatch”,但在 Python 中运行良好