Inhaltstypbeschreibung, d. h. der Typ des HTTP-Anforderungsheaders

Inhaltstypbeschreibung, d. h. der Typ des HTTP-Anforderungsheaders

Um den Inhaltstyp zu lernen, müssen Sie zunächst wissen, was er ist und wofür er verwendet wird.

Das HTTP-Protokoll (RFC2616) verwendet ein Anforderungs-/Antwortmodell. Der Client sendet eine Anforderung an den Server. Der Anforderungsheader enthält die Anforderungsmethode, URI, Protokollversion und eine MIME-ähnliche Nachrichtenstruktur mit Anforderungsmodifizierern, Clientinformationen und Inhalt. Der Server antwortet mit einer Statuszeile, die die Version des Nachrichtenprotokolls, einen Erfolgs- oder Fehlercode sowie Serverinformationen, Entitätsmetainformationen und möglichen Entitätsinhalt enthält.

Normalerweise besteht eine HTTP-Nachricht aus einer Startzeile, einem oder mehreren Header-Feldern, einer leeren Zeile, die nur mit den Header-Feldern endet, und einem optionalen Nachrichtentext. Das HTTP-Headerfeld umfasst vier Teile: allgemeinen Header, Anforderungsheader, Antwortheader und Entityheader. Jedes Header-Feld besteht aus drei Teilen: einem Domänennamen, einem Doppelpunkt (:) und einem Domänenwert. Bei Domänennamen wird die Groß-/Kleinschreibung nicht beachtet. Vor dem Domänenwert können beliebig viele Leerzeichen eingefügt werden. Header-Felder können auf mehrere Zeilen erweitert werden. Verwenden Sie am Anfang jeder Zeile mindestens ein Leerzeichen oder Tabulatorzeichen.

Sowohl Anforderungsnachrichten als auch Antwortnachrichten können Entitätsinformationen enthalten, die im Allgemeinen aus einem Entitätsheaderfeld und einer Entität bestehen. Das Entity-Header-Feld enthält Originalinformationen zur Entität. Der Entity-Header umfasst Allow, Content-Base, Content-Encoding, Content-Language, Content-Length, Content-Location, Content-MD5, Content-Range, Content-Type, Etag, Expires, Last-Modified und Extension-Header.
Der Inhaltstyp ist ein sehr wichtiger Inhalt in der Antwortnachricht, der den MIME-Typ des folgenden Dokuments angibt. Inhaltstyp: [Typ]/[Untertyp]; Parameter. Am gebräuchlichsten ist beispielsweise „text/html“, was bedeutet, dass der zurückgegebene Inhalt vom Typ „Text“ ist und der Text im HTML-Format vorliegt. Grundsätzlich entscheidet der Browser basierend auf dem Inhaltstyp, wie der zurückgegebene Nachrichtentext angezeigt wird.

Typ hat die folgende Form

Text: Wird verwendet, um Textinformationen auf standardisierte Weise darzustellen. Textnachrichten können mehrere Zeichensätze und/oder mehrere Formate haben.

Multipart: Wird verwendet, um mehrere Teile des Nachrichtentexts zu einer Nachricht zu verbinden. Diese Teile können unterschiedliche Datentypen sein.

Anwendung: wird zum Übertragen von Anwendungsdaten oder Binärdaten verwendet;

Nachricht: wird zum Verpacken einer E-Mail-Nachricht verwendet;

Bild: wird zur Übertragung statischer Bilddaten verwendet;

Audio: wird zur Übertragung von Audio- oder Sprachdaten verwendet;

Video: Wird zur Übertragung dynamischer Bilddaten verwendet. Dabei kann es sich um ein mit Audio bearbeitetes Videodatenformat handeln.

Der Untertyp wird verwendet, um die detaillierte Form des Typs anzugeben. Die Menge der Inhaltstyp/Untertyp-Paare und die ihnen zugeordneten Parameter werden mit der Zeit wachsen. Um sicherzustellen, dass diese Werte geordnet und offen entwickelt werden, verwendet MIME die Internet Assigned Numbers Authority (IANA) als zentralen Registrierungsmechanismus zur Verwaltung dieser Werte.

Der Parameter „.txt“ kann verwendet werden, um zusätzliche Informationen anzugeben. Häufiger wird er verwendet, um den Zeichensatzparameter für die Textkodierung, wie z. B. „text/plain“ und „text/htm“, anzugeben. MIME definiert einen Standarduntertyp basierend auf dem Typ. Wenn der Client den Untertyp der Nachricht nicht bestimmen kann, wird die Nachricht für die Verarbeitung als Standarduntertyp behandelt. „Text“ ist standardmäßig „text/plain“, „Anwendung“ ist standardmäßig „application/octet-stream“ und „Multipart“ wird standardmäßig als „multipart/mixed“ behandelt. Wenn beim IE6-Browser der Typ im Inhaltstyp nicht mit dem tatsächlichen Nachrichtentexttyp übereinstimmt, analysiert er den tatsächlichen Typ basierend auf dem Typ im Inhalt. Er kann gängige Bildformate wie JPG und GIF korrekt identifizieren, unabhängig davon, was im Inhaltstyp steht.
Wenn der in Content-Type angegebene Typ ein Typ ist, den der Browser direkt öffnen kann, öffnet der Browser dessen Inhalt direkt und zeigt ihn an. Wenn es sich um einen Typ handelt, der mit anderen Anwendungen verknüpft ist, muss der Registrierungsstatus dieses Typs in der Registrierung nachgeschlagen werden. Wenn das direkte Öffnen ohne Nachfrage erlaubt ist, wird die verknüpfte Anwendung direkt aufgerufen, um die Datei zu öffnen. Wenn das direkte Öffnen jedoch nicht erlaubt ist, wird gefragt, ob die Datei geöffnet werden soll. Bei Typen, die keiner Anwendung zugeordnet sind, weiß der IE-Browser nicht, wie er sie öffnen soll, und IE6 versucht, sie als XML zu öffnen.

Wenn Sie eine Datei herunterladen möchten, können Sie diese dem http-Header hinzufügen:

fprintf(Datei, "Content-Disposition:Anhang; Dateiname=\"%s\" \r\n", Dateiname);

Nach dem Testen können HTML-, PDF-, GIF- und andere Dateien, die ursprünglich auf der Webseite geöffnet wurden, normal heruntergeladen werden.

'hqx' => 'Anwendung/mac-binhex40',
'cpt' => 'Anwendung/Mac-CompactPro',
'doc' => 'Anwendung/msword',
'bin' => 'Anwendung/Oktett-Stream',
'dms' => 'Anwendung/Oktett-Stream',
'lha' => 'Anwendung/Oktett-Stream',
'lzh' => 'Anwendung/Oktett-Stream',
'exe' => 'Anwendung/Oktett-Stream',
'Klasse' => 'Anwendung/Oktett-Stream',
'so' => 'Anwendung/Oktett-Stream',
'dll' => 'Anwendung/Oktett-Stream',
'oda' => 'Anwendung/oda',
'pdf' => 'Anwendung/pdf',
'ai' => 'Anwendung/Postscript',
'eps' => 'Anwendung/Postscript',
'ps' => 'Anwendung/Postscript',
'smi' => 'Anwendung/smil',
'smil' => 'Anwendung/smil',
'mif' => 'Anwendung/vnd.mif',
'xls' => 'Anwendung/vnd.ms-excel',
'ppt' => 'Anwendung/vnd.ms-powerpoint',
'wbxml' => 'Anwendung/vnd.wap.wbxml',
'wmlc' => 'Anwendung/vnd.wap.wmlc',
'wmlsc' => 'Anwendung/vnd.wap.wmlscriptc',
'bcpio' => 'Anwendung/x-bcpio',
'vcd' => 'Anwendung/x-cdlink',
'pgn' => 'Anwendung/x-chess-pgn',
'cpio' => 'Anwendung/x-cpio',
'csh' => 'Anwendung/x-csh',
'dcr' => 'Anwendung/X-Director',
'dir' => 'Anwendung/X-Verzeichnis',
'dxr' => 'Anwendung/X-Director',
'dvi' => 'Anwendung/x-dvi',
'spl' => 'Anwendung/x-futuresplash',
'gtar' => 'Anwendung/x-gtar',
'hdf' => 'Anwendung/x-hdf',
'js' => 'Anwendung/x-Javascript',
'skp' => 'Anwendung/x-koan',
'skd' => 'Anwendung/x-koan',
'skt' => 'Anwendung/x-koan',
'skm' => 'Anwendung/x-koan',
'latex' => 'Anwendung/x-latex',
'nc' => 'Anwendung/x-netcdf',
'cdf' => 'Anwendung/x-netcdf',
'sh' => 'Anwendung/x-sh',
'shar' => 'Anwendung/x-shar',
'swf' => 'Anwendung/x-shockwave-flash',
'sit' => 'Anwendung/x-stuffit',
'sv4cpio' => 'Anwendung/x-sv4cpio',
'sv4crc' => 'Anwendung/x-sv4crc',
'tar' => 'Anwendung/x-tar',
'tcl' => 'Anwendung/x-tcl',
'tex' => 'Anwendung/x-tex',
'texinfo' => 'Anwendung/x-texinfo',
'texi' => 'Anwendung/x-texinfo',
't' => 'Anwendung/x-troff',
'tr' => 'Anwendung/x-troff',
'roff' => 'Anwendung/x-troff',
'man' => 'Anwendung/x-troff-man',
'ich' => 'Anwendung/x-troff-ich',
'ms' => 'Anwendung/x-troff-ms',
'ustar' => 'Anwendung/x-ustar',
'src' => 'Anwendung/x-wais-source',
'xhtml' => 'Anwendung/xhtml+xml',
'xht' => 'Anwendung/xhtml+xml',
'zip' => 'Anwendung/zip',
'au' => 'Audio/Grundlagen',
'snd' => 'Audio/Grundlagen',
'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' => 'Chemikalie/x-pdb',
'xyz' => 'Chemikalie/x-xyz',
'bmp' => 'Bild/bmp',
'gif' => 'Bild/GIF',
'ief' => 'Bild/ief',
'jpeg' => 'bild/jpeg',
'jpg' => 'bild/jpeg',
'jpe' => 'bild/jpeg',
'png' => 'bild/png',
'tiff' => 'Bild/tiff',
'tif' => 'Bild/Tiff',
'djvu' => 'bild/vnd.djvu',
'djv' => 'bild/vnd.djvu',
'wbmp' => 'bild/vnd.wap.wbmp',
'ras' => 'Bild/x-cmu-Raster',
'pnm' => 'Bild/x-portable-anymap',
'pbm' => 'Bild/x-portable-bitmap',
'pgm' => 'Bild/x-portable-graymap',
'ppm' => 'Bild/x-portable-pixmap',
'rgb' => 'Bild/x-rgb',
'xbm' => 'Bild/x-xbitmap',
'xpm' => 'Bild/x-xpixmap',
'xwd' => 'Bild/x-xwindowdump',
'igs' => 'Modell/iges',
'iges' => 'Modell/iges',
'msh' => 'Modell/Netz',
'mesh' => 'Modell/Mesh',
'Silo' => 'Modell/Netz',
'wrl' => 'Modell/VRML',
'vrml' => 'Modell/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/tabulatorgetrennte Werte',
'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',
'Film' => 'Video/x-sgi-Film',
'ice' => 'x-Konferenz/x-Cooltalk',

<<:  Detaillierte Erklärung der Beziehung zwischen React und Redux

>>:  Border-Radius IE8-kompatible Verarbeitungsmethode

Artikel empfehlen

Detailliertes Tutorial zum Bereitstellen von Jenkins basierend auf Docker

0. Als ich dieses Dokument erstellte, war es unge...

So schreiben Sie den Einführungsinhalt der Infoseite der Website

Alle Websites, ob offiziell, E-Commerce, soziale ...

Detaillierte Schritte zur Entwicklung von WeChat-Miniprogrammen mit Typescript

Auf die Vorteile von Typescript müssen wir nicht ...

So übertragen Sie Dateien zwischen Windows und Linux

Dateiübertragung zwischen Windows und Linux (1) V...

Reiner CSS-Code zum Erzielen eines Drag-Effekts

Inhaltsverzeichnis 1. Beispiel für Drag-Effekt 2....

MySQL-Sortierung mittels Index-Scan

Inhaltsverzeichnis Installieren Sie Sakila Index-...

Antworten auf mehrere häufig gestellte MySQL-Interviewfragen

Vorwort: Bei Vorstellungsgesprächen für verschied...

Funktionsprinzip und Implementierungsmethode der Vue-Anweisung

Einführung in Vue Die aktuelle Ära der großen Fro...

Detaillierte Beispiele für die Ausführung von Zabbix-Remotebefehlen

Inhaltsverzeichnis eins. Umfeld zwei. Vorsichtsma...

Einführung in Fork in Multithreading unter Linux

Inhaltsverzeichnis Frage: Fall (1) Fork vor dem E...