php 杂项(4)tp6 跨域问题
前言
后台代码允许跨域,都是通过为http请求响应增加允许跨域的响应头来实现的.
原生
//使用header助手函数设置响应头
header('Access-Control-Allow-Credentials:true');//响应报头指示的请求的响应是否可以暴露于该页面(前端的请求是否可以携带cookie凭证)。当true值返回时它可以被暴露。 header('Access-Control-Max-Age:1800');//请求缓存的时间,同一时间类发起相同的直接读取缓存 header('Access-Control-Allow-Methods:GET, POST, PATCH, PUT, DELETE, OPTIONS');//允许请求的类型 header('Access-Control-Allow-Headers:Authorization, Content-Type, If-Match');//允许请求头携带的自定义参数,如果你需要在请求头添加参数,那么你需要在这里设置参数字段 header('Access-Control-Allow-Origin:*');//允许所有域名访问
tp6
//在app目录下的middleware.php文件中,添加 \think\middleware\AllowCrossDomain::class 类。它就是tp6对原生方法的封装---其本质也是在通过对响应头的设置来实现跨域。
坑
- 前端如果要在请求头上添加自定义的字段参数,那么就需要在Access-Control-Allow-Headers字段中设置对应的字段
- 前端在发送跨域请求是,如果想携带或者将响应的cookie写入浏览器,必须将请求头字段withCredentials设置为true,否则,将请求无法携带cookie也无法写入响应的cookie。但同源请求不受限制