A JPEG with its standard wrapper around it. The JFIF specification (version 1.02, September 1992) describes itself as a minimal format for exchanging JPEG bitstreams. It calls JFIF entirely compatible with the standard JPEG interchange format. The one extra requirement is an APP0 marker right after the start-of-image marker. That marker carries the string JFIF, a version number, the pixel density and an optional thumbnail. The ITU later standardised the same wrapper as T.871 (05/2011). MDN files .jfif under the one media type image/jpeg, beside .jpg and .jpeg. So the bytes are JPEG bytes.
The .jfif name does not promise that marker. Chromium picks a download’s ending from the media type, image/jpeg, and a Windows registry value, not from the markers inside. So a file saved as .jfif can be a JFIF, a camera JPEG that starts with an Exif header instead, or a JPEG with no header at all, the kind our own engine writes by default. All three open as JPEG.
That is why the file opens in any JPEG app that looks past the name. A Microsoft Q&A thread on the extension reports that GIMP, Photos and Photoshop open them unchanged. Browsers display them too: the bytes are the image/jpeg they already render. A Mac is stricter: on macOS 26.5.1 the .jfif ending has no default app. When an app’s Open dialog hides the file, it is filtering on the name, and the rename below fixes that.