Javascript 围绕同一原产地政策工作?
我在本地安装的XAMPP上有一个名为TEST.PHP的文件。当我转到并执行它时,脚本应该将值ID和NAME发布到站点,并将输出放入数据中。这不起作用,因为同源策略。当我跟踪包时,我得到一个名为“NS\u Error\u DOM\u BAD\u URI”的错误。我现在的问题是,是否有任何方法可以在不需要访问的情况下实现这一点 TEST.PHPJavascript 围绕同一原产地政策工作?,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:/
<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,因为它来自同一个服务器(即:您的服务器)。非常感谢您的提示和解释,我将尝试一下!