gpt4 book ai didi

ajax - chrome中跨域ajax POST

转载 作者:行者123 更新时间:2023-12-03 22:27:04 30 4
gpt4 key购买 nike

有几个关于跨域 AJAX 问题的主题。我一直在研究这些,结论似乎是这样的:

除了使用 JSONP 或代理解决方案之类的东西之外,您不应该能够对另一个域执行基本的 jquery $.post()

我的测试代码看起来像这样(在“http://myTestdomain.tld/path/file.html ”上运行)

var myData = {datum1 : "datum", datum2: "datum"}
$.post("http://External-Ip:port", myData,function(return){alert(return);});

当我尝试这个(我开始寻找的原因)时,chrome-console 告诉我:

XMLHttpRequest cannot load http://External-IP:port/page.php. Origin http://myTestdomain.tld is not allowed by Access-Control-Allow-Origin.

据我所知,这是预料之中的。我不应该能够做到这一点。问题是 POST 实际上确实是通过的。我运行了一个简单的脚本,将 $_POST 保存到文件中,很明显该帖子陷入困境。我返回的任何真实数据都不会传递到我的调用脚本,由于访问控制问题,这似乎又是预期的。但帖子实际到达服务器的事实让我感到困惑。

  • 我认为在“myTestdomain”上运行的上述代码不应该能够对其他域(外部 IP)执行简单的 $.post() ,这是否正确?
  • 即使没有收到输出,请求是否会实际到达外部 IP 的脚本?或者这是一个错误。 (我使用的是 Chrome 11.0.696.60)

最佳答案

我之前在 WebKit bugtracker 上发布了关于此问题的票证,因为我认为这是奇怪的行为,并且可能存在安全风险。

由于与安全相关的票证无法公开查看,我将在此引用 Justin Schuh 的回复:

This is implemented exactly as required by the spec. For simple cross-origin requests http://www.w3.org/TR/cors/#simple-method> there is no pre-flight check; the request is made and the response cannot be read if the appropriate headers do not authorize the requesting origin. Functionally, this is no different than creating a form and using script to make an off-origin POST (which has always been possible).

所以:您可以执行 POST,因为无论如何您都可以通过嵌入表单并使用 JavaScript 触发提交按钮来完成此操作,但您看不到结果。因为您无法在表单场景中执行此操作。

解决方案是向目标服务器上运行的脚本添加 header ,例如

<?php
header("Access-Control-Allow-Origin: http://your_source_domain");
....
?>

尚未测试过,但根据规范,应该可以工作。

Firefox 3.6 似乎以不同的方式处理它,首先执行一个 OPTIONS 来查看它是否可以执行实际的 POST。 Firefox 4 做了与 Chrome 相同的事情,或者至少在我的快速实验中是这样做的。有关更多信息,请访问 https://developer.mozilla.org/en/http_access_control

关于ajax - chrome中跨域ajax POST,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5938842/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com