Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 围绕同一原产地政策工作?_Javascript_Php_Security_Browser_Same Origin Policy - Fatal编程技术网

Javascript 围绕同一原产地政策工作?

Javascript 围绕同一原产地政策工作?,javascript,php,security,browser,same-origin-policy,Javascript,Php,Security,Browser,Same Origin Policy,我在本地安装的XAMPP上有一个名为TEST.PHP的文件。当我转到并执行它时,脚本应该将值ID和NAME发布到站点,并将输出放入数据中。这不起作用,因为同源策略。当我跟踪包时,我得到一个名为“NS\u Error\u DOM\u BAD\u URI”的错误。我现在的问题是,是否有任何方法可以在不需要访问的情况下实现这一点 TEST.PHP <script> $(window).load(function(){ var url = "http:/

我在本地安装的XAMPP上有一个名为TEST.PHP的文件。当我转到并执行它时,脚本应该将值ID和NAME发布到站点,并将输出放入数据中。这不起作用,因为同源策略。当我跟踪包时,我得到一个名为“NS\u Error\u DOM\u BAD\u URI”的错误。我现在的问题是,是否有任何方法可以在不需要访问的情况下实现这一点

TEST.PHP

   <script>
    $(window).load(function(){
            var url = "http://otherdomain.com/post.php";

            $.post(url,{id : "12", name : "John"}, function(data)
            {
                alert("It worked!");
            });
    });
    </script>
<!DOCTYPE html>
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script>
$(document).ready(function(){
    $("button").click(function(){
        $.post("proxy.php", function(data,status){
            alert("Data: " + data + "\nStatus: " + status);
        });
    });
});
</script>
</head>
<body>

<button>Send Data</button>

</body>
</html>
<?php
$ch = curl_init();

curl_setopt($ch, CURLOPT_URL,"http://otherdomain.com/data");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS,"name=Jack&age=23");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$server_output = curl_exec ($ch);

curl_close ($ch);

if ($server_output == "OK") { echo "It Worked!"; } else { echo "Error: " . $server_output; }

?>

$(窗口)。加载(函数(){
变量url=”http://otherdomain.com/post.php";
$.post(url,{id:“12”,name:“John”},函数(数据)
{
警惕(“成功了!”);
});
});
更新

我现在将其更改为以下设置。我有两个名为SEND.PHP和PROXY.PHP的文件。我将一个请求从send.PHP发送到PROXY.PHP,PROXY.PHP将实际请求发送到OTHERDOMAIN.COM。当我现在执行SEND.PHP时(意味着我按下了按钮),我总是得到结果“错误:403禁止访问”

SEND.PHP

   <script>
    $(window).load(function(){
            var url = "http://otherdomain.com/post.php";

            $.post(url,{id : "12", name : "John"}, function(data)
            {
                alert("It worked!");
            });
    });
    </script>
<!DOCTYPE html>
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script>
$(document).ready(function(){
    $("button").click(function(){
        $.post("proxy.php", function(data,status){
            alert("Data: " + data + "\nStatus: " + status);
        });
    });
});
</script>
</head>
<body>

<button>Send Data</button>

</body>
</html>
<?php
$ch = curl_init();

curl_setopt($ch, CURLOPT_URL,"http://otherdomain.com/data");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS,"name=Jack&age=23");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$server_output = curl_exec ($ch);

curl_close ($ch);

if ($server_output == "OK") { echo "It Worked!"; } else { echo "Error: " . $server_output; }

?>

$(文档).ready(函数(){
$(“按钮”)。单击(函数(){
$.post(“proxy.php”,函数(数据、状态){
警报(“数据:+数据+”\n状态:+状态);
});
});
});
发送数据
PROXY.PHP

   <script>
    $(window).load(function(){
            var url = "http://otherdomain.com/post.php";

            $.post(url,{id : "12", name : "John"}, function(data)
            {
                alert("It worked!");
            });
    });
    </script>
<!DOCTYPE html>
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script>
$(document).ready(function(){
    $("button").click(function(){
        $.post("proxy.php", function(data,status){
            alert("Data: " + data + "\nStatus: " + status);
        });
    });
});
</script>
</head>
<body>

<button>Send Data</button>

</body>
</html>
<?php
$ch = curl_init();

curl_setopt($ch, CURLOPT_URL,"http://otherdomain.com/data");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS,"name=Jack&age=23");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$server_output = curl_exec ($ch);

curl_close ($ch);

if ($server_output == "OK") { echo "It Worked!"; } else { echo "Error: " . $server_output; }

?>


不,Javascript中没有解决同源策略的方法。这是一个安全特性。但是,如果您有权访问其他域,您可以在PHP中使用CURL实现类似的功能。

为了避免同源策略限制,您必须使用代理文件。
在proxy.php内部,您可以通过CURL或其他HTTP库向otherdomain.com发出请求。通过JavaScript调用代理文件,而不是直接调用otherdomain.com。

使用同源策略的全部目的是防止人们这样做。看看这个:你需要用php而不是JavaScript来做“otherdomain”的事情。谢谢,tuananh,但这只有在您有权访问服务器时才有用。如果我将值从mydomain.com传递到otherdomain.com或从proxydomain.com传递到otherdomain.com,应该不会有任何区别,对吗?我不明白为什么这样做会奏效,因为起源仍然不一样。谢谢大家!@user3877230-同源策略仅适用于浏览器,但PHP文件正在服务器上运行。您的JavaScript可以访问PHP,因为它来自同一个服务器(即:您的服务器)。非常感谢您的提示和解释,我将尝试一下!