我正在构建一个文件上传器, 在前端使用Vue Dropzone, 和后端的自定义PHP。
我的前端脚本正在发送包含以下标题的请求:
请求标题
POST / jobimport HTTP / 1.1
主持人:myurl
连接:保持活力
内容长度:765309
来源:http://localhost:8080
用户代理:Mozilla / 5.0(Macintosh; Intel Mac OS X 10_13_3)AppleWebKit / 537.36(KHTML,与Gecko一样)Chrome / 65.0.3325.162 Safari / 537.36
内容类型:multipart / form-data;边界= ----
WebKitFormBoundaryhaaAoTz2J5iipi3M
接受:application / json
缓存控制:无缓存
X-Requested-With:XMLHttpRequest
推荐人:http://localhost:8080/import
Accept-Encoding:gzip,deflate,br
Accept-Language:en-US,en; q = 0.9,nl; q = 0.8,de; q = 0.7,fr; q = 0.6
在我后端的.htaccess文件中,我添加了以下行:
Header set Access-Control-Allow-Origin "*"
Header set Access-Control-Allow-Headers "*"
使用Chrome时,文件上传没有问题 查看请求标头时,我甚至会看到以下内容:
回复标题
(...)
Access-Control-Allow-Headers:*
Access-Control-Allow-Origin:*
(...)
但是,使用Safari时,上传失败,我收到以下错误:
无法加载资源:请求标头字段Access-Control-Allow-Headers不允许使用Cache-Control XMLHttpRequest无法加载https://myurl。请求标头字段Access-Control-Allow-Headers不允许使用Cache-Control。
我不明白这在Chrome中是如何运作的,但在Safari中却不行。
答案 0 :(得分:5)
@sideshowbarker和@roryhewitt的评论是正确的,
Safari确实不支持*
的通配符Access-Control-Allow-Headers
我明确列出了所有标题,而不是使用通配符,现在它完美无缺。
答案 1 :(得分:1)
如果父域URL在https中,则必须也在https中调用ajax URL。如果不是,则不使用https。希望这会有所帮助