【问题标题】:How to bypass Cross origin policy [duplicate]如何绕过跨源策略[重复]
【发布时间】:2015-07-11 22:11:43
【问题描述】:

需要访问另一台服务器中的 JSON 文件的移动应用。并且其显示的跨源策略被阻止。那么有没有办法绕过或访问文件?

【问题讨论】:

  • 你有访问其他服务器的权限吗?
  • CORS 的存在是有原因的。因此,除非您有权访问目标服务器来更改 CORS 策略,否则您将无法绕过它。
  • 尝试搜索cross origin JSON
  • 是的,我可以访问其他服务器,但我们不能在主应用程序中使用任何 php 代码
  • 然后只需应用跨域标头.. 但这仍然需要 php 或使用 htaccess 文件来应用标头

标签: javascript php same-origin-policy


【解决方案1】:

如前所述,您需要一个简单的 php 代理脚本。

这样,您的服务器会抓取 json 文件,您只需从客户端访问您的服务器。 .这样 javascript 只处理同一个域。

<?php
  header('Content-Type: application/json');
  echo file_get_contents('http://example.com/data.json');
?>

Proxy.php

<?php
  header('Content-Type: application/json');
  echo file_get_contents('http://example.com/'.$_REQUEST['file']);
?>

另一种方法是将所有请求标头作为查询字符串发送,这也可以是 post/get

if (isset($_REQUEST['query'])) {
    $sQuery = http_build_query($_REQUEST);
    header('Content-Type: application/json');
    echo file_get_contents('https://www.example.com?'.$sQuery);
    exit;
}

?>

使用第二个示例,您可以尝试类似http://localhost/proxy.php?file=somefile.json

HTACCESS 方法

有关在服务器上使用 htaccess 文件htaccess Access-Control-Allow-Origin,请参阅以下页面

<FilesMatch ".(json|js|jsn)">
    Header set Access-Control-Allow-Origin "*"
</FilesMatch>

【讨论】:

  • 作为移动应用程序,它将适用于 windows phone 和 firfox os,并且只支持 html、css 和 JS,我们不能在应用程序中包含的主文件中使用任何 php。那么有什么相关的解决方案吗?
  • 是的..我的错误,已更正。
  • 您托管应用程序的服务器应该有 php,如果您的应用程序仅使用本地文件,那么您将需要托管一个 php 文件来使用服务器执行此操作或更改跨域标头托管 json 文件的服务器
  • 你也是!您被 PHP 标记所吸引。如果 PHP 解决方案不是一个选项,为什么有人会用 PHP 标记问题?顺便说一句,我真的很喜欢你的解决方案。非常简单的代理。如果没有别的,我相信你已经帮助了别人。这个OP?,不太确定这是否可能。
  • 这是 PHP 代理所能做到的最简单的方法,但同意它会帮助其他人。虽然在这种情况下,他可以在另一台服务器上使用 HTACCESS 文件并允许跨域设置文件
【解决方案2】:

使用标题功能。看看这个链接how to bypass Access-Control-Allow-Origin?

    header('Access-Control-Allow-Origin: *');

【讨论】:

  • 这个答案需要一些背景信息和进一步解释。
  • 这只有在您有权访问其他服务器时才有效..
  • 实际上人们不赞成这样的事情,因为它只值得评论.. 它不是一个完整的答案.. 而且如果他们需要非 PHP 方法,那么它对他们没有进一步的帮助.. 展开您的答案超过一行/评论文本量。
  • Sam...简单地了解什么是值得回答的内容与值得评论的内容....这就是我要说的全部内容。
  • 首先...您对其进行了编辑...您的第一个响应只是单个 php 行...其次,仍然存在的链接指的是仍然仅涵盖 PHP 的源页面...已确定在这种情况下不可用。再一次,你需要在你的答案中付出更多的努力。无论是展示一些实际的努力还是解释一些事情。不要只是发布原始答案。
【解决方案3】:

您将其归类为 PHP。您最好使用 PHP 获取 JSON,然后使用 PHP 创建 JS 所需的数据。

如果没有关于您的应用的更多信息,我在这里非常有限。

这是一个非常典型的将 json 数据导入 JavaScript 的 PHP 示例:

$json = json_decode(file_get_contents('http://example.com/data.jsn'),true);
$JS = 'var data = ';
foreach ($json as $key => $value){
  $JS .= "[$key,$value],"
}
$JS = substr($JS,0,-1) . ';';  // remove trailing comma, add semicolon



echo <<<EOT
<script type="text/javascript">//<![CDATA[
$JS
//]]>
</script>
EOT;

【讨论】:

  • 有一个快乐的媒介,PHP 代理现有的 JSON 请求并直接通过它。无需混合 PHP 和 JS,也无需更改现有代码中的 URL 以外的任何内容。
  • @JAAulde “只是通过”不是我所做的吗?我可以看到 PHP 作为 JS 代理的唯一另一种方法是使用 AJAX,这太慢了,需要浏览器发出额外的 HTTP 请求。多年来,我发现混合 PHP 和 JS 可以带来巨大的好处。简单、高效、快捷,我喜欢这三个。这里能不能用oit,不知道,资料不够。
  • 我推断 OP 已经在使用 AJAX(虽然我可能错了),并且它可能是在应用程序的生命周期中不断重新加载数据的东西。如果无法实现 CORS,则服务器端代理是此类情况下的标准实现。我还要注意,应该避免在构建 $JS 字符串时手动创建 JS 数据,并且应该使用 JSON 序列化来代替它。前者容易出错,而且更难阅读。在这种情况下,数据已经是 JSON,所以这也是额外的工作。
  • 我必须同意你的观点,OP 很可能使用 AJAX。如果情况是多个 AJAX 调用正在被进行,或者 AJAX 调用被用户交互改变,那么我的解决方案很快就会崩溃。我仍然喜欢传播有关混合 PHP 和 JS 的信息。需要的时候很棒。我从来没有见过像我一样做的任何代码。我经常使用这种技术。不一定是 JSON,而是将 db 数据导入 JS。
  • 作为移动应用程序,它将适用于 windows phone 和 firfox os,并且只支持 html、css 和 JS,我们不能在应用程序中包含的主文件中使用任何 php。那么有什么相关的解决方案吗?
猜你喜欢
  • 2014-03-17
  • 2012-12-30
  • 2011-02-14
  • 2013-09-06
  • 1970-01-01
  • 1970-01-01
  • 2011-05-28
  • 2015-09-05
  • 1970-01-01
相关资源
最近更新 更多