【问题标题】:Converting Some PHP Header Code into Classic ASP将一些 PHP 标头代码转换为经典 ASP
【发布时间】:2016-04-25 10:04:53
【问题描述】:

我有 2 个文件:

  1. 使用 Ionic/AngularJS 编码的本地托管项目试图从 ASP 文件中检索 JSON。
  2. 外部 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 设置的地方。

【问题讨论】:

标签: angularjs json vbscript asp-classic ionic-framework


【解决方案1】:

我找到了解决方法。我注意到了

Call Response.Addheader("Access-Control-Allow-Origin", "*")

适用于$http.get,它现在满足了我的需求。所以对于$http.post 有问题的朋友可以试试$http.get

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多