最近遇到这样一个问题, 用php吐出html, 在html中, 用<a>指向了一个视频资源的url, 但是, 当去点击这个链接的时候, 视频的url地址出现在浏览器新窗口的地址栏中, 只是没有播放, 抓包看了一下, 原来, 在访问url时, 对端返回403错误码。 然后我在浏览器地址栏中按一下enter, 就可以播放了。
奇怪了, 为什么从anchor进去的url无法直接播放呢? 于是, 我把页面对应的html代码复制, 保存在PC桌面上的test.html中并在浏览器中打开, 然后再去点击anchor中的url, 居然能打开, 抓包看, 对端返回的是http 200
这就好了, 将两个包进行对比, 发现请求的url都一样, 但是http头不一样。 在有问题的http包中携带了refer字段, 而正常的http中没有refer字段。 原来, 是视频资源端拒绝了该refer的访问 (403错误码的启示)。
找到了问题根源, 解决办法就很简单了: 将<a>的rel属性赋值为noreferrer(不要漏了r字母哈, 否则呵呵哒)即可, 这样那个就不会携带refer字段了, 也就不会被拒绝了, 点击anchor对应的url, 就可以直接播放视频了。
以前总是看书上的http, 不深刻, 没啥感知。 还是应该在实战中提高啊