PARQUET MIME Type – Free, Online, Private
application/vnd.apache.parquet is the type for an Apache Parquet columnar file. The magic at both ends is PAR1.
What .parquet is
Parquet stores a table in columns so an engine can read one field without reading the whole row. The file starts with the four bytes PAR1 and ends with PAR1. A footer before the trailing magic holds the schema and the offsets of the row groups. That is why a client seeks to the end first. IANA registers application/vnd.apache.parquet. There is no text representation. A CSV of the same rows is text/csv and is a different file. The type does not say which compression the columns use. Snappy, gzip, and zstd are choices inside the file.
IANA registers application/vnd.apache.parquet. The media type is application/vnd.apache.parquet. Extensions that use it on this page: .parquet. A client compares the type, not the filename, once the response has arrived. The filename still matters on disk and in Content-Disposition, which is why a wrong extension and a wrong header are two different bugs.
What sends application/vnd.apache.parquet
What sends application/vnd.apache.parquet: Send application/vnd.apache.parquet for a .parquet download. Enable Range requests. Engines fetch the footer, then the column chunks they need, and a server that forces a full-body 200 makes a selective read impossible. Do not add a charset. Do not put the file behind a middleware that buffers the entire object to sniff it. The file can be larger than memory. If you also publish a CSV extract, use another URL and text/csv. Do not content-negotiate between them on one path. The file on disk is still .parquet. Once the response exists, a client trusts application/vnd.apache.parquet, not the filename. If you put a dataset in object storage and only sometimes serve it through HTTP, keep this type on the HTTP response and the same bytes in the object. A gateway that rewrites the type to application/octet-stream to 'be safe' breaks clients that finally became strict about the vendor type.
Content-Type for .parquet
Send application/vnd.apache.parquet and do not add a charset parameter. The body is binary. A charset tells a text decoder to reinterpret bytes that are not text, which corrupts a download and does not help a browser sniff the format.
Content-TypeContent-Type: application/vnd.apache.parquet
nginx, Apache, and Express
These snippets map .parquet to application/vnd.apache.parquet. nginx reads the types block when it picks a type from the URL's extension. A location that sets default_type, or an application that sets the header itself, overrides that map. Apache AddType applies in the directory context where you put it. The Express static example writes the header for files ending in .parquet so a stale mime database in the framework cannot disagree with the type on this page.
nginx# /etc/nginx/mime.types, inside the types { } block
application/vnd.apache.parquet parquet;
ApacheAddType application/vnd.apache.parquet .parquet
Expressimport express from "express";
const app = express();
app.use(express.static("public", {
setHeaders(res, filePath) {
if (filePath.endsWith(".parquet")) {
res.setHeader("Content-Type", "application/vnd.apache.parquet");
}
},
}));
Pitfalls for application/vnd.apache.parquet
Pitfalls that show up for application/vnd.apache.parquet, and not for a neighboring type with a similar extension: A proxy that truncates the tail destroys the footer and the closing magic. The type is still correct and every reader fails. Check that the last four bytes are PAR1 after upload. Another trap is a schema change under a stable URL. Old readers will mis-decode columns or reject the file. Version the path when the schema changes. Another is serving a Parquet file as application/octet-stream, which downloads but breaks a client that refuses to parse unless the vendor type matches. Another is assuming the file is sorted or unique. Parquet does not promise that. Your writer does, or it does not.
- The magic PAR1 is at the start and at the end. Checking only the start misses a truncated footer.
- application/vnd.apache.parquet is the registered type. application/parquet is not.
- Compression of columns is inside the file. Content-Encoding is a second layer you usually do not need.
- A directory of part files in object storage is a dataset. Each object you serve with this type is one file, not the directory.
Frequently asked questions
What is the Content-Type?
application/vnd.apache.parquet.
What is the magic?
PAR1 at the start and PAR1 at the end. The footer sits just before the trailing magic.
Why are Range requests required?
Readers seek to the footer and then to specific column chunks. A server that only returns the whole body makes that impossible.
Is a CSV export this type?
No. CSV is text/csv. Parquet is a binary columnar file.