问题: Safari正在使用推送路径执行请求,但向站点主机发出请求,从而导致404。
场景:服务器推送的跨源资产。资产的主机和站点的主机是不同的域。
Browser: Safari v12+ (也是v13)在MacOS和iOS中都有。
值得注意的是,服务器推送功能自工作,但是Safari向主机提出了这个额外的请求。而且,在安全的v10或v11上也不会发生这种情况。
发布于 2021-05-06 16:50:35
我也遇到了这种情况,并确认(通过使用Charles重写),如果链接头使用包含域的绝对路径,那么Safari确实会从跨源域加载链接头中的资源。
这种类型的HTTP将在中工作,而不是:
HTTP/2 200
content-type: application/javascript; charset=utf-8
... other headers
link: </script.js>; rel=preload; as=script; crossorigin
相反,您需要包含完整的域和协议,如下所示:
HTTP/2 200
content-type: application/javascript; charset=utf-8
... other headers
link: <https://www.example.com/script.js>; rel=preload; as=script; crossorigin
这与大多数服务器推送教程不同,后者的路径绝对来自域根(例如/script.js),但我已经确认它在Safari中正确工作,即使服务器推送响应是针对与HTML页面所在的域不同的JavaScript资源的。
发布于 2019-10-01 22:48:46
场景:服务器推送的跨源资产。资产的主机和站点的主机是不同的域。
除非在非常有限的情况下,否则不能将资源推送到另一个域。服务器必须是此服务器的授权方。基本上,这意味着它会进入相同的IP地址,并由相同的证书覆盖。因此,如果您在www.example.com上,并且在同一台服务器上的static.example.com上有一个单独的切分域,理论上可以推送。然而,在这方面,浏览器支持真的很差。和我真的不推荐。您可以为此使用预加载资源提示,这是更好的理解和支持。
问题: Safari使用推送路径执行请求,但向站点主机发出请求。
根据上面的链接,Safari不支持跨域推送。其他浏览器也不多见。
导致404秒。
这将是有意义的,因为您请求推送的资源在该域中不存在。
值得注意的是,服务器推送功能自工作,但是Safari向主机提出了这个额外的请求。
那你为什么认为它起作用了?
而且,在安全的v10或v11上也不会发生这种情况。
什么事没发生?推?双重下载?两者都有?
https://stackoverflow.com/questions/58192863
复制相似问题