Skip to content

Handling missing mime types gracefully #534

Closed

Description

@jake-arkinstall

If a key isn't present in the mime_types map, an exception is thrown. This is because mime_types.at() is used at, e.g.,

set_header("Content-Type", mime_types.at(contentType));
.

I propose that the resolution is to search for the provided mime_type within the map using mime_types.find. If it is not found, a warning should be logged, but the content should still be delivered using the following logic:

  • Does the provided type look like a MIME type already? I.e. is it one of the IANA-registered types (application, audio, example, font, image, model, text, video), followed by a slash, followed by text? If so, send that verbatim.

  • Otherwise send text/plain.

Although this approach isn't quite as lightweight as simply sending text/plain, there are some benefits:

  • I'd be able, for example, to send content as text/csv without modifying the mime types map.
  • It would also allow people to use the full mime-type format, including parameters (e.g. text/plain;charset=UTF-8)
  • Developers coming from other technologies that use full mime types won't be faced with an internal server error for following an old habit.

Activity

  1. dranikpg commented on Sep 10, 2022

    @dranikpg
    Member

    I fully agree, the current solution is way to limited. If you need to construct custom mime-types now, you can always set the Content-Type header yourself. But this feels like a workaround.

    Jake, if you want, you can implement the fix youself and make your first contribution to Crow! 🔥

    Else, I'll handle this in the following week.

  2. added
    featureCode based project improvement
    good first issuean issue suitable to start contributing to the project
    on Sep 10, 2022
  3. added a commit that references this issue on Sep 12, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

featureCode based project improvementgood first issuean issue suitable to start contributing to the project

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions