当前位置: 首页 > news >正文

ThinkPHP中跨域请求设置的几种方式

在 ThinkPHP 中支持跨域请求,通常有以下几种方式:

通过设置 HTTP 头信息

  • 在控制器方法中设置在需要支持跨域的控制器方法中,设置允许跨域的 HTTP 头信息。可以使用header()函数来设置,例如:

1

2

3

4

5

6

7

8

9

10

11

12

publicfunctionyourMethod()

{

// 设置允许所有来源的请求

header('Access-Control-Allow-Origin: *');

// 设置允许的请求方法

header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS');

// 设置允许的请求头

header('Access-Control-Allow-Headers: Content-Type, Authorization');

// 其他业务逻辑代码

returnjson(['message'=>'跨域请求成功']);

}

  • 使用中间件设置创建一个中间件来统一设置跨域头信息。例如,使用 ThinkPHP 的命令行工具生成中间件:

收起

bash

1

php thinkmake:middleware CorsMiddleware

然后在生成的CorsMiddleware类中,在handle方法中设置跨域头:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

<?php

namespaceapp\middleware;

classCorsMiddleware

{

publicfunctionhandle($request, \Closure$next)

{

// 设置允许所有来源的请求

header('Access-Control-Allow-Origin: *');

// 设置允许的请求方法

header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS');

// 设置允许的请求头

header('Access-Control-Allow-Headers: Content-Type, Authorization');

if($request->method() ==='OPTIONS') {

// 对于预检请求,直接返回200状态码

returnresponse('', 200);

}

return$next($request);

}

}

最后,在app/middleware.php文件中注册中间件:

1

2

3

4

return[

// 其他中间件...

app\middleware\CorsMiddleware::class,

];

使用跨域资源共享(CORS)扩展

  • 可以使用一些第三方的 CORS 扩展来简化跨域设置。例如,fruitcake/laravel-cors扩展,虽然它是为 Laravel 设计的,但也可以在 ThinkPHP 项目中使用。

  • 首先,通过 Composer 安装扩展:

1

composer require fruitcake/laravel-cors

  • 然后,在项目中进行配置。在config目录下创建一个cors.php配置文件,内容如下:

1

2

3

4

5

6

7

8

9

10

11

12

<?php

return[

'paths'=> ['api/*'],

'allowed_methods'=> ['*'],

'allowed_origins'=> ['*'],

'allowed_origins_patterns'=> [],

'allowed_headers'=> ['*'],

'exposed_headers'=> [],

'max_age'=> 0,

'supports_credentials'=> false,

];

  • 最后,创建一个中间件来应用 CORS 配置。例如:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

<?php

namespaceapp\middleware;

useFruitcake\Cors\HandleCors;

classCorsMiddleware

{

protected$cors;

publicfunction__construct(HandleCors$cors)

{

$this->cors =$cors;

}

publicfunctionhandle($request, \Closure$next)

{

return$this->cors->handle($request,$next);

}

}

同样,需要在app/middleware.php文件中注册这个中间件。

使用代理服务器

  • Nginx 代理可以在 Nginx 服务器上设置代理来解决跨域问题。假设你的 ThinkPHP 应用运行在http://backend.example.com,而前端应用在http://frontend.example.com。在 Nginx 配置文件中添加如下配置:

1

2

3

4

5

6

7

8

9

10

11

server {

listen 80;

server_name frontend.example.com;

location / {

proxy_pass http://backend.example.com;

proxy_set_header Host $host;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

}

}

这样,前端应用访问http://frontend.example.com时,Nginx 会将请求代理到http://backend.example.com,从而避免了跨域问题。

  • Apache 代理如果使用 Apache 作为服务器,可以通过mod_proxy模块来设置代理。在 Apache 配置文件中添加以下内容:

1

2

ProxyPass / http://backend.example.com/

ProxyPassReverse / http://backend.example.com/

这将把所有请求代理到后端的 ThinkPHP 应用,实现跨域访问。

http://www.jsqmd.com/news/590937/

相关文章:

  • openEuler 行:oecustom工具集实战指南
  • OpenClaw跨平台同步:Qwen3-14b_int4_awq配置在Mac与Windows间的迁移
  • 搬运机械手设计【三自由度圆柱坐标型】【论文说明书+二维图CAD+三维图Creo+PPT】三轴机械手 三自由度机械手
  • 4步打造暗黑3智能按键系统:解放双手的终极效率方案
  • LVGL v8.2配置文件(lv_conf.h)保姆级调优指南:从内存优化到UI性能提升
  • OneNote到Markdown迁移完整指南:高效转换笔记的终极工具
  • 3个步骤轻松找回加密压缩包密码:ArchivePasswordTestTool新手教程
  • OpenClaw自动化写作:Qwen3-14b_int4_awq生成技术文章实践
  • 告别杂乱:用Ice打造高效整洁的macOS菜单栏
  • 魔兽争霸3游戏优化与性能提升完全指南
  • 书匠策AI:解锁毕业论文写作新姿势的“智慧钥匙”
  • PHP实现用户认证与权限管理的实现
  • OpenClaw任务监控方案:百川2-13B-4bits模型执行过程可视化
  • 5个技巧让AltDrag彻底重塑Windows窗口管理:开源工具提升效率指南
  • N_m3u8DL-RE 2024流媒体下载技术指南:从协议解析到自动化管理
  • 5个技巧让普通鼠标在Mac上实现效率革命:Mac Mouse Fix颠覆体验指南
  • 城通网盘终极解析指南:3分钟解锁高速下载的秘密武器
  • 鸣潮自动化助手ok-ww:5分钟解放双手的智能游戏伴侣
  • 抖音视频高效下载工具:从痛点解决到价值实现的完整指南
  • 应用安全 --- 逆向技巧 之 IDA反编译缺陷清单
  • 当数学建模遇上AI:用ChatGPT+Python快速搞定交通流量预测(附完整代码)
  • Onekey Steam Depot清单下载器:3分钟轻松获取游戏配置文件
  • Modelica建模避坑指南:Sysplorer仿真中容易忽略的3个参数设置陷阱
  • 美胸-年美-造相Z-Turbo创意海报设计:20个商业应用案例展示
  • 如何判断重庆SEO优化公司的实力_重庆SEO优化服务有哪些特点
  • 数据主权时代:用WeChatMsg自由掌控你的微信聊天记录
  • 抢票总失败?智能自动化工具让你告别一票难求
  • 技术民主化:AssetStudio赋能创意工作者的资源提取与转化指南
  • Fish Speech 1.5部署全记录:WebUI+API双模式,开箱即用体验
  • 3大突破:MTKClient如何重塑联发科设备调试流程