header函数设置响应头解决php跨域问题实例详解

【PHP跨域解决方案】

在前后端分离的场景下,前后端数据交互时会经常发生跨域问题。因为现在的前端通常是在运行在浏览器中的JavaScript脚本,而JavaScript有一个安全机制,只允许在同源环境下跨域数据交互。所谓同源就是指协议、域名、端口号相同。

### 1. 什么是跨域问题

* 当Ajax或JavaScript调用服务端(接口服务)的时候,如果在端口、协议、主机名有一个不同,那么就是跨域问题了。

* 跨域(Cross-Origin),在大多数情况下指的是跨域HTTP请求。

* 跨域请求在请求头中会带上一个Origin字段,但如果目标服务器允许当前请求的域名和客户端请求的域名进行跨域请求,则会在HTTP响应头中添加一个Access-Control-Allow-Origin的字段。

### 2. 解决方案

有以下几种解决方案:

#### 2.1 服务器端设置HTTP头

通过在服务器端设置HTTP响应头,来告诉浏览器当前请求是允许跨域的,只允许来自指定域名的JavaScript可以访问,其他的JavaScript都不允许跨域访问。使用PHP可以使用header函数来设置响应头。

// 定义允许跨域的域名

$allow = "http://www.example.com";

// 设置允许跨域

header('Access-Control-Allow-Origin:' . $allow);

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

header('Access-Control-Allow-Credentials:true');

header('Access-Control-Allow-Headers:x-requested-with,content-type');

#### 2.2 使用JSONP

JSONP(JSON with Padding)是一种跨域请求的解决方案。JSONP是通过在页面上动态创建