在了解请求来源时,我需要知道CURL(在PHP中)和AJAX(在Javascript中)之间的区别。
更新: 我想知道的是,如果我使用AJAX生成请求,那么在服务器端接收哪个发送方IP地址并将数据包作为源?与CURL相同,对于所有用户,它将发送单个IP地址。但JS的情况是一样的吗? JS在客户端执行,那么它是客户端IP地址吗?
答案 0 :(得分:21)
cURL是服务器端进程。这意味着它将在呈现页面之前被调用,并且与客户端的功能无关。
然而,AJAX是一个客户端调用。这意味着在客户端加载页面之前不会执行(或者至少看到并执行了那段代码,但这通常是在document.ready上)。如果您想要检索信息并立即将其转发给用户,那么cURL是您最好的选择。如果您想进行渐进式加载(转储页面,然后检索内容以向用户“无缝”加载),那么AJAX是最好的选择。一直记住,虽然在今天这个时代它是半微不足道的,但是在FireFox的NoScript扩展的情况下可能会禁用AJAX。
话虽如此,cURL执行的来源将在服务器上。 AJAX请求的来源将基于每个客户端。它们都没有提供安全的检测手段(服务器端)来知道谁发送了什么(可以改变标题)。
答案 1 :(得分:0)
如果您正在尝试检测哪个方法被用作请求的来源,则无法确切知道。大多数浏览器在通过AJAX发送请求时使用HTTP标头X-Requested-With。 cURL库默认发送用户代理,但显然可以由库更改。这两种方法都可以很容易地伪造,不应该用于严格的验证。
编辑:
AJAX请求将来自发出AJAX请求的客户端。 cURL请求将来自库的使用位置。 (例如,如果您使用的是PHP,它将来自PHP服务器。如果您通过CLI使用它,那么它将来自您执行命令的服务器)
显然,这些请求可能会落后于代理等。
答案 2 :(得分:0)
从服务器请求javascript文件的IP地址将与从该文件将ajax请求发送回服务器的IP地址相同。请参阅same origin policy。