首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CORS anywhere返回代理文本,而不是所需的目标资源

CORS anywhere返回代理文本,而不是所需的目标资源
EN

Stack Overflow用户
提问于 2020-12-07 14:12:55
回答 1查看 229关注 0票数 1

我正在尝试使用node、express和一个cors-anywhere实例为我的arcgis-js-api应用程序设置一个代理。我的服务器文件如下所示:

代码语言:javascript
复制
import express from 'express';
import cors from 'cors';
import corsAnywhere from 'cors-anywhere';

const { PORT } = process.env;
const port = PORT || 3030;

var app = express();

let proxy = corsAnywhere.createServer({
    originWhitelist: [], // Allow all origins
    requireHeaders: [], // Do not require any headers.
    removeHeaders: [], // Do not remove any headers.
});

app.use(cors());

app.get('/proxy/:proxyUrl*', (req, res) => {
    req.url = req.url.replace('/proxy/', '/');
    proxy.emit('request', req, res);
});

app.get('*', (req, res) => {
    res.sendFile(path.resolve(__dirname, 'index.html'));
});

app.listen(port, () => {
    console.log(`App listening on port ${port}`);
});

当我转到http://localhost:3030/proxy/https://maps.disasters.nasa.gov/ags04/rest/services/ca_fires_202008/sentinel2/MapServer?f=json时,我转到我的目标json没有问题,正确地附加了access-control-allow-origin: *

在我的前端html (一个arcgis-js-api应用程序)中,我调用了相同的url:

代码语言:javascript
复制
var layer = new MapImageLayer({
  url: 'http://localhost:3030/proxy/https://maps.disasters.nasa.gov/ags04/rest/services/ca_fires_202008/sentinel2/MapServer?f=json',
});

我的网络选项卡显示的响应不是预期的JSON,而是cors-anywhere代理的文本:

对于那些熟悉arcgis-js-api的用户,您还可以预先配置代理的使用:

代码语言:javascript
复制
urlUtils.addProxyRule({
  urlPrefix: 'maps.disasters.nasa.gov',
  proxyUrl: 'http://localhost:3030/proxy/',
});

如果这样做,网络选项卡显示对localhost:3030/proxy/<url>的调用返回的是index.html页面,而不是所需的json。

为什么当我直接通过浏览器访问url时,代理会给出预期/必需的结果,而从前端文件调用时却不会?感谢您的阅读。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-09 21:30:08

我检查了浏览器控制台,注意到发送到代理的url而不是这个

http://localhost:3030/proxy/https://maps.disasters.nasa.gov/ags04/rest/services/ca_fires_202008/sentinel2/MapServer?f=json

看起来像这样

http://localhost:3030/proxy/https:/maps.disasters.nasa.gov/ags04/rest/services/ca_fires_202008/sentinel2/MapServer?f=json

不确定为什么会发生这种情况,但作为一种快速修复方法,您可以替换

代码语言:javascript
复制
req.url = req.url.replace('/proxy/', '/');

使用

代码语言:javascript
复制
req.url = req.url.replace('/proxy/https:/', '/https://');

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65176887

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档