ajax跨域实现api 接口调用
背景: 想实现跨域去调用接口, 然后同时支持下次调用,能够带cookie信息过来,同时支持来自多个源头的域名的跨域调用。
1.这样支持来自所有域名的跨域调用:
不支持跨域是,浏览器报错:
在api接口服务端加上相应的协议头:
1 2 | header("Access-Control-Allow-Origin: *',); header( 'Access-Control-Allow-Headers: X-Requested-With, Content-Type' ); |
但是,这样的api接口,不支持cookie.
2.如果想支持cookie, 需要加上
1 | header( 'Access-Control-Allow-Credentials: true' ); |
但是这样的话,前面服务端设置的这个头,浏览器就会报错。说是access-control-allow-origin头不能 用 * 这个通配符。
1 | header("Access-Control-Allow-Origin: *',); |
浏览器报错如下图:
必须改成具体的某个域名。 但是,我们的api又希望支持来自许多不同域名的跨域访问,怎么办呢,这时候,在服务端做个动态的判断处理就ok了。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | <?php $ret = array ( 'name' => isset( $_POST [ 'name' ])? $_POST [ 'name' ] : '' , 'gender' => isset( $_POST [ 'gender' ])? $_POST [ 'gender' ] : '' ); header( 'content-type:application:json;charset=utf8' ); $origin = isset( $_SERVER [ 'HTTP_ORIGIN' ])? $_SERVER [ 'HTTP_ORIGIN' ] : '' ; $allow_origin = array ( 'http://www.client.com' , 'http://www.client2.com' ); if (in_array( $origin , $allow_origin )){ header( 'Access-Control-Allow-Origin:' . $origin ); header( 'Access-Control-Allow-Methods:POST' ); header( 'Access-Control-Allow-Headers:x-requested-with,content-type' ); } echo json_encode( $ret ); ?> |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现