thinkphp5.1 添加 允许自定义请求标头(Access-Control-Allow-Headers)

Daming 2019-08-16
0条评论 2,655 次浏览
Daming 2019-08-160条评论 2,655 次浏览

Access-Control-Allow-Headers 用于给预检请求(options)列出服务端允许的 自定义标头,如果前端发送的请求 中包含自定义的请求标头,且该标头不包含在Access-Control-Allow-Headers中,该请求无法成功发起.

在thinkphp5.1中浏览框架代码:
(路径:\thinkphp\library\think\route\Rule.php)

 $header = [
                'Access-Control-Allow-Credentials' => 'true',
                'Access-Control-Allow-Methods'     => 'GET, POST, PATCH, PUT, DELETE',
                'Access-Control-Allow-Headers'     => 'Authorization, Content-Type, If-Match, If-Modified-Since, If-None-Match, If-Unmodified-Since, X-Requested-With',
            ];

看到 允许的标头 有 Authorization, Content-Type, If-Match, If-Modified-Since, If-None-Match, If-Unmodified-Since, X-Requested-With

项目中我要自定义一个标头 Operator_id, 根据thinkphp5.1 文档 跨域请求 这一章介绍:https://www.kancloud.cn/manual/thinkphp5_1/489844

在路由配置中这样写 就OK了:

Route::header('Access-Control-Allow-Headers', 'Operator_id,Authorization, Content-Type, If-Match, If-Modified-Since, If-None-Match, If-Unmodified-Since, X-Requested-With')//允许自定义标头 Operator_id
    ->allowCrossDomain();//路由全局允许跨域

遇到个坑:
将项目部署到nginx 上后 获取不到 这个 operator_id ,原因是 nginx 默认忽略 带下划线的 header

具体参考:nginx导致请求头header中的自定义请求标头丢失问题

0

发表评论

电子邮件地址不会被公开。