由于業(yè)務(wù)需要,要在headers中添加aesKey字段,結(jié)果出現(xiàn)了跨域錯(cuò)誤:
Request header field aeskey is not allowed by Access-Control-Allow-Headers in preflight response.
但我的跨域中間件也都是正常的,于是嘗試把*改成具體的字段就正常了。
'Access-Control-Allow-Headers' => '*', // 報(bào)跨域錯(cuò)誤!
'Access-Control-Allow-Headers' => 'Content-Type,aesKey', // 正常
難道Access-Control-Allow-Headers 不支持*號(hào)嗎?
請(qǐng)大佬指點(diǎn)迷津。
網(wǎng)上搜下 “Access-Control-Allow-Headers: *
跨域不生效”就知道了,并不是所有瀏覽器都支持Access-Control-Allow-Headers: *
,需要將 Access-Control-Allow-Headers
設(shè)置為具體值。這個(gè)屬于瀏覽器兼容問題。
可以從請(qǐng)求頭里面拿到,原樣返回就行。
以下是tp5的寫法,僅供參考,不要直接復(fù)制粘貼,要改成webman寫法。
關(guān)鍵點(diǎn):
header("Access-Control-Allow-Headers: {$_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']}");
public function run()
{
$moduleList = ['api', 'order'];
$module = request()->module();
if ( in_array($module,$moduleList)) {
header("Access-Control-Allow-Origin: *");
header('Access-Control-Allow-Credentials: true');
header('Access-Control-Max-Age: 86400');
request()->filter('trim,strip_tags,htmlspecialchars');
if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS'])) {
header("Access-Control-Allow-Headers: {$_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']}");
}
if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD'])) {
header("Access-Control-Allow-Methods: GET, POST, OPTIONS");
}
exit('ok');
}
}
}