有没有办法处理CORS而无法访问后端?

时间:2016-03-17 18:00:58

标签: javascript angularjs cors

我想我已经浏览了100篇关于使用AngularJS启用CORS的Stackoverflow帖子。他们中的大多数都引用了向API添加标头。 如果您无法直接访问编辑您正在使用的API,是否仍有解决此问题的方法?

2 个答案:

答案 0 :(得分:3)

如果您需要CORS标头,但原始API无法提供它们,您可以设置一个小型代理服务器并通过它进行调用。使用HAProxy或Nginx,您可以将目标限制为仅限API,并在途中添加标头。您也可以在网站原点下的路径上设置代理,并完全避免使用标头。

要使用HAProxy设置自己的CORS代理,请Example of col-sm && col-md

listen http-in
    mode http
    listen *:80

    # Add CORS headers when Origin header is present
    capture request header origin len 128
    http-response add-header Access-Control-Allow-Origin %[capture.req.hdr(0)] if { capture.req.hdr(0) -m found }
    rspadd Access-Control-Allow-Headers:\ Origin,\ X-Requested-With,\ Content-Type,\ Accept  if { capture.req.hdr(0) -m found }

我更喜欢使用HAProxy,just need to add a few config lines

使用Nginx,because it's incredibly resource-efficient作为标题和代理分别设置:

upstream api_server {
    server apiserver.com;
}

server {
        charset UTF-8;
        listen 80;
        root /home/web/myclient;
        index index.html;
        server_name myclient.com;

        location /api/ {
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header X-NginX-Proxy true;
                proxy_pass http://api_server/;
                proxy_ssl_session_reuse off;
                proxy_set_header Host $http_host;
                proxy_redirect off;
        }

        location ~ /\. {
                deny all;
        }

        location / {
                try_files $uri;
        }
}

两个示例都是从链接的博客帖子中复制的,以防它们消失。我没有写任何一个。

答案 1 :(得分:0)

如果您使用的是Mozilla Firefox,那么有一个名为"随处可见的附加组件"。如果你安装它,你可以在你想要的每个网站上激活和禁用它,它就像一个魅力。