如何在我的Ajax代码或Varnish配置中启用CORS?

时间:2015-02-04 09:00:08

标签: jquery ajax nginx varnish

我正在

XMLHttpRequest cannot load http://example.com/system/applications. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://my-ownServer.com:8081' is therefore not allowed access.

我使用Varnish作为我的反向代理,NGINX作为在同一服务器上配置的应用服务器。

我已将Varnish配置为反向代理,并在以下配置中处理CORS,但它无法正常工作

backend default {
  .host = "localhost";
  .port = "8080";
}
backend master {
  .host = "192.168.23.1";
  .port = "80";
}

 sub vcl_recv {
 if (req.url ~ "^/platform" ||
      req.url ~ "^/videos") {
       set req.backend = master;  } }
}
 sub vcl_deliver {
        if (req.request ~ "OPTIONS"){
  set resp.http.Access-Control-Allow-Origin = "*";
  set resp.http.Access-Control-Allow-Credentials = "true";
  set resp.http.Access-Control-Allow-Methods = "GET, POST, PUT, DELETE, OPTIONS";
        set resp.http.Access-Control-Allow-Headers = "Origin, Accept, Content-Type, X-Requested-With, X-CSRF-Token";
                set resp.status = 200;
                set resp.response = "OK";
        }
  if (obj.hits >= 0)
  {
    set resp.http.X-Cache = "HIT";
  }
    else
  {
    set resp.http.X-Cache = "MISS";
  }

  if (req.request ~ "GET"){
  set resp.status = 200;
  set resp.response = "OK"; }
        set resp.http.Access-Control-Allow-Origin = "*";
        set resp.http.Access-Control-Allow-Methods = "GET, POST, PUT, DELETE";
        set resp.http.Access-Control-Allow-Headers = "Origin, Accept, Content-Type, X-Requested-With, X-CSRF-Token";

        return (deliver);
}
sub vcl_fetch {
#  if (req.url ~ "\^platform"){
set beresp.http.Access-Control-Allow-Origin = "*";
set beresp.http.Access-Control-Allow-Methods = "GET, POST, PUT, DELETE, OPTIONS";
set beresp.http.Access-Control-Allow-Credentials = "true";
set beresp.http.Access-Control-Allow-Headers = "X-Accept-Charset,X-Accept,Content-Type,Origin, Accept,X-Requested-With, X-CSRF-Token"; #}
  }

我的Ajax代码是

 getApplications: function (serverRoot) {
            var deferred = new $.Deferred();
            var appURL = '/system/applications';
            $.ajax({
                url: serverRoot + appURL,
                type: 'GET',
           //     crossDomain: true,
                timeout: timeOut,
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function (data, textStatus, xhr) {
                    if (xhr.status == 200) {
                        log("system/applications call successful");
                        log("Body:\n" + xhr.responseText);

                        applications = $.parseJSON(xhr.responseText);
                        deferred.resolve(Mint.Core.clone(applications));
                    } else {
                        deferred.reject(" call not successful");
                    }
                },
                error: function (data, textStatus, xhr) {
                    deferred.reject(appURL + " rest call failed " + data.status + data.responseText);
                }

        });

在浏览器中请求OPTIONS有

Remote Address:192.168.23.1:80
Request URL:http://example.com/system/applications
Request Method:OPTIONS
Status Code:200 OK
Request Headersview source
Accept:*/*
Accept-Encoding:gzip, deflate, sdch
Accept-Language:en-US,en;q=0.8
Access-Control-Request-Headers:accept, content-type
Access-Control-Request-Method:GET
Cache-Control:no-cache
Connection:keep-alive
Host:24.114.11.115
Origin:http://my-ownServer:8081
Pragma:no-cache
Referer:http://my-ownServer:8081/LG/index.html
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.94 Safari/537.36
Response Headersview source
Allow:GET, HEAD, POST, PUT, DELETE, TRACE, OPTIONS, PATCH
Content-Length:0
Date:Wed, 04 Feb 2015 08:50:10 GMT
Server:Apache-Coyote/1.1
Via:1.0 127.0.0.1 (squid/3.1.10)
X-Cache:MISS from 127.0.0.1
X-Cache-Lookup:MISS from 127.0.0.1:8080

请纠正我出错的地方请分享你的答案

0 个答案:

没有答案