1

现在我的兴趣是使用带有 Apache Royale 的远程对象来与我的服务器和 Amfphp 通信,我在 CORS 上遇到了困难。

我第一次尝试使用SimpleRemoteObject是这样的错误:

Access to XMLHttpRequest at '*http://url_to_your_server/gateway.php*' from origin 'null' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.

当我从本地启动我的应用程序并使用 AMF 与我的服务器通信时,CORS 会阻止请求,因为请求者的来源是 localhost 而不是我的服务器域。

经过一番 google'ling,我找到了一个解决方案:启动带有一些具体参数的 Chrome。这是我的 launch.json 文件:

{
    "configurations": [



        {
            "type": "chrome",
            "request": "launch",
            "name": "Launch Chrome",
            "url": "${workspaceFolder}/bin/js-debug/index.html",
            "runtimeArgs": [
                "--disable-web-security"
             ],
            "webRoot": "${workspaceFolder}",
            "preLaunchTask": "build"
        }





    ]
}

你觉得这个解决方案怎么样?还有其他解决方案吗?

问候

[更新] 警告:自上一版 chrome(2020 年 3 月)以来 --disable-web-security 无法正常工作:由于禁止保存 cookie,PHPSESSID 不再工作

4

2 回答 2

1

无需禁用 Chrome 的网络安全性即可避免此问题的另一种方法是运行指向您的应用程序的本地 nginx 网络服务器,同时允许它代理到您的后端。

这是我的 nginx 配置的删减版本,可以为您提供基本概念:

http {
    server {
        listen 80;

        location / {
            root /path_to_your/bin/js-debug;

            try_files $uri $uri/ @backend;
        }

        location @backend {
            proxy_pass http://url_to_your_server:80;
        }
    }
}

完成这项工作的关键是try_files. 它将首先尝试您尝试的路径,然后如果在第一个、第二个等处找不到资源,则尝试后续路径。

例子:

http://localhost/在浏览器中访问将首先加载index.html将加载 Royale 应用程序的文件。当您的应用程序向 AMF 网关发出请求时,例如http://localhost/amf,它将尝试使用 设置的每个路径try_files。它不会/amf$uri或处找到$uri/,但会在 处找到@backend

这实际上与 Carlos 建议的在与后端相同的 Web 服务器上运行应用程序相同,而无需您禁用 Web 安全性。

于 2020-04-22T17:41:32.777 回答
0

该解决方案适用于本地测试。在生产中,royale 客户端将托管在与 AMFPHP 后端相同的域中,因此问题将消失。事实上,您通常会将您的应用程序配置为在服务于royale 客户端的本地主机中进行测试,这也将消除这种需求。

于 2019-10-04T18:10:04.267 回答