【问题标题】:CORS for HTML5 Hybrid App适用于 HTML5 混合应用程序的 CORS
【发布时间】:2015-01-13 23:39:35
【问题描述】:

我已经阅读了很多关于 CORS 的内容以及如何允许 Access-Control-Allow-Origin: * 是 Web 服务器的安全漏洞。但是没有一篇文章解释了我们如何允许 HTML5 混合应用程序访问托管在某些不允许通配符 * 的域上的 Web 服务

我的问题是:据我所知,HTML5 混合应用程序不能在我们可以在 Access-Control-Allow-Origin 列表中设置为白名单域的任何特定域上运行。那么我们如何仍然可以通过在Access-Control-Allow-Origin标签下不允许*的Web服务器上的ajax调用访问混合APP请求数据中的Web服务数据?

【问题讨论】:

  • @MayankSharma 您找到问题的解决方案了吗?我想知道你是如何解决这个问题的。我也有同样的担忧。你介意分享一下吗?谢谢

标签: javascript ajax html cors hybrid


【解决方案1】:

在设备上运行时,您的应用将在浏览器中运行,但将从本地文件系统(从类似于 file://path/to/index.html 的位置)运行。因此,起源不存在。浏览器不会做任何预检 OPTIONS 请求,也不会因为跨域问题而阻止对 API 的调用,只是因为没有源。

因此,您可以将服务器配置为仅允许同源请求,以确保安全。仍然允许从该设备拨打电话。但是,当您在本地开发机器上的浏览器中运行您的应用程序(出于测试目的)时,您可能会遇到 CORS 问题,因为在这种情况下 is 是一个来源。您可以通过允许本地域访问 API(请记住在生产中将其删除)、使用浏览器插件禁用 CORS 或使用代理来解决此问题。

【讨论】:

    【解决方案2】:

    我已经使用 phonegap、jquery 和 ajax 构建了很多混合应用程序。您可以在 php 文件或 .htaccess 文件中设置您的 CORS,如下所示,它将起作用。

    对于 .htaccess 文件使用这个

    Header add Access-Control-Allow-Origin "*"
    Header add Access-Control-Allow-Headers "origin, x-requested-with, content-type"
    Header add Access-Control-Allow-Methods "PUT, GET, POST, DELETE, OPTIONS"
    

    或者,您可以在所有 .php 文件的第一个顶部集成以下代码,以便通过跨域访问。 只要知道符号 * 也可以使所有域都可以访问

    <?php
    header('Access-Control-Allow-Origin: *');  
    header('Access-Control-Allow-Methods: GET, PUT, POST, DELETE, OPTIONS');
    header('Access-Control-Allow-Headers: Content-Type, Content-Range, Content-Disposition, Content-Description');
    ?>
    

    【讨论】:

    • 这是我的担心,我不想让所有域都可以访问它。我们不能在这里避免使用 * 并限制为其他特定值吗?
    • 您也可以“当凭据标志为真时,不能在 Access-Control-Allow-Origin 中使用通配符。”
    【解决方案3】:

    抱歉迟到了。好的,下面的任何一个代码都会为您完成。如果您仍有问题,请大声告诉我 谢谢

    in .htaccess file
    
    Header set Access-Control-Allow-Origin: http://yourdomain-you-are-connecting-from.com
    
    
    or in php
    
    
    
    header("Access-Control-Allow-Origin: http://yourdomain-you-are-connecting-from.com");
    

    【讨论】:

    • 您好,我不能在这里设置任何特定的域,因为它不是从任何域执行的。可能是我不清楚这个问题。让我重新表述一下。我的应用程序是通过 phonegap 捆绑到 .APK 的 HTML/JS/CSS 的组合。这个APK和任何安卓APP一样好。这将使用他们的 webview 在移动设备上运行。任何人都可以下载此 APK 并从他们的设备上运行。所以从技术上讲,它不在服务器上可以提到的任何域上运行。
    【解决方案4】:

    好的,您的应用是静态应用。它不是在线托管的权利。您的应用程序没有对服务器进行任何 ajax、jquery 或 json 调用。该应用程序没有对远程服务器进行任何数据库调用。如果您的应用没有远程调用上述任何内容,则无需担心跨域。

    好的,我要问你另一个问题吗?当您单击应用程序中的 url 链接时,它是否会通过将您带到预期页面来工作。发生了什么。

    【讨论】:

    • APP 不是静态的,它是动态的,并且通过 Restful API 使用 AJAX 与服务器交互。所以 CORS 是我关心的问题。
    猜你喜欢
    • 1970-01-01
    • 2019-12-16
    • 2014-11-08
    • 1970-01-01
    • 2018-03-25
    • 2017-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多