Recognize media type via Content-Type #2075
Draft
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Description
Fixes #1433
Instead of loading media beforehand to recognize if it's an image or a video, this method fetches Content-Type header to recognize it.
This fixes AVIF images that loads as video by following its MIME type rather than trying to load it as video/image.
Screenshots
This is an AVIF image downloaded from stacker.news after Imgproxy processing, it gets rendered as an image, before it would've rendered as video on browsers like Chrome

Additional Context
Fetching headers should be faster than loading media beforehand as it doesn't fetch the whole file.
Using
video.duration
didn't make the cut because Imgproxy creates AVIFs that haveInfinity
durationChecklist
Are your changes backwards compatible? Please answer below:
Yes, it falls back to the original method if HEAD fetch fails
On a scale of 1-10 how well and how have you QA'd this change and any features it might affect? Please answer below:
7, tested on Chrome (it happens way more here)
For frontend changes: Tested on mobile, light and dark mode? Please answer below:
n/a
Did you introduce any new environment variables? If so, call them out explicitly here:
n/a