我正在尝试设置AngularJS与跨源资源进行通信,其中传递我的模板文件的资产主机位于不同的域上,因此角度执行的XHR请求必须是跨域的.我已经为我的服务器添加了适当的CORS标头,以便使其工作,但它似乎不起作用.问题是,当我在浏览器(chrome)中检查HTTP请求时,发送到资产文件的请求是OPTIONS请求(它应该是GET请求).
我不确定这是AngularJS中的错误还是我需要配置一些东西.根据我的理解,XHR包装器无法发出OPTIONS HTTP请求,因此看起来浏览器正在试图确定在执行GET请求之前是否"允许"首先下载资产.如果是这种情况,那么我是否还需要使用资产主机设置CORS标头(Access-Control-Allow-Origin:http://asset.host ..)?
我有一个ASP.NET Web API,由三个不同的SPA调用.我正在为Web API使用Windows身份验证.我最初尝试在Web.config中配置CORS,如下所示:
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="http://localhost:63342" />
<add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE" />
<add name="Access-Control-Allow-Headers" value="Origin, X-Requested-With, Content-Type, Accept" />
<add name="Access-Control-Allow-Credentials" value="true" />
</customHeaders>
</httpProtocol>
Run Code Online (Sandbox Code Playgroud)
这导致了这个预检问题:
Response to preflight request doesn’t pass access control check: No ‘Access-Control-Allow-Origin’ header is present on the requested resource. Origin (...) is therefore not allowed access.
Run Code Online (Sandbox Code Playgroud)
我通过在Global.asax.cs中添加以下方法解决了:
protected void Application_BeginRequest()
{
if (Request.Headers.AllKeys.Contains("Origin") && Request.HttpMethod == "OPTIONS")
{
Response.Flush();
}
}
Run Code Online (Sandbox Code Playgroud)
这种方法适用于单一SPA.我以为我可以去Web.config并添加其他类似的来源:
<add name="Access-Control-Allow-Origin" value="http://localhost:63342,http://localhost:63347,http://localhost:63345/>
Run Code Online (Sandbox Code Playgroud)
但显然这是不允许的.这产生了以下错误:
The 'Access-Control-Allow-Origin' header contains …Run Code Online (Sandbox Code Playgroud) 我Web Api 2在Azure和AngularJsforntend 上托管了后端.我了解一些HTTP request使用预先检查OPTIONS request.我的问题是如何以这种方式实现后端,OPTIONS requests如果控制器中有一些将处理后续操作,则所有将返回200 GET/POST/PUT/DELETE/....
我在我的localhost中有一个$ http请求,它正在调用一些api的url.我在执行呼叫时遇到错误
Response for preflight has invalid HTTP status code 403
Run Code Online (Sandbox Code Playgroud)
我可以使用角度做任何事情,以便我可以解决这个问题吗?我有CROS的chrome插件允许交叉来源请求
$http({
method: 'POST',
url: url,
data:data1,
headers: {
'Access-Control-Allow-Origin': '*',
}
})
Run Code Online (Sandbox Code Playgroud)