我使用搜索工具管理一个静态网站,该工具使用“分类法术语”结构作为数据源,以查找与某些条件匹配的链接,然后将这些链接异步加载并解析以构建UI。
分类术语的结构是这样的:
<ul>
<li data-term="TaxonomyTermOfFirstLevel">TaxonomyTermOfFirstLevel
<ul>
<li data-term="TaxonomyTermOfSecondLevel">TaxonomyTermOfSecondLevel
<ul>
<li data-term="TaxonomyTerm">
<a href="https://www.example.com/some-page/">Some Page</a>
</li>
</ul>
</li>
</ul>
</li>
</ul>
以及(部分)加载例程:
var cache = {};
function load( url ) {
if( ! cache[ url ] ) {
cache[ url ] = $.ajax( url );
}
return cache[ url ];
}
使用未缩小的HTML输出,一切正常。但是,当使用也删除属性周围引号的极端工具将其最小化时,对上述结构中发现的所有URL的所有请求都将失败,并显示以下错误:
混合内容:“ https://www.example.com/search/”上的页面已通过HTTPS加载,但请求了不安全的XMLHttpRequest端点“ http://www.example.com/some-page/”。该请求已被阻止;内容必须通过HTTPS提供。
如您所见,请求者(/search
)和被请求者(/some-page
)位于同一域中,但浏览器表示所请求的URL不安全,因为它不在SSL之下。但是,如果您查看我提供的片段,则请求的URL 确实具有 https
模式前缀。
仅当我停用输出以使所有返回到工作状态的输出最小化时,我才进行了详尽的搜索,没有成功。然后,我分析了涉及搜索过程的所有内容,从HTML到负责搜索的每个JS文件(毕竟这是一个静态网站),我只注意到两个区别:
href
属性周围没有引号。index.html
文件(即/same-page/index.html
),从而导致伪友好URL的重定向。但是据我了解,这不是问题,因为jQuery会透明地遵循重定向,对吗?在这种情况下,我可以选择使用另一个不会删除引号的缩小器代替tdewolff's minifier(用于创建所有HTML文件的Hugo Static Site Generator的内置选择)。
还有其他我想念的东西吗?
答案 0 :(得分:0)
由于静态网站中的“友好网址”只是嵌套目录,其中包含index.html
文件,因此所有要求必须结尾的URL都必须在末尾加斜杠-OR-并附加上述文件在向AJAX提出请求之前。
但是,如本主题所述(在this testing repository中有深入介绍),无论所有URL 都在背景中的某个点后有 都是斜杠,在异步请求过程中,这些尾部斜杠将被删除,忽略,或者考虑到涉及到HTML压缩程序的事实,被浏览器误解。
为了解决此问题,我只在要请求的URL后面加了一个斜杠。由于上面显示的包装函数load
非常通用,因此我无法解决这种情况,因为并非所有的URL都会产生301重定向,所以,我只在检索到之后才应用此修复程序href
属性:
var url = $( 'some selector' ).find( 'a' ).attr( 'href' ).replace( /\/?$/, '/' );
“孔中的王牌”是replace
函数,它将使现有的尾部斜杠保持不变,但会在缺失的地方添加一个斜杠,无论是错误构建的<a>
标签还是错误删除-似乎正在发生什么。
注意:要进一步了解上下文和上述修补程序,请检查已链接的存储库,或者至少检查所提及的缩小器在this issue上的扩展讨论。
我希望这对以后的人有所帮助,因为至少可以找到与特定软件无关的内容作为搜索结果。