Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript HTTP到HTTPS(样式表、js、css精灵等)重新加载_Javascript_Css_Ssl_Http Headers - Fatal编程技术网

Javascript HTTP到HTTPS(样式表、js、css精灵等)重新加载

Javascript HTTP到HTTPS(样式表、js、css精灵等)重新加载,javascript,css,ssl,http-headers,Javascript,Css,Ssl,Http Headers,这个问题与混合内容错误无关。即将启动一个站点。当我从导航到时,我注意到css/js/etc被重新下载,因为我使用的是根相对路径: 使用http嗅探器,我看到浏览器认为与(它不是)不同。因此,相同的内容被下载两次,导致站点从http导航到https时看起来很慢(如果用户没有缓存这两个版本) 有没有办法阻止这一切?用户几乎总是首先访问站点的非ssl版本,因此是否有脚本会等到加载http内容后再强制将https版本加载到用户缓存中?还是应该使用绝对路径(https://www.example.com/

这个问题与混合内容错误无关。即将启动一个站点。当我从导航到时,我注意到css/js/etc被重新下载,因为我使用的是根相对路径:

使用http嗅探器,我看到浏览器认为与(它不是)不同。因此,相同的内容被下载两次,导致站点从http导航到https时看起来很慢(如果用户没有缓存这两个版本)


有没有办法阻止这一切?用户几乎总是首先访问站点的非ssl版本,因此是否有脚本会等到加载http内容后再强制将https版本加载到用户缓存中?还是应该使用绝对路径(https://www.example.com/_css/main.css)在任何页面和每个css背景图像上(我只使用2个精灵)。还是我们就这样生活?谢谢。

您可以在不使用协议说明符的情况下引用文件,例如:

<link rel="stylesheet" type="text/css" href="//mysite.com/_css/main.css" />

有关更多详细信息,请参阅本文:

使用http嗅探器,我看到浏览器认为与(它不是)不同

它是具有相同内容的不同资源。浏览器无法知道它们将拥有相同的内容

您可以(使用301)从一个重定向到另一个,这样您就没有非SSL版本

有没有办法阻止这一切

不是真的

用户几乎总是首先访问站点的非ssl版本,因此是否有脚本会等到加载http内容后再强制将https版本加载到用户缓存中

不。如果一个URL可以为任意其他URL预先设置内容,这将是一个可怕的安全问题

还是应该使用绝对路径(https://www.mysite.com/_css/main.css)在任何页面和每个css背景图像上(我只使用2个精灵)

这会起作用,但会导致内容复杂的问题

还是我们就这样生活


是。

您可以使用.htaccess重写规则每次加载https内容;或者,在html的http版本中指定的重定向头将工作得更慢(额外的往返),但我相信,在其他方面也一样

  • 使用一个。然后为您的资源使用相对路径,缓存将被认为适用于http和https,尽管它实际上已经加载到https上了

  • 当用户以Apache方式访问站点时,将所有内容重定向到SSL()

    重定向永久/https://example.com/login


  • 使用协议相对路径

    而不是这个

    <link rel="stylesheet" href="http://domain.com/style.css">
    <link rel="stylesheet" href="https://domain.com/style.css"> 
    
    
    
    用这个

    <link rel="stylesheet" href="//domain.com/style.css">
    
    
    

    然后它将使用父页面的协议。

    这些协议将解析为已使用的相同URI,因此不会改变任何内容。基本上,这已经发生了。浏览器只是认为https main.css不同于http main.css,所以从技术上讲,它是一个不同的资源,但内容是相同的…有点像sux。请使用和朋友作为例子。mysite.com是一家真正的托管公司,不需要指向它们的虚假链接,因为它们会出现404个错误。修复了…很抱歉,关于安全问题,我没有想到这一点。嗯,我想我会接受它,直到互联网之神想出一个替代方案。至于javascript解决方案,我认为大致如下:。在加载样式之前,javascript会覆盖默认功能……类似于这些内容。就像加载http main.css和页面的其余部分一样,然后触发加载https版本的js代码。强制ssl并不能解决此问题,它仍然会从非ssl版本重定向到ssl版本,给用户一个警告!实际上,强制SSL确实解决了这个问题。但真正的标签是他们正在寻找的。这将导致页面每次都从https://版本加载内容,无论其他内容是否安全。不知道您正在使用的浏览器,但您的警告是孤立的。