AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 1078707
Accepted
serverNewbie
serverNewbie
Asked: 2021-09-27 12:29:31 +0800 CST2021-09-27 12:29:31 +0800 CST 2021-09-27 12:29:31 +0800 CST

“不允许 CORS 多源” - 使用 parse-server 和 apache2

  • 772

我使用 apache2 作为我的解析服务器的反向代理。为了允许跨域请求,我最初尝试设置:

Header always set Access-Control-Allow-Origin "*"

在 apache 配置文件中连同:

ProxyPass /parse/ http://localhost:1337/parse/
ProxyPassReverse /parse/ http://localhost:1337/parse/
RewriteEngine On
RewriteCond %{REQUEST_METHOD} OPTIONS
RewriteRule ^(.*)$ $1 [R=200,L]

设置后,请求成功地从 apache 转发到我的解析服务器。但是现在我的 Webapp 抛出CORS Multiple Origin Not Allowed.

在我的浏览器的开发者控制台中,我可以看到这个 Access-Control-Allow-Origin 选项设置了两次。

在此处输入图像描述

我已经确认第二个实例是由于解析服务器而出现的。但是,我找不到阻止 parse-server 或 apache 在响应中设置此选项的方法。

我尝试将 apache 配置中的初始行更改为:

1.

Header always setifempty Access-Control-Allow-Origin "*"
Header always add Access-Control-Allow-Origin "*"
Header always add Access-Control-Allow-Origin "*"
Header always edit Access-Control-Allow-Origin "^$" "*"

这些尝试都没有改变任何东西。但是,删除Access-Control-Allow-Originapache 配置中的选项会阻止初始请求通过解析服务器,因此这不是一个选项。

我正在使用 apache2 版本2.4.29和 parse-server 4.10.3。

有谁知道让这个工作的方法?

reverse-proxy apache-2.4 apache2 parse-server cors
  • 2 2 个回答
  • 1858 Views

2 个回答

  • Voted
  1. Best Answer
    Moritz
    2021-10-06T02:58:13+08:002021-10-06T02:58:13+08:00

    首先,我认为了解 CORS 工作原理的一些背景知识很重要:

    • CORS 由浏览器在客户端进行验证。
    • 为了验证一个源(不同的域、协议或端口)是否被允许访问另一个源,可以在实际的跨源请求之前发出飞行前请求。此请求使用 OPTIONS 方法,并且需要Access-Control在响应中包含标头。

    那么我为什么这么说:我怀疑您需要Access-Control-Allow-Origin在 Apache 中设置标头以使请求“通过”的原因是您的 Apache 配置不是代理OPTION请求。这会导致浏览器在飞行前请求中获得意外响应,并在尝试发出实际请求之前抛出 CORS 错误。

    由于 CORS 在浏览器中经过验证,因此 Apache 反向代理不应在其中发挥任何作用。当您的后端服务器(解析服务器)正确配置为处理 CORS 请求并发出正确的Access-Control-*标头时,无论您在其间放置多少代理,一切都应该正常工作。只要代理转发所有请求。

    或者,您可能希望在反向代理中“添加”CORS 配置,但这在这里似乎没有必要。由于您Access-Control-Allow-Origin在响应中看到两个标头,我怀疑解析服务器实际上已经在尝试处理 CORS 请求。

    我建议您首先检查您的 Apache 配置并确保OPTION将请求转发到解析服务器。如果不应该这样,我会查看浏览器在开发工具的网络选项卡中发出的请求:

    • 飞行前请求看起来如何?甚至有飞行前的要求吗?
    • 它是成功还是失败,有什么错误?
    • Access-Control-*飞行前请求的响应标头是什么?
    • 是否发出最终请求?该请求的响应标头是什么?

    您还可以curl通过设置源头来调用服务来调试这些东西。

    curl -v -X PUT -H "Origin: https://example.com" https://www.example.org
    

    这样,您可以模拟对后端服务的请求并查看它发送的标头。

    • 2
  2. Konstantin Kolinko
    2021-10-07T11:09:45+08:002021-10-07T11:09:45+08:00

    在我的浏览器的开发者控制台中,我可以看到这个 Access-Control-Allow-Origin 选项设置了两次。

    关于重复的标题,我最近在邮件列表上回答了一个类似的问题。

    您必须仔细阅读Header 指令的配置参考以了解发生了什么。请参阅以下文本:“它不提供任何“标准化”单个标题列表“。本质上,据我了解,onsuccess(默认)和always是两个单独的标题表(列表)的名称。

    尝试以下操作:

    Header onsuccess unset Access-Control-Allow-Origin
    Header always set Access-Control-Allow-Origin "*"
    
    • 0

相关问题

  • 反向代理设备[关闭]

  • 清漆配置仅缓存未登录用户

  • Varnish 缓存如何处理不同的域?

  • Varnish 与其他反向代理

  • 内省 Varnish 的工具

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve