运维日志您现在的位置是:首页 > 博客日志 > 运维日志

nginx php 允许跨域请求

<a href='mailto:'>微wx笑</a>的头像微wx笑 2022-06-18运维日志 2 0关键字: nginx  php  跨域  

最近有个需求,一个站点的特定URL需要允许跨域请求,服务器环境是:Centos6+Nginx+php,开始找到的方案是在Nginx的配置文件中添加允许跨域的http请求响应头信息,发现不生效,因为php的页面是转交给FPM/FastCGI请求的,所以实际的解决方法是直接在php文件中添加。

需求yQk无知

一个站点的特定URL需要允许跨域请求yQk无知


yQk无知

服务器环境是:yQk无知

Centos6+Nginx+phpyQk无知


yQk无知

Nginx方案yQk无知

配置文件中添加允许跨域的http请求响应头信息,后面的值不知道怎么填写可以直接用星号*代替通配符yQk无知

    location / {
      add_header Access-Control-Allow-Origin *;
      add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';
      add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';
	}

发现不生效,因为php的页面是转交给FPM/FastCGI请求的yQk无知


yQk无知

实际的解决方法yQk无知

直接在php文件中添加yQk无知

<?
header("Access-Control-Allow-Origin: https://weibo.com");
header('Access-Control-Allow-Methods:*');
header('Access-Control-Allow-Headers:*');

echo time();
?>

示例2yQk无知

<?
// http://www.doc88.com/p-1116070150325.html
header("Access-Control-Allow-Origin: http://www.doc88.com");
header('Access-Control-Allow-Methods:*');
header('Access-Control-Allow-Headers:*');
 
echo time();
echo "\r\n";
if (isset($_POST['user'])){
  echo $_POST['user'];
}
?>

开发者工具中测试代码yQk无知

var data = new FormData();
data.append('user', 'person');
var xhr = new XMLHttpRequest();
xhr.open('POST', 'https://czsc.ivu4e.com/doc88/savebook.php', true);
xhr.responseType = 'text';
xhr.onload = function () {
 if (this.status == 200) {
   console.log(this.response);
 }else{
    console.log(this.status);
 }
};
xhr.send(data);

执行后返回
yQk无知

1658901994
person

说明已经成功了。
yQk无知

本文由 微wx笑 创作,采用 署名-非商业性使用-相同方式共享 4.0 许可协议,转载请附上原文出处链接及本声明。
原文链接:https://www.ivu4e.cn/blog/service/2022-06-18/1250.html

很赞哦! () 有话说 ()