点击链接加载网页与地址栏输入网址加载网页是我们打开一个网页的两种方式,我们平时很可能遇到一些看似诡异的情况,比如这两种方式一个好用一个不好用。这提醒我们,这看似一样的打开方式其实还是有诸多的不同。
它们的调用路径肯定是不同的,点击链接加载网页是通过WebCore中的相关节点相应事件,地址栏输入网址加载网页是通过浏览器直接调用loadurl的接口,它们最终在WebCore::FrameLoader::loadWithDocumentLoader这个函数这里汇合。在调用到loadWithDocumentLoader函数时,实际上它们的参数已经有一些区别,目前发现了3处,有更多的还欢迎大家补充。
1. FrameLoadType不同
点击链接加载网页时值为FrameLoadTypeStandard,输入网址加载网页时值为FrameLoadTypeRedirectWithLockedBackForwardList。
这个值是在WebCore中用到,具体会造成什么影响还没深入研究
2. http请求的cachePolicy不同
顾名思义,它们有不同的缓存策略。点击链接加载网页时值为UseProtocolCachePolicy,即正常使用高速缓存,也就是没过期的资源或者服务器获取不到的可以使用缓存。
地址栏输入网址加载网页时值为ReloadIgnoringCacheData,即无论有没有缓存,都从网上重新加载。
具体例子就是,有的网页已经缓存好,此时网络中断。那么点击链接还可以打开,但输入网址则无法打开。
3. http请求的Referer字段不同
Referer字段的含义是:用户从该URL代表的页面出发访问当前请求页面
当点击链接时,Referer字段为链接所在页面;当从地址栏加载时,Referer字段为空。
这个字段可以影响服务器的一些行为,比如有的服务器不接受从其他页面发出的请求。
这是目前发现的一些,关于这两种打开方式的不同,在日后的工作学习中还会继续补充。