Better handling for link rel dns-prefetch and add preconnect support (#536)

preconnect is only DNS checked.

This is allowed even in the Resource Hints Editor's Draft
https://w3c.github.io/resource-hints/#preconnect
This commit is contained in:
Koen Van den Wijngaert 2021-12-09 20:38:30 +01:00 committed by GitHub
parent b6d97be46c
commit 900586dc01
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 26 additions and 1 deletions

View file

@ -157,7 +157,8 @@ class LinkFinder:
base = self.base_ref
# note: value can be None
value = attrs.get(attr)
if tag == 'link' and attrs.get('rel') == 'dns-prefetch':
rel = attrs.get('rel', '').lower()
if tag == 'link' and ('dns-prefetch' in rel or 'preconnect' in rel):
if ':' in value:
value = value.split(':', 1)[1]
value = 'dns:' + value.rstrip('/')

View file

@ -60,6 +60,30 @@ class TestLinkparser(unittest.TestCase):
url = " alink "
self._test_one_link(content % url, url)
def test_rel_parsing(self):
# Test <link rel> parsing.
content = '<link rel="%s" href="%s">'
rel = "dns-prefetch"
url = "https://alink"
expected = "dns://alink"
self._test_one_link(content % (rel, url), expected)
url = "//alink/"
self._test_one_link(content % (rel, url), expected)
rel = "preconnect"
url = "https://alink"
self._test_one_link(content % (rel, url), expected)
rel = "dns-prefetch preconnect"
url = "https://alink"
self._test_one_link(content % (rel, url), expected)
def test_link_without_rel_parsing(self):
# <link> tags without rel attr should not raise TypeError.
content = '<link href="%s">'
url = "https://alink"
expected = "https://alink"
# Dummy test, we just have to make sure no error was raised.
self._test_one_link(content % url, expected)
def test_img_srcset_parsing(self):
content = '<img srcset="%s 1x">'
url = "imagesmall.jpg"