AJAX 与 CURL

Posted

技术标签:

【中文标题】AJAX 与 CURL【英文标题】:AJAX versus CURL 【发布时间】:2011-06-14 02:52:07 【问题描述】:

在了解请求的来源时,我需要知道 CURL(在 php 中)和 AJAX(在 javascript 中)之间的区别。

更新: 我想知道的是,如果我使用 AJAX 生成请求,服务器端会收到哪个发件人 IP 地址,并将数据包作为源? CURL 也是如此,对于所有用户,它将发送单个 IP 地址。但是 JS 也是这样吗? JS在客户端执行所以它会是客户端IP地址吗?

【问题讨论】:

可能与***.com/questions/4738380/…重复 不,不是。当它是 CURL 或 AJAX 时我需要知道请求源 【参考方案1】:

cURL 是一个服务器端进程。这意味着它会在页面渲染之前被调用,与客户端的能力无关。

然而,AJAX 是一个客户端调用。这意味着它不会被执行直到客户端加载页面(或至少看到并执行那段代码,但这通常适用于 document.ready)。

如果您希望检索信息并立即将其转储给用户,那么 cURL 是您的最佳选择。如果您想进行渐进式加载(转储页面,然后检索内容以“无缝”加载给用户),那么 AJAX 是最好的选择。请记住,尽管在当今时代它是微不足道的,但在 FireFox 的 NoScript 扩展的情况下,AJAX 可能会被禁用。

话虽如此,cURL 的执行源将在服务器上。 AJAX 请求的来源将基于每个客户端。两者都没有提供安全的检测方法(服务器端)来了解谁发送了什么(因为可以更改标头)。

【讨论】:

【参考方案2】:

如果您尝试检测哪个方法被用作请求的来源,则无法确定。大多数浏览器在通过 AJAX 发送请求时使用 HTTP 标头 X-Requested-With。默认情况下,cURL 库确实发送了一个用户代理,但这显然可以由库更改。这两种方法都容易伪造,不宜用于严格验证。

编辑:

AJAX 请求将来自发出 AJAX 请求的客户端。 cURL 请求将来自使用库的位置。 (例如,如果您使用 PHP,它将来自 PHP 服务器。如果您通过 CLI 使用它,那么它将来自您执行命令的服务器)

显然请求可能在代理等之后。

【讨论】:

【参考方案3】:

从服务器请求 javascript 文件的 IP 地址将与从该文件向服务器发送 ajax 请求的 IP 地址相同。请参阅same origin policy。

【讨论】:

据此,如果我创建一个网页,该网页将触发 AJAX 请求以说出一些 www.nnn.com,那么任何使用我的网页的用户都会从他/她的 IP 触发此请求。对吗? 是的,这就是我和布拉德所说的。注意:AJAX 受到同源策略的限制:您不能向与请求来源不同的域发出 AJAX 请求。

以上是关于AJAX 与 CURL的主要内容,如果未能解决你的问题,请参考以下文章

AJAX 和 jQuery 与 MVC

Ajax-原生Ajax详解-同步与异步底层

AJAX 状态值与状态码详解

AJAX与PHP

AJAX 状态值(readyState)与状态码(status)详解

json 与 ajax