nginx php 允许跨域请求
微wx笑 2022-06-18【运维日志】 2 0关键字: nginx php 跨域
最近有个需求,一个站点的特定URL需要允许跨域请求,服务器环境是:Centos6+Nginx+php,开始找到的方案是在Nginx的配置文件中添加允许跨域的http请求响应头信息,发现不生效,因为php的页面是转交给FPM/FastCGI请求的,所以实际的解决方法是直接在php文件中添加。
需求
一个站点的特定URL需要允许跨域请求
服务器环境是:
Centos6+Nginx+php
Nginx方案
配置文件中添加允许跨域的http请求响应头信息,后面的值不知道怎么填写可以直接用星号*代替通配符
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请求的
实际的解决方法
直接在php文件中添加
<? header("Access-Control-Allow-Origin: https://weibo.com"); header('Access-Control-Allow-Methods:*'); header('Access-Control-Allow-Headers:*'); echo time(); ?>
示例2
<? // 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']; } ?>
开发者工具中测试代码
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);
执行后返回
1658901994 person
说明已经成功了。
本文由 微wx笑 创作,采用 署名-非商业性使用-相同方式共享 4.0 许可协议,转载请附上原文出处链接及本声明。
原文链接:https://www.ivu4e.cn/blog/service/2022-06-18/1250.html