What is MIME type "application/x-httpd-perl"?

A MIME type is a string that tells browsers and other tools how to handle a particular kind of file.

application/x-httpd-perl is a MIME type used for executing Perl scripts on web servers. Files marked with this type, such as those with the PL extension, are processed by the server rather than shown as plain text.


The server runs the Perl script and returns the output, often in HTML format, to the client. This keeps the code hidden and delivers only the results.



Using this MIME type ensures that the server knows to use a Perl interpreter when the file is called. For more technical details, see the Perl Official Website.

Associated file extensions

Usage Examples

HTTP Header

When serving content with this MIME type, set the Content-Type header:


    Content-Type: application/x-httpd-perl    
  

HTML

In HTML, you can specify the MIME type in various elements:


    <a href="file.dat" type="application/x-httpd-perl">Download file</a>    
  

Server-side (Node.js)

Setting the Content-Type header in Node.js:


    const http = require('http');    
    
    http.createServer((req, res) => {    
      res.setHeader('Content-Type', 'application/x-httpd-perl');    
      res.end('Content here');    
    }).listen(3000);    
  

Associated file extensions

FAQs

Why is my browser downloading the .pl file instead of running it?

This usually happens because the web server is not configured to execute the script and is instead serving it as a static file. To fix this, you must configure your server (such as Apache or Nginx) to treat files with the pl extension as executable CGI scripts or handle them via mod_perl.

How do I configure Apache to handle application/x-httpd-perl?

To execute Perl scripts, you typically add a handler in your httpd.conf or .htaccess file. Use the directive AddHandler cgi-script .pl for standard CGI, or ensure mod_perl is enabled. This instructs Apache to run the file using the Perl interpreter rather than sending the raw code to the user.

What is the difference between text/x-perl and application/x-httpd-perl?

text/x-perl describes Perl source code intended to be read or edited as plain text. In contrast, application/x-httpd-perl is often used internally by web servers (specifically Apache with mod_perl) to indicate that the file is an active script that should be executed to generate dynamic content.

Is application/x-httpd-perl supported by web browsers like Chrome or Firefox?

No, browsers do not natively execute Perl scripts; this MIME type is a server-side instruction. If a browser receives a response with the Content-Type: application/x-httpd-perl header, it implies a server misconfiguration, and the browser will simply ask the user to download the file.

Does Nginx support application/x-httpd-perl?

Nginx does not process Perl scripts directly using this specific MIME type in the same way Apache does. Instead, Nginx typically proxies requests for pl files to a FastCGI wrapper (like fcgiwrap). While the MIME type might exist in the mime.types file for mapping extensions, the execution requires a specific FastCGI configuration.

What are the security risks associated with this MIME type?

The primary risk is source code disclosure. If the server configuration fails or the MIME type association breaks, the server may send the raw Perl code (containing database passwords or logic) to the client instead of the script's output. Regular testing is required to ensure scripts execute rather than download.

General FAQ

What is a MIME type?

A MIME (Multipurpose Internet Mail Extensions) type is a standard that indicates the nature and format of a document, file, or assortment of bytes. MIME types are defined and standardized in IETF's RFC 6838.

MIME types are important because they help browsers and servers understand how to process a file. When a browser receives a file from a server, it uses the MIME type to determine how to display or handle the content, whether it's an image to display, a PDF to open in a viewer, or a video to play.

MIME types consist of a type and a subtype, separated by a slash (e.g., text/html, image/jpeg, application/pdf). Some MIME types also include optional parameters.

How do I find the MIME type for a file?

You can check the file extension or use a file identification tool such as file --mime-type on the command line. Many programming languages also provide libraries to detect MIME types.

Why are multiple MIME types listed for one extension?

Different applications and historical conventions may use alternative MIME identifiers for the same kind of file. Showing them all helps ensure compatibility across systems.