【发布时间】:2016-04-25 10:04:53
【问题描述】:
我有 2 个文件:
- 使用 Ionic/AngularJS 编码的本地托管项目试图从 ASP 文件中检索 JSON。
- 外部 ASP 文件输出由查询中的数据库值构成的 JSON 数据。
但是,每次我的 Angular 代码尝试调用我的外部托管 ASP 文件时,我都会收到以下错误:
跨源请求被阻止:同源策略不允许读取位于 http://mysite/mobile/api.asp 的远程资源。 (原因:CORS 标头“Access-Control-Allow-Origin”缺失)。
我知道我可能没有在某处错误地编码我的标题。这就是我目前在 Classic ASP 中设置标题的方式:
If Request.ServerVariables("HTTP_ORIGIN") <> Null Or Request.ServerVariables("HTTP_ORIGIN") <> "" Then
Call AddHeader("Access-Control-Allow-Origin", Request.ServerVariables("HTTP_ORIGIN"))
Call AddHeader("Access-Control-Allow-Credentials", "true")
Call AddHeader("Access-Control-Max-Age", "86400")
End If
If Request.ServerVariables("REQUEST_METHOD") = "OPTIONS" Then
Call AddHeader("Access-Control-Allow-Methods", "GET, POST, OPTIONS")
Call AddHeader("Access-Control-Allow-Headers", Request.ServerVariables("HTTP_ACCESS_CONTROL_REQUEST_HEADERS"))
Call Response.AddHeader("Access-Control-Allow-Origin", "*")
End If
不幸的是,这不起作用,我什至尝试在If 语句之外只做Call AddHeader("Access-Control-Allow-Origin", "*");但无济于事。
现在这是我试图在 ASP 中模拟的 PHP 代码。我成功地检索了 JSON 数据而没有出现标题错误。
if (isset($_SERVER['HTTP_ORIGIN'])) {
header("Access-Control-Allow-Origin: {$_SERVER['HTTP_ORIGIN']}");
header('Access-Control-Allow-Credentials: true');
header('Access-Control-Max-Age: 86400'); // cache for 1 day
}
if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD']))
header("Access-Control-Allow-Methods: GET, POST, OPTIONS");
if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']))
header("Access-Control-Allow-Headers: {$_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']}");
exit(0);
}
那么我为什么不直接使用 PHP 文件呢?我当前的主机没有配置 PHP 并且要配置它,我必须重新启动服务器,这不是一个选项,因为我的站点每隔几秒就会发生一次连续的数据库更改。
我希望有人能纠正我在 ASP 代码中搞砸了 Header 设置的地方。
【问题讨论】:
-
你试过
Response.AddHeader- msdn.microsoft.com/en-us/library/ms524327%28v=vs.90%29.aspx -
是的,我有,但无济于事。不过感谢您的回复。
标签: angularjs json vbscript asp-classic ionic-framework