Content-type description, that is, the type of HTTP request header

Content-type description, that is, the type of HTTP request header

To learn content-type, you must first know what it is and what it is used for.

The HTTP protocol (RFC2616) adopts a request/response model. The client sends a request to the server. The request header contains the request method, URI, protocol version, and a MIME-like message structure containing request modifiers, client information, and content. The server responds with a status line containing the message protocol version, a success or error code, plus server information, entity metainformation, and possible entity content.

Typically an HTTP message consists of a start line, one or more header fields, a blank line ending with just the header fields, and an optional message body. The HTTP header field includes four parts: general header, request header, response header and entity header. Each header field consists of three parts: a domain name, a colon (:), and a domain value. Domain names are case-insensitive. Any number of spaces can be added before the domain value. Header fields can be extended to multiple lines. At the beginning of each line, use at least one space or tab character.

Both request messages and response messages can contain entity information, which generally consists of an entity header field and an entity. The entity header field contains original information about the entity. The entity header includes Allow, Content-Base, Content-Encoding, Content-Language, Content-Length, Content-Location, Content-MD5, Content-Range, Content-Type, Etag, Expires, Last-Modified, and extension-header.
Content-Type is a very important content in the return message, indicating the MIME type of the following document. Content-Type: [type]/[subtype]; parameter. For example, the most common one is text/html, which means that the returned content is of text type and the text is in HTML format. In principle, the browser will decide how to display the returned message body based on Content-Type.

type has the following form

Text: used to represent text information in a standardized way. Text messages can be in multiple character sets and/or multiple formats.

Multipart: used to connect multiple parts of the message body to form a message. These parts can be different types of data;

Application: used to transfer application data or binary data;

Message: used to package an E-mail message;

Image: used to transmit static image data;

Audio: used to transmit audio or voice data;

Video: used to transmit dynamic image data, which can be a video data format edited together with audio.

subtype is used to specify the detailed form of type. The set of content-type/subtype pairs, and the parameters associated with them, will grow over time. To ensure that these values ​​are developed in an orderly and open manner, MIME uses the Internet Assigned Numbers Authority (IANA) as a central registration mechanism to manage these values.

parameter can be used to specify additional information, and more often it is used to specify the charset parameter for text encoding such as text/plain and text/htm. MIME defines a default subtype based on the type. When the client cannot determine the subtype of the message, the message is treated as the default subtype for processing. Text defaults to text/plain, Application defaults to application/octet-stream and Multipart is treated as multipart/mixed by default. For IE6 browser, if the type in Content-Type is inconsistent with the actual message body type, it will analyze the actual type based on the type in the content. It can correctly identify common image formats such as JPG and GIF, regardless of what is written in Content-Type.
If the type specified in Content-Type is a type that the browser can open directly, then the browser will directly open its content and display it. If it is a type associated with other applications, then it is necessary to look up the registration status of this type in the registry. If it is allowed to open directly without asking, it will directly call out the associated application to open the file. But if it is not allowed to open directly, it will ask whether to open it. For the type that is not associated with any application, IE browser does not know how to open it, and IE6 will try to open it as XML.

If you want to download a file, you can add it to the http header:

fprintf(file, "Content-Disposition:attachment; filename=\"%s\" \r\n", fileName);

After testing, html, pdf, gif and other files that were originally opened on the web page can be downloaded normally.

'hqx' => 'application/mac-binhex40',
'cpt' => 'application/mac-compactpro',
'doc' => 'application/msword',
'bin' => 'application/octet-stream',
'dms' => 'application/octet-stream',
'lha' => 'application/octet-stream',
'lzh' => 'application/octet-stream',
'exe' => 'application/octet-stream',
'class' => 'application/octet-stream',
'so' => 'application/octet-stream',
'dll' => 'application/octet-stream',
'oda' => 'application/oda',
'pdf' => 'application/pdf',
'ai' => 'application/postscript',
'eps' => 'application/postscript',
'ps' => 'application/postscript',
'smi' => 'application/smil',
'smil' => 'application/smil',
'mif' => 'application/vnd.mif',
'xls' => 'application/vnd.ms-excel',
'ppt' => 'application/vnd.ms-powerpoint',
'wbxml' => 'application/vnd.wap.wbxml',
'wmlc' => 'application/vnd.wap.wmlc',
'wmlsc' => 'application/vnd.wap.wmlscriptc',
'bcpio' => 'application/x-bcpio',
'vcd' => 'application/x-cdlink',
'pgn' => 'application/x-chess-pgn',
'cpio' => 'application/x-cpio',
'csh' => 'application/x-csh',
'dcr' => 'application/x-director',
'dir' => 'application/x-director',
'dxr' => 'application/x-director',
'dvi' => 'application/x-dvi',
'spl' => 'application/x-futuresplash',
'gtar' => 'application/x-gtar',
'hdf' => 'application/x-hdf',
'js' => 'application/x-javascript',
'skp' => 'application/x-koan',
'skd' => 'application/x-koan',
'skt' => 'application/x-koan',
'skm' => 'application/x-koan',
'latex' => 'application/x-latex',
'nc' => 'application/x-netcdf',
'cdf' => 'application/x-netcdf',
'sh' => 'application/x-sh',
'shar' => 'application/x-shar',
'swf' => 'application/x-shockwave-flash',
'sit' => 'application/x-stuffit',
'sv4cpio' => 'application/x-sv4cpio',
'sv4crc' => 'application/x-sv4crc',
'tar' => 'application/x-tar',
'tcl' => 'application/x-tcl',
'tex' => 'application/x-tex',
'texinfo' => 'application/x-texinfo',
'texi' => 'application/x-texinfo',
't' => 'application/x-troff',
'tr' => 'application/x-troff',
'roff' => 'application/x-troff',
'man' => 'application/x-troff-man',
'me' => 'application/x-troff-me',
'ms' => 'application/x-troff-ms',
'ustar' => 'application/x-ustar',
'src' => 'application/x-wais-source',
'xhtml' => 'application/xhtml+xml',
'xht' => 'application/xhtml+xml',
'zip' => 'application/zip',
'au' => 'audio/basic',
'snd' => 'audio/basic',
'mid' => 'audio/midi',
'midi' => 'audio/midi',
'kar' => 'audio/midi',
'mpga' => 'audio/mpeg',
'mp2' => 'audio/mpeg',
'mp3' => 'audio/mpeg',
'aif' => 'audio/x-aiff',
'aiff' => 'audio/x-aiff',
'aifc' => 'audio/x-aiff',
'm3u' => 'audio/x-mpegurl',
'ram' => 'audio/x-pn-realaudio',
'rm' => 'audio/x-pn-realaudio',
'rpm' => 'audio/x-pn-realaudio-plugin',
'ra' => 'audio/x-realaudio',
'wav' => 'audio/x-wav',
'pdb' => 'chemical/x-pdb',
'xyz' => 'chemical/x-xyz',
'bmp' => 'image/bmp',
'gif' => 'image/gif',
'ief' => 'image/ief',
'jpeg' => 'image/jpeg',
'jpg' => 'image/jpeg',
'jpe' => 'image/jpeg',
'png' => 'image/png',
'tiff' => 'image/tiff',
'tif' => 'image/tiff',
'djvu' => 'image/vnd.djvu',
'djv' => 'image/vnd.djvu',
'wbmp' => 'image/vnd.wap.wbmp',
'ras' => 'image/x-cmu-raster',
'pnm' => 'image/x-portable-anymap',
'pbm' => 'image/x-portable-bitmap',
'pgm' => 'image/x-portable-graymap',
'ppm' => 'image/x-portable-pixmap',
'rgb' => 'image/x-rgb',
'xbm' => 'image/x-xbitmap',
'xpm' => 'image/x-xpixmap',
'xwd' => 'image/x-xwindowdump',
'igs' => 'model/iges',
'iges' => 'model/iges',
'msh' => 'model/mesh',
'mesh' => 'model/mesh',
'silo' => 'model/mesh',
'wrl' => 'model/vrml',
'vrml' => 'model/vrml',
'css' => 'text/css',
'html' => 'text/html',
'htm' => 'text/html',
'asc' => 'text/plain',
'txt' => 'text/plain',
'rtx' => 'text/richtext',
'rtf' => 'text/rtf',
'sgml' => 'text/sgml',
'sgm' => 'text/sgml',
'tsv' => 'text/tab-separated-values',
'wml' => 'text/vnd.wap.wml',
'wmls' => 'text/vnd.wap.wmlscript',
'etx' => 'text/x-setext',
'xsl' => 'text/xml',
'xml' => 'text/xml',
'mpeg' => 'video/mpeg',
'mpg' => 'video/mpeg',
'mpe' => 'video/mpeg',
'qt' => 'video/quicktime',
'mov' => 'video/quicktime',
'mxu' => 'video/vnd.mpegurl',
'avi' => 'video/x-msvideo',
'movie' => 'video/x-sgi-movie',
'ice' => 'x-conference/x-cooltalk',

<<:  Detailed explanation of the relationship between React and Redux

>>:  Border-radius IE8 compatible processing method

Recommend

Detailed use cases of MySql escape

MySQL escape Escape means the original semantics ...

Practice using Golang to play with Docker API

Table of contents Installing the SDK Managing loc...

Detailed steps for installing JDK and Tomcat on Linux cloud server (recommended)

Download and install JDK Step 1: First download t...

Analyze how a SQL query statement is executed in MySQL

Table of contents 1. Overview of MySQL Logical Ar...

How to use multi-core CPU to speed up your Linux commands (GNU Parallel)

Have you ever had the need to compute a very larg...

Implementing a simple web clock with JavaScript

Use JavaScript to implement a web page clock. The...

Detailed explanation of the basic usage of SSH's ssh-keygen command

SSH public key authentication is one of the SSH a...

How to use Baidu Map API in vue project

Table of contents 1. Register an account on Baidu...

15 Best Practices for HTML Beginners

Here are 30 best practices for HTML beginners. 1....

Practical example of nested routes in vue.js Router

Table of contents Preface Setting up with Vue CLI...

How to implement checkbox & radio alignment

Not only do different browsers behave differently...

How to use not in to optimize MySql

Recently, when using select query in a project, I...

js realizes packaging multiple pictures into zip

Table of contents 1. Import files 2. HTML page 3....