2014-11-25 93 views
0

我在Win 2008 R2 Ent服务器上的IIS中安装了一个asp.net mvc5(带有Angular)网站,并且在服务器本身上运行该网站时,一切正常运行。发出http请求的访问控制头问题

只要我们从服务器外部访问该网站,我得到CORS相关的错误:

 Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://localhost/api/init?space=razor_RAGE&environment=razor_RAGE&clariteConfig=E:\razor_RAGE\master\bin\clarite_config.xml. This can be fixed by moving the resource to the same domain or enabling CORS. 

我认为解决方案是正确的头添加到HTTP请求:

'Access-Control-Allow-Origin': 'true' 

但是,它似乎并没有解决CORS问题。

下面是我从JavaScript发出请求的例子(所有好的服务器上,但不会在服务器之外的工作):

 this.getRazorInitParams = function() { 
     var deferred = $q.defer(); 
     deferred.notify("Getting init parameters..."); 
     var razorEnvParams = []; 
     $http({ 
      method: 'GET', 
      encoding: 'JSON', 
      headers: { 
       'Access-Control-Allow-Origin': 'true' 
      }, 
      url: 'breeze/Rage/GetRazorEnv' 
     }).success(function (data, status, headers, config) { 
      razorEnvParams = data; 
      deferred.resolve(razorEnvParams); 
     }).error(function (data, status, headers, config) { 
      console.log("Error in userContext.js, getRazorInitParams " + status); 
     }); 
     return deferred.promise; 
    } 

下面是从C#API层snipet:

public class initController : ApiController 
{   
    public HttpResponseMessage Get() 
    { 
     // space, env, dom, cConf vars all defined here.. 

     string resp = DynAggrClientAPI.initApp(space, env, dom, cConf); 

     var response = Request.CreateResponse(HttpStatusCode.OK); 
     response.Content = new StringContent(resp, Encoding.UTF8, "application/json"); 

     return response; 
    } 
} 

我正在寻找正确的解决方案。有什么我在这里失踪?

由于事先

鲍勃

回答

1

为标头中的值应为特定域,或星号,表明CORS请求可以来自任何域。

Access-Control-Allow-Origin: 'http://example.org' 

Access-Control-Allow-Origin: '*' 

另外请注意,你不能 “白名单” 多个域。它可以是一个或全部。

如果您打算使用所谓的“复杂”请求(即,除了简单的GET或POST请求之外),还需要设置Access-Control-Allow-Methods字段,并且如果要检索特定标题,则Access-Control-Allow-Headers (尽管在这种情况下,他们不会被需要)。

+1

我会补充说,这不是一个每个请求的设置,而是一个网站/服务器上的IIS设置。 http://stackoverflow.com/questions/12458444/enabling-cross-origin-resource-sharing-on-iis7 – xDaevax 2014-11-25 14:30:51

+0

Access-Control-Allow-Origin:'*'(需要一个报价)不起作用。我也无法找到在IIS处理程序文章中提到的OPTIONSVerb处理程序。 – 2014-11-25 19:37:13

+0

你能证实客户端收到ACAO头文件吗?我对IIS不太熟悉,所以可能会出现问题。 OPTIONS谓词只针对复杂的请求发送,所以您应该可以忽略它。 编辑:你应该从你的AJAX请求中删除额外的标题(ACAO之一)。它们不是必需的,它们会导致请求变得“复杂”。复杂的请求在服务器端需要一些额外的头文件(正如我的回答中所述)。 – Lapixx 2014-11-26 22:26:28