thinkphp5 处理跨越
时间: 2024-04-19 19:04:21 浏览: 6
ThinkPHP5默认支持跨域请求,但是在一些特殊情况下(比如前端请求带上了自定义的header头),需要手动设置跨域请求。
可以在控制器中使用以下代码来解决跨域问题:
```php
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Headers: X-Requested-With, Content-Type, Accept, Origin, Authorization');
header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE, PATCH, OPTIONS');
```
其中,Access-Control-Allow-Origin表示允许跨域的域名,*表示允许所有域名;Access-Control-Allow-Headers表示允许带上的header头;Access-Control-Allow-Methods表示允许的请求方式。
如果需要在全局统一处理跨域请求,可以在框架的公共文件中(如public/index.php)添加以下代码:
```php
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Headers: X-Requested-With, Content-Type, Accept, Origin, Authorization');
header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE, PATCH, OPTIONS');
// 加入以下代码
if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
header('HTTP/1.1 200 OK');
exit();
}
```
其中,判断请求方式为OPTIONS的代码是为了处理预检请求(Preflight)的问题。预检请求是指浏览器在发出跨域请求之前,先向服务器发送一个OPTIONS请求,以获知服务器是否允许该跨域请求。如果服务器允许该跨域请求,则浏览器才会发出真正的跨域请求。