当前位置: 首页 > 后端技术 > PHP

php后台控制跨域域名,允许跨域上传图片

时间:2023-03-30 00:00:51 PHP

经常需要面对跨域问题。前端需要直接比较或者选择ajax异步提交,XML或者jsonp,或者表单提交。jsonp是通过将参数组合成URL来提交请求的,但是所有的浏览器都有URL长度限制,不同的浏览器有不同的长度限制。当有需要提交大段内容的时候,比如一篇文章,如果长度超过了jsonp的长度,只能分块提交,很麻烦,毕竟对安全和axiox都有一些影响现在不支持jsonp。虽然有办法解决,尤其是图片资源的上传,但是使用jsonp等方式实现图片跨域上传是不行的。当然,场景不能跨域,最好不要跨域,但是目前大部分项目已经实现了前后端分离。静态资源和接口是不同的域名或者二级域名,涉及到跨域。当要求后端Access-Control-Allow-Origin与当前请求的Origin相同时,不能设置为*php解决方法如果是传统数据请求,那么后端直接设置Access-Control-Allow-起源于*。header('Access-Control-Allow-Origin:*');但是在上传图片等资源时,Origin需要和Access-Control-Allow-Origin的值保持一致。如果Access-Control-Allow-Origin设置为和当前Origin一样,那么这个limit就死了。只能上传一个域名。如果有其他域名需要调用该接口,则将被禁止。所以,最好的办法就是限制可以调用这个接口的域名列表,这样也提高了一定的安全性。实现方式是先获取当前请求。Origin,如果允许访问的域名列表中设置了Access-Control-Allow-Origin的值,则Origin$originList=['http://127.0.0.1','http://www.linkvall.cn','http://mobile.linkvall.cn',];if(in_array($_SERVER['HTTP_ORIGIN'],$originList)){header('Access-Control-Allow-Origin:'.$_SERVER['HTTP_ORIGIN']);头呃(“访问控制允许凭证:真”);header('Access-Control-Allow-Headers:x-requested-with,content-type');header("Access-Control-Allow-Methods:POST,GET,OPTIONS");}这样就可以控制域名可以跨域,图片资源可以像在同域一样愉快的上传。post方法同样适用于跨域提交