将一些PHP头代码转换为经典ASP

时间:2016-04-25 10:04:54

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

我有2个文件:

  1. 在Ionic / AngularJS中编码的本地托管项目,试图从ASP文件中检索JSON。
  2. 外部ASP文件,用于输出来自查询的数据库值的JSON数据。
  3. 但是,每当我的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
    

    不幸的是,这不起作用,我甚至尝试在Call AddHeader("Access-Control-Allow-Origin", "*")声明之外做If;但无济于事。

    现在这是PHP中我试图在ASP中模拟的代码。我成功地检索了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的设置。

1 个答案:

答案 0 :(得分:1)

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

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

适用于$http.get,它现在满足了我的需求。因此,对于$http.post遇到问题的人,可以尝试$http.get