php - 访问控制允许源服务器端由 php

标签 php javascript tomcat cross-domain

我对这个主题有疑问:Access-Control-Allow-Origin。

我读到了它,我发现可以使用 php 获得响应,here

但我不知道如何使该代码适应 javascript,我仍然遇到同样的问题。

我在 javascript 中试过这个:

var url ='http://localhost:8080/com.webserver/rest/manage/order?parameter=parameter';
req=Ajax("getResponse.php/?" + url)
  if (req.status=200)
alert("hi");

在 php 文件上:

<?php
echo file_get_contents($_GET['url']); 
?>

然后什么也没发生。我尝试使用 ajax,例如:

$.ajax({
          url: "http://localhost:8080/com.webserver/rest/manage/order?parameter=parameter",
          async: false,
          dataType: 'html',
          success: function (text) {
            alert(text);
          }
        });

但总是同样的问题....

我在网上看到很多人有同样的问题,但没有人得到回应。我刚刚找到了 2 种方法,使用 chrome 和一个选项,但只是推荐给开发人员并在服务器上添加 header ,但我不知道在哪里添加它们。我正在为该本地主机使用 apache tomcat catalina。我有 2 个服务器,网页(在 xampp 中)和休息(在 tomcat 中)

最佳答案

改变

req=Ajax("getResponse.php/?"+ url)

req=Ajax("getResponse.php/?url="+ url)

切记这是不安全的,我可以将任何内容传递到 url 参数中,您的 php 脚本将使用它。允许人们从您的本地系统读取文件以及让您的 php 脚本从其他地方下载恶意文件

编辑:

保护它的最佳方法是使用操作列表,这意味着用户永远看不到 url,只能修改操作词。例如

req=Ajax("getResponse.php/?do=getOrders")

然后在 php 中

$actions = array();
$actions['getOrders'] = "http://localhost:8080/com.webserver/rest/manage/order?parameter=parameter";

if(array_key_exists($_GET['do'], $actions))
 echo file_get_contents($actions[$_GET['do']]);

通常您想要做的不仅仅是将操作转换为 url,您可能还想传递额外的参数。在这种情况下,您可以使用一个开关或一组 IF 来检查 $_GET['do'] 是否等于某个值,然后对其进行处理。但是给出每个可能的实现方法的示例需要几个小时,因此您可能需要使用 google。

请注意:虽然建议使用此方法为您的脚本增加 100 倍的安全性,但它并非万无一失,尤其是当您也开始传递来自用户的参数时。再次使用谷歌。

关于php - 访问控制允许源服务器端由 php,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11757001/

相关文章:

php - 将两个数组合并或组合成单个数组

java - Tomcat 性能问题

javascript - 在不使用 Ajax 调用服务器等的情况下实现 Web 应用程序的通知

php - Zend 框架 : How can I add JavaScript element after the scripts in head?

带有空格和土耳其字符的 PHP preg_split 字符串

java - 如何避免 "Root WebApplicationContext: initialization started"加载两次?

java - 如何列出不同 Java Web 应用程序的 Web 文件夹中的文件

javascript - 我如何自动定期从 Signalr 接收消息到所有客户端,而无需客户端输入?

javascript - 动态组合数组和对象

javascript - 将全局样式表移动到 <head> 中的样式组件之上