diff options
| author | Peter Bengtsson <mail@peterbe.com> | 2020-12-08 14:42:52 -0500 |
|---|---|---|
| committer | Peter Bengtsson <mail@peterbe.com> | 2020-12-08 14:42:52 -0500 |
| commit | 074785cea106179cb3305637055ab0a009ca74f2 (patch) | |
| tree | e6ae371cccd642aa2b67f39752a2cdf1fd4eb040 /files/ru/web/http/basics_of_http | |
| parent | da78a9e329e272dedb2400b79a3bdeebff387d47 (diff) | |
| download | translated-content-074785cea106179cb3305637055ab0a009ca74f2.tar.gz translated-content-074785cea106179cb3305637055ab0a009ca74f2.tar.bz2 translated-content-074785cea106179cb3305637055ab0a009ca74f2.zip | |
initial commit
Diffstat (limited to 'files/ru/web/http/basics_of_http')
6 files changed, 1283 insertions, 0 deletions
diff --git a/files/ru/web/http/basics_of_http/data_uris/index.html b/files/ru/web/http/basics_of_http/data_uris/index.html new file mode 100644 index 0000000000..107a3298bc --- /dev/null +++ b/files/ru/web/http/basics_of_http/data_uris/index.html @@ -0,0 +1,131 @@ +--- +title: Data URL +slug: Web/HTTP/Basics_of_HTTP/Data_URIs +translation_of: Web/HTTP/Basics_of_HTTP/Data_URIs +--- +<div>{{HTTPSidebar}}</div> + +<p><strong>Data URL</strong>, URL имеющий приставку <code>data:</code>, делает возможным встраивание файлов небольшого размера прямо в документ.</p> + +<div class="note"> +<p><strong>Заметьте</strong>: современные браузеры обрабатывают Data URL, как неявный уникальный origin, и не заимствуют значение origin из объекта настроек ответственного за навигацию.</p> +</div> + +<h2 id="Синтаксис">Синтаксис</h2> + +<p>Data URL состоит из четырёх сегментов: приставки (<code>data:</code>), <a href="/ru/docs/Web/HTTP/Basics_of_HTTP/MIME_types">MIME типа</a>, описывающего тип данных, дополнительного ключевого слова <code>base64</code> для нетекстовых данных и самой строки данных:</p> + +<pre class="syntaxbox">data:[<тип данных>][;base64],<данные> +</pre> + +<p><code>тип данных</code> описывается строкой в формате <a href="/ru/docs/Web/HTTP/Basics_of_HTTP/MIME_types">MIME типа</a>, например <code>'image/jpeg'</code> для JPEG файла изображения. При не указывании типа данных, браузер автоматически будет интерпретировать строку данных, как <code>text/plain;charset=US-ASCII</code></p> + +<p>Если данные представляют собой какую-либо текстовую информацию, вы можете просто вставить эту текстовую строку в Data URL (используя соответствующие для типа данных сущности и знаки экранирования). В ином случае вам будет необходимо использовать ключевое слово <code>base64</code> перед вставкой base64-кодированных бинарных данных. Дополнительную информацию о MIME типах вы сможете найти <a href="/ru/docs/Web/HTTP/Basics_of_HTTP/MIME_types">здесь</a> и <a href="/ru/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Complete_list_of_MIME_types">здесь</a>.</p> + +<p>Несколько примеров:</p> + +<dl> + <dt><code>data:,Hello%2C%20World!</code></dt> + <dd>Простые text/plain данные</dd> + <dt><code>data:text/plain;base64,SGVsbG8sIFdvcmxkIQ%3D%3D</code></dt> + <dd>base64-кодированная версия примера выше</dd> + <dt><code>data:text/html,%3Ch1%3EHello%2C%20World!%3C%2Fh1%3E</code></dt> + <dd>HTML строка вида: <code><h1>Hello, World!</h1></code></dd> + <dt><code>data:text/html,<script>alert('hi');</script></code></dt> + <dd>HTML строка, вызывающая JavaScript alert функцию. Заметьте необходимость закрывающего <script> тега.</dd> +</dl> + +<h2 id="Кодирование_данных_в_формат_base64"><strong>Кодирование данных в формат base64</strong></h2> + +<p>Base64 относится к группе транспортных кодировок, и позволяет представлять бинарные данные в виде ASCII строк, переводя их в radix-64 представление. Состоя только из ASCII символов, base64 строки являются допустимыми для использования в URL, по этой причине они могут быть использованы и в Data URL.</p> + +<h3 id="Кодирование_в_Javascript"><strong>Кодирование в Javascript</strong></h3> + +<p>Web API имеет встроенные методы для кодирования и декодирования формата base64: <a href="/ru/docs/Web/API/WindowBase64/Base64_encoding_and_decoding">Base64 кодирование и декодирование</a>.</p> + +<h3 id="Кодирование_на_Unix_системах"><strong>Кодирование на Unix системах</strong></h3> + +<p>На Linux и Mac OS X системах, кодирование файлов или строк в формат Base64 может быть выполнено через программу <code>base64</code> в командной строке (или, в качестве альтернативы, программу <code>uuencode</code> с <code>-m</code> аргументом).</p> + +<pre class="brush: bash">echo -n hello|base64 +# выводит в консоль: aGVsbG8= + +echo -n hello>a.txt +base64 a.txt +# выводит в консоль: aGVsbG8= + +base64 a.txt>b.txt +# записывает в файл b.txt: aGVsbG8= +</pre> + +<h3 id="Кодирование_на_Microsoft_Windows"><strong>Кодирование на Microsoft Windows</strong></h3> + +<p>Кодирование на Windows может быть выполнено через powershell или какую-либо другую предназначенную для этого программу. Так же кодирование может быть выполнено и через программу <code>base64</code> (смотрите секцию Кодирование на Unix системах), при условии активированной технологии <a href="https://en.wikipedia.org/wiki/Windows_Subsystem_for_Linux">WSL</a>.</p> + +<pre class="syntaxbox">[convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes("hello")) +# выводит в консоль: aGVsbG8= + +bash -c "echo -n hello`|base64" +# выводит в консоль: aGVsbG8= +# обратный апостроф (`) используется здесь для экранирования символа вертикальной черты (|) +</pre> + +<h2 id="Распространённые_проблемы"><strong>Распространённые проблемы</strong></h2> + +<p>Эта секция описывает ряд проблем, которые могут возникнуть при использовании Data URL.</p> + +<p>Для примера рассмотрим Data URL вида:</p> + +<pre>data:text/html,lots of text...<p><a name%3D"bottom">bottom</a>?arg=val +</pre> + +<p>результатом декодирования которого будет HTML строка:</p> + +<pre>lots of text...<p><a name="bottom">bottom</a>?arg=val +</pre> + +<dl> + <dt>Синтаксис</dt> + <dd>Data URL представляет собой простой формат, но даже в нём можно забыть добавить запятую перед сегментом данных или произвести ошибку во время их base64 кодирования.</dd> + <dt>Форматирование внутри документа</dt> + <dd>Встраивание Data URL по сути является встраиванием файла внутрь файла, и длина его строки может быть намного шире, чем ширина заключающего его документа. Так же, несмотря на то, что использование пробелов считается обычной практикой при форматировании данных, есть вероятность, что у вас возникнут проблемы <a class="external" href="http://bugzilla.mozilla.org/show_bug.cgi?id=73026#c12">при их base64 кодировании</a>.</dd> + <dt>Ограничения длины</dt> + <dd>Хотя Firefox поддерживает Data URL практически неограниченных размеров, каждый отдельный браузер имеет свои ограничения на их длину. Например, Opera 11 ограничивает допустимую длину URL до 65535 символов, что означает ограничение сегмента данных в Data URL до 65529 символов (длина в 65529 символов взята из условия использования только только <code>data:</code> сегмента, без определения MIME типа данных).</dd> + <dt>Нехватка возможности обработки ошибок</dt> + <dd>Опечатки в определении MIME типа или написания ключевого слова <code>'base64'</code> будут проигнорированы без каких-либо уведомлений об ошибках.</dd> + <dt>Отсутствие поддержки строки параметров</dt> + <dd> + <p>В связи с неопределённостью типа сегмента данных в Data URL, строка параметров (характерные для страницы параметры, представляющиеся в виде <code><url>?parameter-data</code>), добавленная к сегменту данных будет рассматриваться, как часть этих данных.</p> + </dd> + <dt>Проблемы с безопасностью</dt> + <dd>Несколько проблем с безопасностью (например: фишинг) связаны с Data URL и переходом по ним из корневого контекста документа. Чтобы избавиться от этих проблем, переход по URI, начинающихся со схемы <code>data://</code>, из корневого контекста документа перестал быть возможен в Firefox, начиная с версии 59 (и начиная с версии 58 в Nightly/Beta вариантах браузера). Надеемся, что остальные браузеры так же последуют этому примеру. Для дополнительной информации смотрите <a href="https://blog.mozilla.org/security/2017/11/27/blocking-top-level-navigations-data-urls-firefox-58/">Blocking Top-Level Navigations to data URLs for Firefox 58</a>.</dd> +</dl> + +<h2 id="Спецификации">Спецификации</h2> + +<table class="standard-table"> + <tbody> + <tr> + <th scope="col">Спецификация</th> + <th scope="col">Заголовок</th> + </tr> + <tr> + <td>{{RFC("2397")}}</td> + <td>The "data" URL scheme</td> + </tr> + </tbody> +</table> + +<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2> + +<p>{{compat("http.data-url")}}</p> + +<h2 id="Смотрите_так_же">Смотрите так же</h2> + +<ul> + <li><a href="/ru/docs/Web/API/WindowBase64/Base64_encoding_and_decoding">Base64 кодирование и декодирование</a></li> + <li>{{domxref("WindowBase64.atob","atob()")}}</li> + <li>{{domxref("WindowBase64.btoa","btoa()")}}</li> + <li><a href="/ru/docs/Web/CSS/uri">CSS <code>url()</code></a></li> + <li><a href="/ru/docs/Glossary/URI">URI</a></li> +</ul> diff --git a/files/ru/web/http/basics_of_http/evolution_of_http/index.html b/files/ru/web/http/basics_of_http/evolution_of_http/index.html new file mode 100644 index 0000000000..a9605942e8 --- /dev/null +++ b/files/ru/web/http/basics_of_http/evolution_of_http/index.html @@ -0,0 +1,200 @@ +--- +title: Evolution of HTTP +slug: Web/HTTP/Basics_of_HTTP/Evolution_of_HTTP +tags: + - HTTP + - Руководство +translation_of: Web/HTTP/Basics_of_HTTP/Evolution_of_HTTP +--- +<p>{{HTTPSidebar}}</p> + +<p><strong>HTTP</strong> is the underlying protocol of the World Wide Web. Invented by Tim Berners-Lee in the years 1989-1991, HTTP has seen many changes, keeping most of the simplicity and further shaping its flexibility. HTTP has evolved, from an early protocol to exchange files in a semi-trusted laboratory environment, to the modern maze of the Internet, now carrying images, videos in high resolution and 3D.</p> + +<h2 id="Invention_of_the_World_Wide_Web">Invention of the World Wide Web</h2> + +<p>In 1989, while he was working at CERN, Tim Berners-Lee wrote a proposal to build a hypertext system over the Internet. Initially calling it the <em>Mesh</em>, it was later renamed to <em>World Wide Web</em> during its implementation in 1990. Built over the existing TCP and IP protocols, it consisted of 4 building blocks:</p> + +<ul> + <li>A textual format to represent hypertext documents, the <em><a href="/en-US/docs/Web/HTML">HyperText Markup Language</a></em> (HTML).</li> + <li>A simple protocol to exchange these documents, the <em>HypertText Transfer Protocol </em>(HTTP).</li> + <li>A client to display (and accidentally edit) these documents, the first Web browser called <em>WorldWideWeb</em>.</li> + <li>A server to give access to the document, an early version of <em>httpd</em>.</li> +</ul> + +<p>These four building blocks were completed by the end of 1990, and the first servers were already running outside of CERN by early 1991. On August 6<sup>th</sup> 1991, Tim Berners-Lee's <a href="https://groups.google.com/forum/#!msg/alt.hypertext/eCTkkOoWTAY/urNMgHnS2gYJ">post</a> on the public <em>alt.hypertext</em> newsgroup is now considered as the official start of the World Wide Web as a public project.</p> + +<p>The HTTP protocol used in those early phases was very simple, later dubbed HTTP/0.9, and sometimes as the one-line protocol.</p> + +<h2 id="HTTP0.9_–_The_one-line_protocol">HTTP/0.9 – The one-line protocol</h2> + +<p>The initial version of HTTP had no version number; it has been later called 0.9 to differentiate it from the later versions. HTTP/0.9 is extremely simple: requests consist of a single line and start with the only possible method {{HTTPMethod("GET")}} followed by the path to the resource (not the URL as both the protocol, server, and port are unnecessary once connected to the server).</p> + +<pre>GET /mypage.html</pre> + +<p>The response is extremely simple too: it only consisted of the file itself.</p> + +<pre><HTML> +A very simple HTML page +</HTML></pre> + +<p>Unlike subsequent evolutions, there were no HTTP headers, meaning that only HTML files could be transmitted, but no other type of documents. There were no status or error codes: in case of a problem, a specific HTML file was send back with the description of the problem contained in it, for human consumption.</p> + +<h2 id="HTTP1.0_–_Building_extensibility">HTTP/1.0 – Building extensibility</h2> + +<p>HTTP/0.9 was very limited and both browsers and servers quickly extended it to be more versatile:</p> + +<ul> + <li>Versioning information is now sent within each request (<code>HTTP/1.0</code> is appended to the <code>GET</code> line)</li> + <li>A status code line is also sent at the beginning of the response, allowing the browser itself to understand the success or failure of the request and to adapt its behavior in consequence (like in updating or using its local cache in a specific way)</li> + <li>The notion of HTTP headers has been introduced, both for the requests and the responses, allowing metadata to be transmitted and making the protocol extremely flexible and extensible.</li> + <li>With the help of the new HTTP headers, the ability to transmit other documents than plain HTML files has been added (thanks to the {{HTTPHeader("Content-Type")}} header).</li> +</ul> + +<p>A typical request was then looking like this:</p> + +<pre>GET /mypage.html HTTP/1.0 +User-Agent: NCSA_Mosaic/2.0 (Windows 3.1) + +200 OK +Date: Tue, 15 Nov 1994 08:12:31 GMT +Server: CERN/3.0 libwww/2.17 +Content-Type: text/html +<HTML> +A page with an image + <IMG SRC="/myimage.gif"> +</HTML></pre> + +<p>Followed by a second connection and request to fetch the image:</p> + +<pre>GET /myimage.gif HTTP/1.0 +User-Agent: NCSA_Mosaic/2.0 (Windows 3.1) + +200 OK +Date: Tue, 15 Nov 1994 08:12:32 GMT +Server: CERN/3.0 libwww/2.17 +Content-Type: text/gif +<em>(image content)</em></pre> + +<p>These novelties have not been introduced as concerted effort, but as a try-and-see approach over the 1991-1995 period: a server and a browser added one feature and it saw if it get traction. A lot of interoperability problems were common. In November 1996, in order to solve these annoyances, an informational document describing the common practices has been published, {{RFC(1945)}}. This is the definition of HTTP/1.0 and it is notable that, in the narrow sense of the term, it isn't an official standard.</p> + +<h2 id="HTTP1.1_–_The_standardized_protocol">HTTP/1.1 – The standardized protocol</h2> + +<p>In parallel to the somewhat chaotic use of the diverse implementations of HTTP/1.0, and since 1995, well before the publication of HTTP/1.0 document the next year, proper standardization was in progress. The first standardized version of HTTP, HTTP/1.1 was published in early 1997, only a few months after HTTP/1.0.</p> + +<p>HTTP/1.1 clarified ambiguities and introduced numerous improvements:</p> + +<ul> + <li>A connection can be reused, saving the time to reopen it numerous times to display the resources embedded into the single original document retrieved.</li> + <li>Pipelining has been added, allowing to send a second request before the answer for the first one is fully transmitted, lowering the latency of the communication.</li> + <li>Chunked responses are now also supported.</li> + <li>Additional cache control mechanisms have been introduced.</li> + <li>Content negotiation, including language, encoding, or type, has been introduced, and allows a client and a server to agree on the most adequate content to exchange.</li> + <li>Thanks to the {{HTTPHeader("Host")}} header, the ability to host different domains at the same IP address now allows server collocation.</li> +</ul> + +<p>A typical flow of requests, all through one single connection is now looking like this:</p> + +<pre>GET /en-US/docs/Glossary/Simple_header HTTP/1.1 +Host: developer.mozilla.org +User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:50.0) Gecko/20100101 Firefox/50.0 +Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 +Accept-Language: en-US,en;q=0.5 +Accept-Encoding: gzip, deflate, br +Referer: https://developer.mozilla.org/en-US/docs/Glossary/Simple_header + +200 OK +Connection: Keep-Alive +Content-Encoding: gzip +Content-Type: text/html; charset=utf-8 +Date: Wed, 20 Jul 2016 10:55:30 GMT +Etag: "547fa7e369ef56031dd3bff2ace9fc0832eb251a" +Keep-Alive: timeout=5, max=1000 +Last-Modified: Tue, 19 Jul 2016 00:59:33 GMT +Server: Apache +Transfer-Encoding: chunked +Vary: Cookie, Accept-Encoding + +<em>(content)</em> + + +GET /static/img/header-background.png HTTP/1.1 +Host: developer.cdn.mozilla.net +User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:50.0) Gecko/20100101 Firefox/50.0 +Accept: */* +Accept-Language: en-US,en;q=0.5 +Accept-Encoding: gzip, deflate, br +Referer: https://developer.mozilla.org/en-US/docs/Glossary/Simple_header + +200 OK +Age: 9578461 +Cache-Control: public, max-age=315360000 +Connection: keep-alive +Content-Length: 3077 +Content-Type: image/png +Date: Thu, 31 Mar 2016 13:34:46 GMT +Last-Modified: Wed, 21 Oct 2015 18:27:50 GMT +Server: Apache + +<em>(image content of 3077 bytes)</em></pre> + +<p>HTTP/1.1 was first published as {{rfc(2068)}} in January 1997.</p> + +<h2 id="More_than_15_years_of_extensions">More than 15 years of extensions</h2> + +<p>Thanks to its extensibility – creating new headers or methods is easy – and even if the HTTP/1.1 protocol was refined over two revisions, {{RFC("2616")}} published in June 1999 and the series of {{RFC("7230")}}-{{RFC("7235")}} published in June 2014 in prevision of the release of HTTP/2, this protocol has been extremely stable over more than 15 years.</p> + +<h3 id="Using_HTTP_for_secure_transmissions">Using HTTP for secure transmissions</h3> + +<p>The largest change that happened to HTTP was done as early as end of 1994. Instead of sending HTTP over a basic TCP/IP stack, Netscape Communication created an additional encrypted transmission layer on top of it: SSL. SSL 1.0 was never released outside the companies, but SSL 2.0 and its successors SSL 3.0 and SSL 3.1 allowed for the creation of e-commerce Web sites by encrypting and guaranteeing the authenticity of the messages exchanged between the server and client. SSL was put on the standards track and eventually became TLS, with version 1.0, 1.1, and 1.2 appearing successfully to close vulnerabilities. TLS 1.3 is currently in the making.</p> + +<p>During the same time, the need for an encrypted transport layer raised: the Web left the relative trustiness of a mostly academic network, to a jungle where advertisers, random individuals or criminals compete to get as much private information about people, try to impersonate them or even to replace data transmitted by altered ones. As the applications built over HTTP became more and more powerful, having access to more and more private information like address books, e-mail, or the geographic position of the user, the need to have TLS became ubiquitous even outside the e-commerce use case.</p> + +<h3 id="Using_HTTP_for_complex_applications">Using HTTP for complex applications</h3> + +<p>The original vision of Tim Berners-Lee for the Web wasn't a read-only medium. He envisioned a Web were people can add and move documents remotely, a kind of distributed file system. Around 1996, HTTP has been extended to allow authoring, and a standard called WebDAV was created. It has been further extended for specific applications like CardDAV to handle address book entries and CalDAV to deal with calendars. But all these *DAV extensions had a flaw: they had to be implemented by the servers to be used, which was quite complex. Their use on Web realms stayed confidential.</p> + +<p>In 2000, a new pattern for using HTTP was designed: {{glossary("REST", "representational state transfer")}} (or REST). The actions induced by the API were no more conveyed by new HTTP methods, but only by accessing specific URIs with basic HTTP/1.1 methods. This allowed any Web application to provide an API to allow retrieval and modification of its data without having to updated the browsers or the servers: all what is needed was embedded in the files served by the Web sites through standard HTTP/1.1. The drawback of the REST model resides in the fact that each website defines its own non-standard RESTful API and has total control on it; unlike the *DAV extensions were clients and servers are interoperable. RESTful APIs became very common in the 2010s.</p> + +<p>Since 2005, the set of APIs available to Web pages greatly increased and several of these APIs created extensions, mostly new specific HTTP headers, to the HTTP protocol for specific purposes:</p> + +<ul> + <li><a href="/en-US/docs/Web/API/Server-sent_events">Server-sent events</a>, where the server can push occasional messages to the browser.</li> + <li><a href="/en-US/docs/Web/API/WebSocket_API">WebSocket</a>, a new protocol that can be set up by upgrading an existing HTTP connection.</li> +</ul> + +<h3 id="Relaxing_the_security-model_of_the_Web">Relaxing the security-model of the Web</h3> + +<p>HTTP is independent of the security model of the Web, the <a href="/en-US/docs/Web/Security/Same-origin_policy">same-origin policy</a>. In fact, the current Web security model has been developed after the creation of HTTP! Over the years, it has proved useful to be able to be more lenient, by allowing under certain constraints to lift some of the restriction of this policy. How much and when such restrictions are lifted is transmitted by the server to the client using a new bunch of HTTP headers. These are defined in specifications like <a href="/en-US/docs/Glossary/CORS">Cross-Origin Resource Sharing</a> (CORS) or the <a href="/en-US/docs/Web/Security/CSP">Content Security Policy</a> (CSP).</p> + +<p>In addition to these large extensions, numerous other headers have been added, sometimes experimentally only. Notable headers are Do Not Track ({{HTTPHeader("DNT")}}) header to control privacy, {{HTTPHeader("X-Frame-Options")}}, or {{HTTPHeader('Upgrade-Insecure-Request')}} but many more exist.</p> + +<h2 id="HTTP2_–_A_protocol_for_greater_performance">HTTP/2 – A protocol for greater performance</h2> + +<p>Over the years, Web pages have become much more complex, even becoming applications in their own right. The amount of visual media displayed, the volume and size of scripts adding interactivity, has also increased: much more data is transmitted over significantly more HTTP requests. HTTP/1.1 connections need requests sent in the correct order. Theoretically, several parallel connections could be used (typically between 5 and 8), bringing considerable overhead and complexity. For example, HTTP pipelining has emerged as a resource burden in Web development.</p> + +<p>In the first half of the 2010s, Google demonstrated an alternative way of exchanging data between client and server, by implementing an experimental protocol SPDY. This amassed interest from developers working on both browsers and servers. Defining an increase in responsiveness, and solving the problem of duplication of data transmitted, SPDY served as the foundations of the HTTP/2 protocol.</p> + +<p>The HTTP/2 protocol has several prime differences from the HTTP/1.1 version:</p> + +<ul> + <li>It is a binary protocol rather than text. It can no longer be read and created manually despite this hurdle, improved optimization techniques can now be implemented.</li> + <li>It is a multiplexed protocol. Parallel requests can be handled over the same connection, removing the order and blocking constraints of the HTTP/1.x protocol.</li> + <li>It compresses headers. As these are often similar among a set of requests, this removes duplication and overhead of data transmitted.</li> + <li>It allows a server to populate data in a client cache, in advance of it being required, through a mechanism called the server push.</li> +</ul> + +<p>Officially standardized, in May 2015, HTTP/2 has had much success. By July 2016, 8.7% of all Web sites<sup><a href="https://w3techs.com/technologies/details/ce-http2/all/all">[1]</a></sup> were already using it, representing more than 68% of all requests<sup><a href="https://www.keycdn.com/blog/http2-statistics/">[2]</a></sup>. High-traffic Web sites showed the most rapid adoption, saving considerably on data transfer overheads and subsequent budgets.</p> + +<p>This rapid adoption rate was likely as HTTP/2 does not require adaptation of Web sites and applications: using HTTP/1.1 or HTTP/2 is transparent for them. Having an up-to-date server communicating with a recent browser is enough to enable its use: only a limited set of groups were needed to trigger adoption, and as legacy browser and server versions are renewed, usage has naturally increased, without further Web developer efforts.</p> + +<h2 id="Post-HTTP2_evolution">Post-HTTP/2 evolution</h2> + +<p>HTTP didn't stop evolving upon the release of HTTP/2. Like with HTTP/1.x previously, HTTP's extensibility is still beinig used to add new features. Notably, we can cite new extensions of the HTTP protocol appearing in 2016:</p> + +<ul> + <li>Support of {{HTTPHeader("Alt-Svc")}} allows the dissociation of the identification and the location of a given resource, allowing for a smarter {{Glossary("CDN")}} caching mechanism.</li> + <li>The introduction of {{HTTPHeader("Client-Hints")}} allows the browser, or client, to proactively communicate information about its requirements, or hardware constraints, to the server.</li> + <li>The introduction of security-related prefixes in the {{HTTPHeader("Cookie")}} header, now helps guarantee a secure cookie has not been altered.</li> +</ul> + +<p>This evolution of HTTP proves its extensibility and simplicity, liberating creation of many applications and compelling the adoption of the protocol. The environment in which HTTP is used today is quite different from that seen in the early 1990s. HTTP's original design proved to be a masterpiece, allowing the Web to evolve over a quarter of a century, without the need of a mutiny. By healing flaws, yet retaining the flexibility and extensibility which made HTTP such a success, the adoption of HTTP/2 hints at a bright future for the protocol.</p> diff --git a/files/ru/web/http/basics_of_http/identifying_resources_on_the_web_ru/index.html b/files/ru/web/http/basics_of_http/identifying_resources_on_the_web_ru/index.html new file mode 100644 index 0000000000..2b52d642b2 --- /dev/null +++ b/files/ru/web/http/basics_of_http/identifying_resources_on_the_web_ru/index.html @@ -0,0 +1,188 @@ +--- +title: Идентификация ресурсов в Вебе +slug: Web/HTTP/Basics_of_HTTP/Identifying_resources_on_the_Web_RU +tags: + - HTTP + - URI + - URL + - Веб + - Порт + - Путь + - Ресурсы + - Синтаксис + - Синтаксис URL + - Схема + - Фрагмент + - домен + - запрос +translation_of: Web/HTTP/Basics_of_HTTP/Identifying_resources_on_the_Web +--- +<div>{{HTTPSidebar}}</div> + +<p class="summary">"Объект" (или "цель") HTTP-запроса называется "ресурс", чья природа может быть разной: фото, документ, или что-либо ещё. Каждый ресурс идентифицируется с помощью унифицированного идентификатора ресурса ({{Glossary("URI")}}) используемого повсюду в HTTP для идентификации ресурсов.</p> + +<p>Обычно чтобы описать конкретный ресурс (его имя) и его местоположение в Вебе, используется всего один URL (Uniform Resource Locator - Унифицированный локатор ресурса, вид URI, его ещё называеют <em>веб-адресом</em>). Можно добавить, что иногда с помощью специального заголовка {{HTTPHeader("Alt-Svc")}} в ответе на запрос можно попросить клиента перезапросить ресурс с другой локации.</p> + +<h2 id="URLы_и_URNы">URLы и URNы</h2> + +<h3 id="URL">URL</h3> + +<p>Самый популярный тип URI - это Uniform Resource Locator ({{Glossary("URL")}}), который также называют <em>веб-адресом</em>.</p> + +<pre>https://developer.mozilla.org +https://developer.mozilla.org/ru/docs/Learn +https://developer.mozilla.org/ru/search?q=URL</pre> + +<p>Любой из этих URL-ов может быть набран в адресной строке браузера чтобы сказать ему загрузить соответствующую страницу (ресурс).</p> + +<p>URL состоит из разных частей, некоторые - обязательны, а другие нет. Более сложный пример:</p> + +<pre>http://www.example.com:80/path/to/myfile.html?key1=value1&key2=value2#SomewhereInTheDocument</pre> + +<h3 id="URN">URN</h3> + +<p>Uniform Resource Name (URN) - это URI, который идентифицирует ресурс по имени в конкретном пространстве имён.</p> + +<pre>urn:isbn:9780141036144 +urn:ietf:rfc:7230 +</pre> + +<p>Эти два URN-а соответствуют:</p> + +<ul> + <li>книга "1984" Джорджа Оруэлла,</li> + <li>IETF спецификация 7230, Hypertext Transfer Protocol (HTTP/1.1): Синтаксис и маршрутизация сообщений.</li> +</ul> + +<h2 id="Синтаксис_Унифицированных_Идентификаторов_Ресурсов_URI">Синтаксис Унифицированных Идентификаторов Ресурсов (URI)</h2> + +<h3 id="Схема_или_протокол">Схема или протокол</h3> + +<dl> + <dt><img alt="Protocol" src="https://mdn.mozillademos.org/files/8013/mdn-url-protocol@x2.png" style="height: 70px; width: 440px;"></dt> + <dd><code>http://</code> это пример протокола (схемы). Тут описывается какой протокол браузер должен использовать. Обычно это HTTP протокол или его безопасная версия - HTTPS. Интернет требует один из этих двух, но браузеры также знают как работать с некоторыми другими, например <code>mailto:</code> (чтобы открыть почтовый клиент) или <code>ftp:</code> для работы с передачей файлов. Популярные схемы:</dd> +</dl> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">Схема</th> + <th scope="col">Описание</th> + </tr> + </thead> + <tbody> + <tr> + <td>data</td> + <td><a href="/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URIs">Data URIs</a> </td> + </tr> + <tr> + <td>file</td> + <td>Доступ к файлам на локальном компьютере</td> + </tr> + <tr> + <td>ftp</td> + <td><a href="/en-US/docs/Glossary/FTP">File Transfer Protocol</a> (протокол передачи файлов)</td> + </tr> + <tr> + <td>http/https</td> + <td><a href="/en-US/docs/Glossary/HTTP">Hyper text transfer protocol (Secure)</a></td> + </tr> + <tr> + <td>mailto</td> + <td>Адрес электронной почты</td> + </tr> + <tr> + <td>ssh</td> + <td>Протокол Secure shell для работы с серверами</td> + </tr> + <tr> + <td>tel</td> + <td>Телефон</td> + </tr> + <tr> + <td>urn</td> + <td>Uniform Resource Names</td> + </tr> + <tr> + <td>view-source</td> + <td>Исходный код ресурса</td> + </tr> + <tr> + <td>ws/wss</td> + <td>(Зашифрованные) соединения <a href="/en-US/docs/Web/API/WebSockets_API">WebSocket</a></td> + </tr> + </tbody> +</table> + +<h3 id="Владелец_имя_хоста">Владелец (имя хоста)</h3> + +<dl> + <dt><img alt="Domaine Name" src="https://mdn.mozillademos.org/files/8015/mdn-url-domain@x2.png" style="height: 70px; width: 440px;"></dt> + <dd><code>www.example.com</code> - это доменное имя, идентификатор ответственного за это пространство имён. Идентифицирует, какой именно Веб-сервер получает запрос. Альтернативно, можно просто использовать {{Glossary("IP address")}}, но поскольку это не так удобно, то этот способ используется не часто.</dd> +</dl> + +<h3 id="Порт">Порт</h3> + +<dl> + <dt><img alt="Port" src="https://mdn.mozillademos.org/files/8017/mdn-url-port@x2.png" style="height: 70px; width: 440px;"></dt> + <dd><code>:80</code> - это порт сервера. Он идентифицирует технические "ворота", которые нужны для доступа к ресурсу на сервере. Обычно порт не указывается, т.к. существуют общепринятые нормы о стандартных портах для HTTP (80 для HTTP и 443 для HTTPS). В других случаях обязательно нужно указывать.</dd> +</dl> + +<h3 id="Путь">Путь</h3> + +<dl> + <dt><img alt="Path to the file" src="https://mdn.mozillademos.org/files/8019/mdn-url-path@x2.png" style="height: 70px; width: 440px;"></dt> + <dd><code>/path/to/myfile.html</code> - это путь к ресурсу на Веб-сервере. Изначально путь типа этого указывал на физическое место файла на сервере, но сейчас всё чаще это псевдоним или описание некоторого абстрактного ресурса.</dd> +</dl> + +<h3 id="Строка_запроса_query_string">Строка запроса (query string)</h3> + +<dl> + <dt><img alt="Parameters" src="https://mdn.mozillademos.org/files/8021/mdn-url-parameters@x2.png" style="height: 70px; width: 440px;"></dt> + <dd><code>?key1=value1&key2=value2</code> - это дополнительные параметры, предоставляемые Веб-серверу. Это список пар "ключ=значение", разделенных символом <code>&</code> . Веб-сервер может использовать эти параметры как дополнительные инструкции, что именно сделать с ресурсом перед отправкой его пользователю. Каждый Веб-сервер имеет свои правила насчет параметров, и единственный надежный способ узнать как конкретный Веб-сервер обрабатывает эти параметры - это спросить того, кто контролирует Веб-сервер.</dd> +</dl> + +<h3 id="Фрагмент">Фрагмент</h3> + +<dl> + <dt><img alt="Anchor" src="https://mdn.mozillademos.org/files/8023/mdn-url-anchor@x2.png" style="height: 70px; width: 440px;"></dt> + <dd><code>#SomewhereInTheDocument</code> - это "якорь" на другую часть ресурса. Якорь представляет собой что-то вроде "закладки" внутри ресурса, давая браузеру указание показать содержимое с определенного места. В HTML-документе, к примеру, браузер будет скроллить к точке где якорь определён, а на аудио/видео-документе бразуер попытается перейти на время, указанное в якоре. Важно что часть, начинающаяся с # - никогда не пересылается серверу в запросе.</dd> +</dl> + +<h2 id="Заметки_по_использованию">Заметки по использованию</h2> + +<p>Когда используются URLы в {{Glossary("HTML")}} содержимом, вам стоит использовать только несколько из этих схем. Когда идёт обращение к субресурсам (файлам, которые являются частью большого документа) — вам стоит использовать лишь HTTP и HTTPS. Браузеры сейчас перестают использовать FTP для загрузки ресурсов, из соображений безопасности.</p> + +<p>FTP до сих пор доступен на верхнем уровне (т.е. когда ссылка указывается в адресной строке или в ссылке), но некоторые браузеры могут делегировать загрузку FTP ресурсов другим приложениям.</p> + +<h2 id="Примеры">Примеры</h2> + +<pre>https://developer.mozilla.org/en-US/docs/Learn +tel:+1-816-555-1212 +git@github.com:mdn/browser-compat-data.git +ftp://example.org/resource.txt +urn:isbn:9780141036144 +mailto:help@supercyberhelpdesk.info +</pre> + +<h2 id="Спецификации">Спецификации</h2> + +<table class="standard-table"> + <tbody> + <tr> + <th scope="col">Спецификация</th> + <th scope="col">Название</th> + </tr> + <tr> + <td>{{RFC("7230", "Uniform Resource Identifiers", "2.7")}}</td> + <td>Hypertext Transfer Protocol (HTTP/1.1): Синтаксис и маршрутизация сообщений</td> + </tr> + </tbody> +</table> + +<h2 id="Читайте_также">Читайте также</h2> + +<ul> + <li><a href="/en-US/docs/Learn/Common_questions/What_is_a_URL">Что такое URL?</a></li> + <li><a href="http://www.iana.org/assignments/uri-schemes/uri-schemes.xhtml">Список URI-схем IANA</a></li> +</ul> diff --git a/files/ru/web/http/basics_of_http/index.html b/files/ru/web/http/basics_of_http/index.html new file mode 100644 index 0000000000..415e4b9a5d --- /dev/null +++ b/files/ru/web/http/basics_of_http/index.html @@ -0,0 +1,52 @@ +--- +title: Basics of HTTP +slug: Web/HTTP/Basics_of_HTTP +tags: + - HTTP + - NeedsTranslation + - Overview + - TopicStub +translation_of: Web/HTTP/Basics_of_HTTP +--- +<div>{{HTTPSidebar}}</div> + +<p>HTTP удобный расширяемый протокол. Он опирается на несколько базовых понятий, таких как: ресурсы и URI (унифицированный идентификатор ресурса), простая структура сообщений и технология "клиент-сервер" для общения. Помимо этих базовых концепций, за последние годы появилось множество расширений, добавляющих новые функциональные возможности и новую семантику путем создания новых HTTP-методов или заголовков.</p> + +<h2 id="Статьи">Статьи</h2> + +<dl> + <dt><a href="/en-US/docs/Web/HTTP/Overview">Обзор HTTP</a></dt> + <dd>Описывает, что такое HTTP и какова его роль в архитектуре всемирной паутины, позицию в стеке протоколов.</dd> + <dt><a href="/en-US/docs/Web/HTTP/Basics_of_HTTP/Evolution_of_HTTP">Эволюция HTTP</a></dt> + <dd>HTTP был создан в начале 1990-х годов и несколько раз был расширен. Эта статья даёт обзор его истории и описывает HTTP/0.9, HTTP/1.0, HTTP/1.1, и современный HTTP/2, а также незначительные нововведения представленные в последние несколько лет.</dd> + <dt><a href="https://wiki.developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Negotiating_an_HTTP_version">Обсуждение версии HTTP</a></dt> + <dd>Описывает, как клиент и сервер могут договориться о конкретной версии HTTP и в конечном счете перейти на более новую версию протокола. </dd> + <dt><a href="/en-US/docs/Web/HTTP/Resources_and_URIs">Resources and URIs</a></dt> + <dd>A brief introduction of the notion of resources, identifiers, and locations on the Web.</dd> + <dt><a href="/en-US/docs/Web/HTTP/Basics_of_HTTP/Identifying_resources_on_the_Web">Identifying resources on the Web</a></dt> + <dd>Describes how Web resources are referenced and how to locate them.</dd> + <dt><a href="/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URIs">Data URIs</a></dt> + <dd>A specific kind of URIs that directly embeds the resource it represents. Data URIs are very convenient, but have some caveats.</dd> + <dt>Separating identity and location of a resource: the Alt-Svc HTTP header</dt> + <dd>Most of the time identity and location of a Web resource are shared, this can be changed with the {{HTTPHeader("Alt-Svc")}} header.</dd> + <dt><a href="/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types">MIME types</a></dt> + <dd>Since HTTP/1.0, different types of content can be transmitted. This article explains how this is done using the {{HTTPHeader("Content-Type")}} header and the MIME standard.</dd> + <dt><a href="/en-US/docs/Web/HTTP/Basics_of_HTTP/Choosing_between_www_and_non-www_URLs">Choosing between www and non-www URLs</a></dt> + <dd>Advice on using a www-prefixed domain or not, this article explains the consequences of the choice as well as how to make it.</dd> + <dt>Flow of an HTTP session</dt> + <dd>This fundamental article describes a typical HTTP session: what happens under the hood when you click on a link in your browser…</dd> + <dt><a href="/en-US/docs/Web/HTTP/Messages">HTTP Messages</a></dt> + <dd>HTTP Messages transmitted during requests or responses have a very clear structure; this introductory article describes this structure, its purpose and its possibilities.</dd> + <dt>Frame and message structure in HTTP/2</dt> + <dd>HTTP/2 encapsulates and represents HTTP/1.x messages in a binary frame. This article explains the frame structure, its purpose and the way it is encoded.</dd> + <dt><a href="/en-US/docs/Web/HTTP/Connection_management_in_HTTP_1.x">Connection management in HTTP/1.x</a></dt> + <dd>HTTP/1.1 was the first version of HTTP to support persistent connection and pipelining. This article explains these two concepts.</dd> + <dt>Connection management in HTTP/2</dt> + <dd>HTTP/2 completely revisited how connections are created and maintained: this article explains how HTTP frames allow multiplexing and solve the 'head-of-line' blocking problem of former HTTP versions.</dd> + <dt><a href="/en-US/docs/Web/HTTP/Content_negotiation">Content Negotiation</a></dt> + <dd>HTTP introduces a set of headers, starting with <code>Accept-</code> as a way for a browser to announce the format, language, or encoding it prefers. This article explains how this advertisement happens, how the server is expected to react and how it will choose the most adequate response.</dd> +</dl> + +<div id="gtx-trans" style="position: absolute; left: 5px; top: 437px;"> +<div class="gtx-trans-icon"></div> +</div> diff --git a/files/ru/web/http/basics_of_http/mime_types/common_types/index.html b/files/ru/web/http/basics_of_http/mime_types/common_types/index.html new file mode 100644 index 0000000000..1b9703c33d --- /dev/null +++ b/files/ru/web/http/basics_of_http/mime_types/common_types/index.html @@ -0,0 +1,394 @@ +--- +title: Неполный список типов MIME +slug: Web/HTTP/Basics_of_HTTP/MIME_types/Common_types +tags: + - HTTP + - Справка + - Типы MIME +translation_of: Web/HTTP/Basics_of_HTTP/MIME_types/Common_types +--- +<div>{{HTTPSidebar}}</div> + +<div>Здесь представлен исчерпывающий список типов MIME, соотнесенных с типами документов и отсортированных по расширению.</div> + +<div></div> + +<div>Два ключевых типа MIME, использующихся в качестве типов по умолчанию:</div> + +<div> +<ul> + <li><code>text/plain</code> является типом по умолчанию для текстовых файлов. Текстовый файл должен быть читаемым человеком и не должен содержать в себе бинарную информацию.</li> + <li><code>application/octet-stream</code> является типом по умолчанию для всех остальных случаев. Нужно использовать этот тип, если тип файла неизвестен. Браузеры уделяют дополнительное внимание при работе с данным типом файлов для предотвращения вредоносного поведения.</li> +</ul> +</div> + +<p>IANA является официальным регистром типов MIME и поддерживает их <a href="http://www.iana.org/assignments/media-types/media-types.xhtml">официальный список</a>. В данной таблице представлен список типов, наиболее важных для Web:</p> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">Расширение</th> + <th scope="col">Тип документа</th> + <th scope="col">Тип MIME</th> + </tr> + </thead> + <tbody> + <tr> + <td><code>.aac</code></td> + <td>AAC audio</td> + <td><code>audio/aac</code></td> + </tr> + <tr> + <td><code>.abw</code></td> + <td><a href="https://en.wikipedia.org/wiki/AbiWord">AbiWord</a> document</td> + <td><code>application/x-abiword</code></td> + </tr> + <tr> + <td><code>.arc</code></td> + <td>Archive document (multiple files embedded)</td> + <td><code>application/x-freearc</code></td> + </tr> + <tr> + <td><code>.avi</code></td> + <td>AVI: Audio Video Interleave</td> + <td><code>video/x-msvideo</code></td> + </tr> + <tr> + <td><code>.azw</code></td> + <td>Amazon Kindle eBook format</td> + <td><code>application/vnd.amazon.ebook</code></td> + </tr> + <tr> + <td><code>.bin</code></td> + <td>Any kind of binary data</td> + <td><code>application/octet-stream</code></td> + </tr> + <tr> + <td><code>.bmp</code></td> + <td>Windows OS/2 Bitmap Graphics</td> + <td><code>image/bmp</code></td> + </tr> + <tr> + <td><code>.bz</code></td> + <td>BZip archive</td> + <td><code>application/x-bzip</code></td> + </tr> + <tr> + <td><code>.bz2</code></td> + <td>BZip2 archive</td> + <td><code>application/x-bzip2</code></td> + </tr> + <tr> + <td><code>.csh</code></td> + <td>C-Shell script</td> + <td><code>application/x-csh</code></td> + </tr> + <tr> + <td><code>.css</code></td> + <td>Cascading Style Sheets (CSS)</td> + <td><code>text/css</code></td> + </tr> + <tr> + <td><code>.csv</code></td> + <td>Comma-separated values (CSV)</td> + <td><code>text/csv</code></td> + </tr> + <tr> + <td><code>.doc</code></td> + <td>Microsoft Word</td> + <td><code>application/msword</code></td> + </tr> + <tr> + <td><code>.docx</code></td> + <td>Microsoft Word (OpenXML)</td> + <td><code>application/vnd.openxmlformats-officedocument.wordprocessingml.document</code></td> + </tr> + <tr> + <td><code>.eot</code></td> + <td>MS Embedded OpenType fonts</td> + <td><code>application/vnd.ms-fontobject</code></td> + </tr> + <tr> + <td><code>.epub</code></td> + <td>Electronic publication (EPUB)</td> + <td><code>application/epub+zip</code></td> + </tr> + <tr> + <td><code>.gz</code></td> + <td>GZip Compressed Archive</td> + <td><code>application/gzip</code></td> + </tr> + <tr> + <td><code>.gif</code></td> + <td>Graphics Interchange Format (GIF)</td> + <td><code>image/gif</code></td> + </tr> + <tr> + <td><code>.htm<br> + .html</code></td> + <td>HyperText Markup Language (HTML)</td> + <td><code>text/html</code></td> + </tr> + <tr> + <td><code>.ico</code></td> + <td>Icon format</td> + <td><code>image/vnd.microsoft.icon</code></td> + </tr> + <tr> + <td><code>.ics</code></td> + <td>iCalendar format</td> + <td><code>text/calendar</code></td> + </tr> + <tr> + <td><code>.jar</code></td> + <td>Java Archive (JAR)</td> + <td><code>application/java-archive</code></td> + </tr> + <tr> + <td><code>.jpeg</code><br> + <code>.jpg</code></td> + <td>JPEG images</td> + <td><code>image/jpeg</code></td> + </tr> + <tr> + <td><code>.js</code></td> + <td>JavaScript</td> + <td><code>text/javascript</code></td> + </tr> + <tr> + <td><code>.json</code></td> + <td>JSON format</td> + <td><code>application/json</code></td> + </tr> + <tr> + <td><code>.jsonld</code></td> + <td>JSON-LD format</td> + <td><code>application/ld+json</code></td> + </tr> + <tr> + <td><code>.mid</code><br> + <code>.midi</code></td> + <td>Musical Instrument Digital Interface (MIDI)</td> + <td><code>audio/midi</code> <code>audio/x-midi</code></td> + </tr> + <tr> + <td><code>.mjs</code></td> + <td>JavaScript module</td> + <td><code>text/javascript</code></td> + </tr> + <tr> + <td><code>.mp3</code></td> + <td>MP3 audio</td> + <td><code>audio/mpeg</code></td> + </tr> + <tr> + <td><code>.mpeg</code></td> + <td>MPEG Video</td> + <td><code>video/mpeg</code></td> + </tr> + <tr> + <td><code>.mpkg</code></td> + <td>Apple Installer Package</td> + <td><code>application/vnd.apple.installer+xml</code></td> + </tr> + <tr> + <td><code>.odp</code></td> + <td>OpenDocument presentation document</td> + <td><code>application/vnd.oasis.opendocument.presentation</code></td> + </tr> + <tr> + <td><code>.ods</code></td> + <td>OpenDocument spreadsheet document</td> + <td><code>application/vnd.oasis.opendocument.spreadsheet</code></td> + </tr> + <tr> + <td><code>.odt</code></td> + <td>OpenDocument text document</td> + <td><code>application/vnd.oasis.opendocument.text</code></td> + </tr> + <tr> + <td><code>.oga</code></td> + <td>OGG audio</td> + <td><code>audio/ogg</code></td> + </tr> + <tr> + <td><code>.ogv</code></td> + <td>OGG video</td> + <td><code>video/ogg</code></td> + </tr> + <tr> + <td><code>.ogx</code></td> + <td>OGG</td> + <td><code>application/ogg</code></td> + </tr> + <tr> + <td><code>.opus</code></td> + <td>Opus audio</td> + <td><code>audio/opus</code></td> + </tr> + <tr> + <td><code>.otf</code></td> + <td>OpenType font</td> + <td><code>font/otf</code></td> + </tr> + <tr> + <td><code>.png</code></td> + <td>Portable Network Graphics</td> + <td><code>image/png</code></td> + </tr> + <tr> + <td><code>.pdf</code></td> + <td>Adobe <a href="https://acrobat.adobe.com/us/en/why-adobe/about-adobe-pdf.html">Portable Document Format</a> (PDF)</td> + <td><code>application/pdf</code></td> + </tr> + <tr> + <td><code>.php</code></td> + <td>Hypertext Preprocessor (<strong>Personal Home Page</strong>)</td> + <td><code>application/php</code></td> + </tr> + <tr> + <td><code>.ppt</code></td> + <td>Microsoft PowerPoint</td> + <td><code>application/vnd.ms-powerpoint</code></td> + </tr> + <tr> + <td><code>.pptx</code></td> + <td>Microsoft PowerPoint (OpenXML)</td> + <td><code>application/vnd.openxmlformats-officedocument.presentationml.presentation</code></td> + </tr> + <tr> + <td><code>.rar</code></td> + <td>RAR archive</td> + <td><code>application/vnd.rar</code></td> + </tr> + <tr> + <td><code>.rtf</code></td> + <td>Rich Text Format (RTF)</td> + <td><code>application/rtf</code></td> + </tr> + <tr> + <td><code>.sh</code></td> + <td>Bourne shell script</td> + <td><code>application/x-sh</code></td> + </tr> + <tr> + <td><code>.svg</code></td> + <td>Scalable Vector Graphics (SVG)</td> + <td><code>image/svg+xml</code></td> + </tr> + <tr> + <td><code>.swf</code></td> + <td><a href="https://en.wikipedia.org/wiki/SWF">Small web format</a> (SWF) or Adobe Flash document</td> + <td><code>application/x-shockwave-flash</code></td> + </tr> + <tr> + <td><code>.tar</code></td> + <td>Tape Archive (TAR)</td> + <td><code>application/x-tar</code></td> + </tr> + <tr> + <td><code>.tif<br> + .tiff</code></td> + <td>Tagged Image File Format (TIFF)</td> + <td><code>image/tiff</code></td> + </tr> + <tr> + <td><code>.ts</code></td> + <td>MPEG transport stream</td> + <td><code>video/mp2t</code></td> + </tr> + <tr> + <td><code>.ttf</code></td> + <td>TrueType Font</td> + <td><code>font/ttf</code></td> + </tr> + <tr> + <td><code>.txt</code></td> + <td>Text, (generally ASCII or ISO 8859-<em>n</em>)</td> + <td><code>text/plain</code></td> + </tr> + <tr> + <td><code>.vsd</code></td> + <td>Microsoft Visio</td> + <td><code>application/vnd.visio</code></td> + </tr> + <tr> + <td><code>.wav</code></td> + <td>Waveform Audio Format</td> + <td><code>audio/wav</code></td> + </tr> + <tr> + <td><code>.weba</code></td> + <td>WEBM audio</td> + <td><code>audio/webm</code></td> + </tr> + <tr> + <td><code>.webm</code></td> + <td>WEBM video</td> + <td><code>video/webm</code></td> + </tr> + <tr> + <td><code>.webp</code></td> + <td>WEBP image</td> + <td><code>image/webp</code></td> + </tr> + <tr> + <td><code>.woff</code></td> + <td>Web Open Font Format (WOFF)</td> + <td><code>font/woff</code></td> + </tr> + <tr> + <td><code>.woff2</code></td> + <td>Web Open Font Format (WOFF)</td> + <td><code>font/woff2</code></td> + </tr> + <tr> + <td><code>.xhtml</code></td> + <td>XHTML</td> + <td><code>application/xhtml+xml</code></td> + </tr> + <tr> + <td><code>.xls</code></td> + <td>Microsoft Excel</td> + <td><code>application/vnd.ms-excel</code></td> + </tr> + <tr> + <td><code>.xlsx</code></td> + <td>Microsoft Excel (OpenXML)</td> + <td><code>application/vnd.openxmlformats-officedocument.spreadsheetml.sheet</code></td> + </tr> + <tr> + <td><code>.xml</code></td> + <td><code>XML</code></td> + <td><code>application/xml </code>if <em>not</em> readable from casual users (<a href="https://tools.ietf.org/html/rfc3023#section-3">RFC 3023</a>, section 3)<br> + <code>text/xml</code> if readable from casual users (<a href="https://tools.ietf.org/html/rfc3023#section-3">RFC 3023</a>, section 3)</td> + </tr> + <tr> + <td><code>.xul</code></td> + <td>XUL</td> + <td><code>application/vnd.mozilla.xul+xml</code></td> + </tr> + <tr> + <td><code>.zip</code></td> + <td>ZIP archive</td> + <td><code>application/zip</code></td> + </tr> + <tr> + <td><code>.3gp</code></td> + <td><a href="https://en.wikipedia.org/wiki/3GP_and_3G2">3GPP</a> audio/video container</td> + <td><code>video/3gpp</code><br> + <code>audio/3gpp</code> if it doesn't contain video</td> + </tr> + <tr> + <td><code>.3g2</code></td> + <td><a href="https://en.wikipedia.org/wiki/3GP_and_3G2">3GPP2</a> audio/video container</td> + <td><code>video/3gpp2</code><br> + <code>audio/3gpp2</code> if it doesn't contain video</td> + </tr> + <tr> + <td><code>.7z</code></td> + <td><a href="https://en.wikipedia.org/wiki/7-Zip">7-zip</a> archive</td> + <td><code>application/x-7z-compressed</code></td> + </tr> + </tbody> +</table> diff --git a/files/ru/web/http/basics_of_http/mime_types/index.html b/files/ru/web/http/basics_of_http/mime_types/index.html new file mode 100644 index 0000000000..e368e2a496 --- /dev/null +++ b/files/ru/web/http/basics_of_http/mime_types/index.html @@ -0,0 +1,318 @@ +--- +title: MIME types +slug: Web/HTTP/Basics_of_HTTP/MIME_types +tags: + - HTTP +translation_of: Web/HTTP/Basics_of_HTTP/MIME_types +--- +<p><strong>Медиа тип </strong>(так же известный как <strong>Multipurpose Internet Mail Extensions </strong>или <strong>MIME тип)</strong> является стандартом, который описывает природу и формат документа, файла или набора байтов. Он определён и стандартизирован в спецификации {{RFC(6838)}} .</p> + +<p>Организация <a href="https://www.iana.org/">Internet Assigned Numbers Authority (IANA)</a> является ответственной за все официально признанные MIME типы, и вы можете найти самый последний и полный лист MIME типов на их странице <a href="https://www.iana.org/assignments/media-types/media-types.xhtml">Медиа Типов</a>.</p> + +<div class="warning"> +<p><strong>Важно:</strong> Для принятия решения о том, как обрабатывать URL, браузеры используют MIME типы, <em>а не расширения файлов</em>, так что серверам необходимо отправлять правильные MIME типы в {{HTTPHeader("Content-Type")}} заголовке ответа. При неточном задавании этого заголовка, браузеры с большой вероятностью будут неправильно интерпретировать и обрабатывать содержание файлов, из-за чего сайт будет работать неверно.</p> +</div> + +<h2 id="Структура_MIME_типа"><strong>Структура MIME типа</strong></h2> + +<p>Простейший MIME тип состоит из<em> типа</em> и<em> подтипа</em> — двух строк разделённых наклонной чертой (<code>/</code>), без использования пробелов.</p> + +<pre class="syntaxbox"><var>тип</var>/<var>подтип</var></pre> + +<p><em><strong>Тип</strong> </em>представляет общую категорию, в которой находится тип данных, например <code>video</code> или <code>text</code>.<em> <strong>Подтип</strong></em> же строго отождествляется с отдельным типом данных, представляемых данным MIME типом. Например, для MIME типа <code>text</code>, подтипы могут быть <code>plain</code> (простой текст), <code>html</code> ({{Glossary("HTML")}} source code) или <code>calendar</code> (для iCalendar/<code>.</code><code>ics</code>).</p> + +<p>Необязательный <strong>параметр</strong> может быть добавлен для указания дополнительных деталей</p> + +<pre class="syntaxbox"><var>тип</var>/<var>подтип</var>;<var>параметр</var>=<var>значение</var></pre> + +<p>Например, для MIME типов катогории<var> </var><code>text</code>, необязательный параметр <code>charset</code> может быть задан для уточнения кодировки, используемой в документе. Для объявления, что пересылаемый файл имеет кодировку UTF-8, необходимо использовать MIME тип <code>text/plain;charset=UTF-8</code>. При не указании параметра <code>charset</code>, его значение автоматически будет задано, как {{Glossary("ASCII")}} (<code>US</code><code>-</code><code>ASCII</code>), если в настройках браузера не будет определено иначе.</p> + +<p>MIME типы являются нечувствительными к регистру, но традиционно их пишут строчными буквами, за исключением значений параметров.</p> + +<h3 id="Типы">Типы</h3> + +<p>Все типы можно разделить на два класса: <strong>дискретные</strong> и <strong>многокомпонентные. </strong>Дискретные типы представляют одиночные файлы, например, одиночный текстовый, музыкальный или видео файл. Многокомпонентные типы представляют документы, составленные из нескольких частей, каждая из которых может иметь свой отдельный MIME тип, или они могут заключать в себе несколько отдельных файлов, передаваемых в одном сообщении. Например, многокомпонентные MIME типы используются для передачи нескольких изображений в одном email.</p> + +<h4 id="Дискретные_типы"><strong>Дискретные типы</strong></h4> + +<p>В настоящее время на IANA зарегистрированы следующие дискретные типы:</p> + +<dl> + <dt><code>application</code> <a href="https://www.iana.org/assignments/media-types/media-types.xhtml#application" style="float: right;">Список IANA</a></dt> + <dd>Любой вид бинарных данных, явно не попадающих ни в одну другу группу типов. Данные, которые будут выполняться или как-либо интерпретироваться, или данные для выполнения, которых необходимо отдельное приложение. Для указания базового типа бинарных данных (данных без определённого типа) используют тип <code>application/octet-stream</code>. Другие распространённые примеры включают <code>application/pdf</code>, <code>application/pkcs8</code> и <code>application/zip</code>.</dd> + <dt><code>audio</code> <a href="https://www.iana.org/assignments/media-types/media-types.xhtml#audio" style="float: right;">Список IANA</a></dt> + <dd>Аудио или музыкальные данные. Примеры: <code>audio/mpeg</code>, <code>audio/vorbis</code>.</dd> + <dt><code>example</code></dt> + <dd>Тип, зарезервированный для написания примеров, отображающих использование MIME типов. Этот тип никогда не должен использоваться вне примеров кода или документации. <code>example</code> может так же использоваться, как подтип.</dd> + <dt><code>font</code> <a href="https://www.iana.org/assignments/media-types/media-types.xhtml#font" style="float: right;">Список IANA</a></dt> + <dd>Данные шрифтов. Распространённые примеры включают <code>font</code><code>/</code><code>woff</code>, <code>font</code><code>/</code><code>ttf</code> и <code>font</code><code>/</code><code>otf</code>.</dd> + <dt><code>image</code> <a href="https://www.iana.org/assignments/media-types/media-types.xhtml#image" style="float: right;">Список IANA</a></dt> + <dd>Изображения или графические данные, включая векторную и растровую графику, а так же анимированные версии форматов неподвижных изображений, таких как <a href="https://developer.mozilla.org/en-US/docs/Glossary/GIF" title="GIF: GIF (Graphics Interchange Format) is an image format that uses lossless compression and can be used for animations. A GIF uses up to 8 bits per pixel and a maximum of 256 colors from the 24-bit color space.">GIF</a> или APNG. Распространённые примеры включают <code>image/</code><code>jpeg</code>, <code>image</code><code>/</code><code>png</code> и <code>image</code><code>/</code><code>svg</code><code>+</code><code>xml</code>.</dd> + <dt><code>model</code> <a href="https://www.iana.org/assignments/media-types/media-types.xhtml#model" style="float: right;">Список IANA</a></dt> + <dd>Данные моделей для 3D объектов или сцен. Примеры: <code>model/3mf</code> и <code>model/vml</code>.</dd> + <dt><code>text</code> <a href="https://www.iana.org/assignments/media-types/media-types.xhtml#text" style="float: right;">Список IANA</a></dt> + <dd>Любые текстовые данные, так или иначе доступные для чтения человеку, а так же исходный код или текстовые данные для программ. Примеры: <code>text</code><code>/</code><code>plain</code>, <code>text</code><code>/</code><code>csv</code> и <code>text</code><code>/</code><code>html</code>.</dd> + <dt><code>video</code> <a href="https://www.iana.org/assignments/media-types/media-types.xhtml#video" style="float: right;">Список IANA</a></dt> + <dd>Видео данные или файлы. Например, MP4 фильмы (<code>video</code><code>/</code><code>mp</code><code>4</code>).</dd> +</dl> + +<p>Любые текстовые документы без определённого подтипа стоит отправлять, как <code>text/plain</code> тип. Аналогичным образом, <code>application/octet-stream</code> тип подойдёт бинарным документам при неопределённом или неизвестном подтипе.</p> + +<h4 id="Многокомпонентные_типы">Многокомпонентные типы</h4> + +<p><em>Многокомпонентные</em> типы описывают категории разграниченных на части документов, где каждая из частей может иметь свой отдельный MIME тип. При работе с электронными письмами, они могут использоваться для описания нескольких отдельных файлов, передаваемых в одном сообщении. Они представляют <strong>составные документы</strong>.</p> + +<p>За исключением <code>multipart/form-data</code> типа, используемого в {{HTTPMethod("POST")}} методе <a href="https://wiki.developer.mozilla.org/en-US/docs/Web/Guide/HTML/Forms">HTML форм</a>, и <code>multipart/byteranges</code> типа, используемом в ответе {{HTTPStatus("206")}} <code>Partial Content</code> для отправки части документа, HTTP никаким особым образом не обрабатывает многокомпонентные типы, и просто отправляет данные в браузер (который, с большой вероятностью, предложит сохранить переданный файл, тоже не зная как его обработать).</p> + +<p>Существуют два многокомпонентных типа:</p> + +<dl> + <dt><code>message</code> <a href="https://www.iana.org/assignments/media-types/media-types.xhtml#message" style="float: right;">Список IANA</a></dt> + <dd>Сообщение, включающее в себя другие сообщения. Этот тип может использоваться, например, для представления сообщения, которое включают в себя другое переадресованное сообщение, как часть данных, или для отправки больших сообщений по частям, как если бы каждое сообщение отправлялось отдельно. Примеры включают <code>message</code><code>/</code><code>rfc</code><code>822</code> (для переадресованных или цитируемых сообщений) и <code>message</code><code>/</code><code>partial</code> для автоматического разделения одного большого сообщения на несколько небольших и их последующей сборки на стороне получателя.</dd> + <dt><code>multipart</code> <a href="https://www.iana.org/assignments/media-types/media-types.xhtml#multipart" style="float: right;">Список IANA</a></dt> + <dd>Данные составленные из нескольких компонентов, каждый из которых может иметь отдельный MIME тип. Примеры включают <code>multipart</code><code>/</code><code>form</code><code>-</code><code>data</code> (для данных созданных с помощью {{domxref("FormData")}} API) и <code>multipart</code><code>/</code><code>byteranges</code> (определённого в {{RFC(7233, "5.4.1")}} и используемого в ответах {{Glossary("HTTP")}} {{HTTPStatus(206)}} "Partial Content", когда запрашиваемые данные возвращаются по частям в нескольких сообщениях, как например, при использовании заголовка {{HTTPHeader("Range")}}).</dd> +</dl> + +<h2 id="Важные_для_Web-разработчиков_MIME_типы"><strong>Важные для Web-разработчиков MIME типы</strong></h2> + +<h3 id="applicationoctet-stream">application/octet-stream</h3> + +<p>Этот тип является базовым для бинарных данных. В связи с тем, что он подразумевает<em> неопределённые бинарные</em> данные, браузеры, как правило, не будут пытаться его обработать каком-либо образом, а вызовут для него диалоговое окно «Сохранить Как», как если бы заголовок ответа {{HTTPHeader("Content-Disposition")}} имел значение <code>attachment</code>.</p> + +<h3 id="textplain">text/plain</h3> + +<p>Этот тип является базовым для текстовых файлов. Несмотря на то, что он означает "неопределённые текстовые данные", браузеры всё равно могут его отображать.</p> + +<div class="note"> +<p><strong>Заметьте:</strong> <code>text/plain</code> не означает "любой вид текстовых данных". Если браузер ожидает получения какого-то конкретного типа текстовых данных, то с большой вероятностью он не будет считать <code>text/plain</code> подходящим типом. Например, при загрузке <code>text/plain</code> документа через {{HTMLElement("link")}} элемент, браузер не будет его признать правильным CSS файлом и использовать для применения стилей. Только <code>text/css</code> тип должен использоваться для загрузки CSS документов.</p> +</div> + +<h3 id="textcss">text/css</h3> + +<p>CSS документы, используемые для стилизации web-страниц <strong>должны</strong> отправляться, как <code>text/css</code> тип. Большинство браузеров не смогут распознавать CSS документы, загруженные с отличным от <code>text/css</code> MIME типом.</p> + +<h3 id="texthtml">text/html</h3> + +<p>Все HTML данные должны пересылаться с данным типом. Альтернативные MIME типы для XHTML (например, <code>application/xhtml+xml</code>) почти не используются в настоящее время.</p> + +<div class="note"> +<p><strong>Заметьте:</strong> Используйте <code>application/xml</code> или <code>application/xhtml+xml</code>, когда вам необходим строгий синтаксический анализ документов, разделы <code><a href="https://wiki.developer.mozilla.org/en-US/docs/Web/API/CDATASection"><![CDATA[…]]></a></code> или элементы, не принадлежащие к пространствам имён HTML/SVG/MathML.</p> +</div> + +<h3 id="textjavascript">text/javascript</h3> + +<p>Согласно HTML спецификации: при пересылке JavaScript файлов, всегда должен использоваться MIME тип <code>text/javascript</code>.</p> + +<p>По исторически сложившимся причинам, <a href="https://mimesniff.spec.whatwg.org/">MIME Sniffing Standard</a> (стандарт, определяющий, как браузеры должны интерпретировать медиа типы и выяснять, как обрабатывать данные при неправильно заданных медиа типах) позволяет серверам отправлять JavaScript документы, используя один из нижеперечисленных типов:</p> + +<ul> + <li><code>application/javascript</code></li> + <li><code>application/ecmascript</code></li> + <li><code>application/x-ecmascript</code> {{Non-standard_Inline}}</li> + <li><code>application/x-javascript</code> {{Non-standard_Inline}}</li> + <li><code>text/javascript</code></li> + <li><code>text/ecmascript</code></li> + <li><code>text/javascript1.0</code> {{Non-standard_Inline}}</li> + <li><code>text/javascript1.1</code> {{Non-standard_Inline}}</li> + <li><code>text/javascript1.2</code> {{Non-standard_Inline}}</li> + <li><code>text/javascript1.3</code> {{Non-standard_Inline}}</li> + <li><code>text/javascript1.4</code> {{Non-standard_Inline}}</li> + <li><code>text/javascript1.5</code> {{Non-standard_Inline}}</li> + <li><code>text/jscript</code> {{Non-standard_Inline}}</li> + <li><code>text/livescript</code> {{Non-standard_Inline}}</li> + <li><code>text/x-ecmascript</code> {{Non-standard_Inline}}</li> + <li><code>text/x-javascript</code> {{Non-standard_Inline}}</li> +</ul> + +<div class="blockIndicator note"> +<p><strong>Заметьте:</strong> Несмотря на то, что некоторые {{Glossary("user agent")}} могут поддерживать какие-то из вышеперечисленных типов, вы всегда должны использовать <code>text</code><code>/</code><code>javascript</code>. Это единственный MIME тип, который гарантированно будет работать в настоящее время и в будущем.</p> +</div> + +<p>Иногда вы можете заметить использование <code>text/javascript</code> MIME типа в связке с параметром <code>charset</code>, для уточнения кодировки, в которой был написан файл. Такое определение MIME типа является неправильным, и в большинстве случаев браузеры не станут загружать скрипт, передаваемый с таким типом.</p> + +<h3 id="Типы_изображений">Типы изображений</h3> + +<p>Файлы, MIME типом которых является <code>image</code>, содержат в себе данные изображений. Подтип определяет, какой конкретный формат изображения представлен в данных.</p> + +<p>Лишь несколько типов изображений достаточно распространены, чтобы безопасно использоваться на веб-страницах.</p> + +<p>{{page("ru/docs/Web/Media/Formats/Image_types", "table-of-image-file-types")}}</p> + +<h3 id="Аудио_и_видео_типы">Аудио и видео типы</h3> + +<p>Так же как в случае с изображениями, стандарт HTML не обязывает браузеры поддерживать какие-либо определённые форматы и кодеки для {{HTMLElement("audio")}} и {{HTMLElement("video")}} элементов, так что при их выборе, важно брать в расчёт целевую аудиторию и диапазон браузеров (а так же версии этих браузеров), которые она может использовать.</p> + +<p>Наше <a href="https://developer.mozilla.org/ru/docs/Web/Media/Formats/Containers">руководство по медиа форматам</a> предоставляет список общепринятых типов, включая информацию об особых случаях при их использовании, их недостатках, совместимости, а так же других деталях.</p> + +<p>Руководства по <a href="https://developer.mozilla.org/en-US/docs/Web/Media/Formats/Audio_codecs">аудио</a> и <a href="https://developer.mozilla.org/en-US/docs/Web/Media/Formats/Video_codecs">видео</a> кодекам перечисляют часто поддерживаемые браузерами кодеки, предоставляя детали по их совместимости и техническую информацию, например как много аудио каналов они поддерживают, какой тип сжатия используют, и так далее. Руководство по <a href="https://developer.mozilla.org/en-US/docs/Web/Media/Formats/WebRTC_codecs">используемым в WebRTC кодекам</a> развивает эту тему ещё дальше, конкретно описывая кодеки, поддерживаемые популярными браузерами, так чтобы вы могли выбрать кодеки, которые имеют наилучшую поддержку в диапазоне браузеров по вашему выбору.</p> + +<p>Что касается MIME типов для аудио и видео файлов, то чаще всего они указывают на формат контейнера (тип файла). Необязательный <a href="https://developer.mozilla.org/en-US/docs/Web/Media/Formats/codecs_parameter">параметр <code>codecs</code></a> может быть добавлен к MIME типу для более точного указания, какой кодек и параметры использовались для пересылаемого файла.</p> + +<p>Ниже перечислены наиболее часто используемые на веб-страницах MIME типы. Обратите внимание, что это не полный перечень всех доступных типов. Более полный список поддерживаемых форматов может быть наеден в <a href="https://developer.mozilla.org/en-US/docs/Web/Media/Formats/Containers">руководстве по медиа форматам</a>.</p> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">MIME тип</th> + <th scope="col">Аудио или видео тип</th> + </tr> + </thead> + <tbody> + <tr> + <td><code>audio/wave</code><br> + <code>audio/wav</code><br> + <code>audio/x-wav</code><br> + <code>audio/x-pn-wav</code></td> + <td>Аудио файл WAVE формата. С PCM аудио кодеком (WAVE кодек "1"), считающимся наиболее поддерживаемым, а так же другими, имеющими ограниченную поддержку.</td> + </tr> + <tr> + <td><code>audio/webm</code></td> + <td>Аудио файл формата WebM. С Vorbis и Opus официально поддерживаемыми WebM спецификацией аудио кодеками.</td> + </tr> + <tr> + <td><code>video/webm</code></td> + <td>Видео файл, с возможной аудио дорожкой, формата WebM. С VP8 и VP9, как наиболее распространёнными видео кодеками; Vorbis и Opus, как наиболее распространёнными аудио кодеками.</td> + </tr> + <tr> + <td><code>audio/ogg</code></td> + <td>Аудио файл формата OGG. С Vorbis, как наиболее распространённым аудио кодеком. Хотя на данный момент имеется поддержка и Opus кодека.</td> + </tr> + <tr> + <td><code>video/ogg</code></td> + <td>Видео файл, с возможной аудио дорожкой, в формате OGG. Где Theora – наиболее часто встречающийся видео кодек и Vorbis - наиболее часто встречающийся аудио кодек. Хотя использование кодека Opus становится всё более распространённым.</td> + </tr> + <tr> + <td><code>application/ogg</code></td> + <td>Аудио или видео формата OGG. Где Theora – наиболее часто встречающийся видео кодек и Vorbis - наиболее часто встречающийся аудио кодек.</td> + </tr> + </tbody> +</table> + +<h3 id="multipartform-data">multipart/form-data</h3> + +<p><code>multipart/form-data</code> тип может быть использован при отправке значений из заполненной <a href="https://wiki.developer.mozilla.org/ru/docs/Web/Guide/HTML/Forms">HTML Формы</a> на сервер.</p> + +<p>Как многокомпонентный тип документа, он состоит из различных частей, разделённых специальной границей (строкой, начинающейся с двух чёрточек <code>--</code>), где каждая часть представляет собой отдельную сущность и имеет отдельные HTTP заголовки {{HTTPHeader("Content-Disposition")}} и {{HTTPHeader("Content-Type")}} для загружаемых файлов.</p> + +<pre class="syntaxbox">Content-Type: multipart/form-data; boundary=aBoundaryString +(other headers associated with the multipart document as a whole) + +--aBoundaryString +Content-Disposition: form-data; name="myFile"; filename="img.jpg" +Content-Type: image/jpeg + +(data) +--aBoundaryString +Content-Disposition: form-data; name="myField" + +(data) +--aBoundaryString +(more subparts) +--aBoundaryString-- + +</pre> + +<p>Следующая форма <code><form></code>:</p> + +<pre class="brush: html"><form action="http://localhost:8000/" method="post" enctype="multipart/form-data"> + <label>Name: <input name="myTextField" value="Test"></label> + <label><input type="checkbox" name="myCheckBox"> Check</label> + <label>Upload file: <input type="file" name="myFile" value="test.txt"></label> + <button>Send the file</button> +</form></pre> + +<p>отправит сообщение:</p> + +<pre>POST / HTTP/1.1 +Host: localhost:8000 +User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:50.0) Gecko/20100101 Firefox/50.0 +Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 +Accept-Language: en-US,en;q=0.5 +Accept-Encoding: gzip, deflate +Connection: keep-alive +Upgrade-Insecure-Requests: 1 +Content-Type: multipart/form-data; boundary=---------------------------8721656041911415653955004498 +Content-Length: 465 + +-----------------------------8721656041911415653955004498 +Content-Disposition: form-data; name="myTextField" + +Test +-----------------------------8721656041911415653955004498 +Content-Disposition: form-data; name="myCheckBox" + +on +-----------------------------8721656041911415653955004498 +Content-Disposition: form-data; name="myFile"; filename="test.txt" +Content-Type: text/plain + +Simple file. +-----------------------------8721656041911415653955004498-- + +</pre> + +<h3 id="multipartbyteranges">multipart/byteranges</h3> + +<p><code>multipart/byteranges</code> MIME тип используется для отправки данных в браузер по частям.</p> + +<p>При отправке кода состояния {{HTTPStatus("206")}} <code>Partial Content</code>, этот MIME тип будет означать, что документ состоит из нескольких частей, по одной для каждого отдельно запрашиваемого диапазона. Аналогично с остальными многокомпонентными типами, заголовок {{HTTPHeader("Content-Type")}} используется для объявления границы <code>boundary</code>, разделяющей документ на отдельные компоненты. Каждый компонент имеет заголовок {{HTTPHeader("Content-Type")}}, описывающий тип сегмента данных, и {{HTTPHeader("Content-Range")}}, описывающий его диапазон.</p> + +<pre><code>HTTP/1.1 206 Partial Content +Accept-Ranges: bytes +Content-Type: multipart/byteranges; boundary=3d6b6a416f9b5 +Content-Length: 385 + +--3d6b6a416f9b5 +Content-Type: text/html +Content-Range: bytes 100-200/1270 + +eta http-equiv="Content-type" content="text/html; charset=utf-8" /> + <meta name="vieport" content +--3d6b6a416f9b5 +Content-Type: text/html +Content-Range: bytes 300-400/1270 + +-color: #f0f0f2; + margin: 0; + padding: 0; + font-family: "Open Sans", "Helvetica +--3d6b6a416f9b5--</code></pre> + +<h2 id="Важность_задания_правильного_MIME_типа"><strong>Важность задания правильного </strong><strong>MIME</strong> <strong>типа</strong></h2> + +<p>Большинство серверов отправляет ресурсы неопределённого типа, как <code>application/octet-stream</code> MIME тип. Большинство же браузеров, в целях безопасности, не позволяет их никак обрабатывать, вынуждая пользователя сохранять их на жёсткий диск, для дальнейшего использования.</p> + +<p>Несколько советов по правильной настройке MIME типов на серверах:</p> + +<ul> + <li>RAR-сжатые файлы. В этом случае самым правильным вариантом было бы задать тип изначального ресурса; но это не всегда выполнимо, так как .RAR файлы могут хранить в себе несколько типов данных. Тогда, настройте сервер на отправку <code>application/x-rar-compressed</code> MIME типа вместе с RAR ресурсами.</li> + <li>Аудио и видео. Только ресурсы с правильно заданными MIME типами могут производиться в {{HTMLElement("video")}} и {{HTMLElement("audio")}} элементах. Убедитесь, что вы <a href="https://wiki.developer.mozilla.org/en-US/docs/Web/HTML/Supported_media_formats">используете правильные типы для аудио и видео данных</a>.</li> + <li>Запатентованные типы файлов. Избегайте использования <code>application/octet-stream</code> при их отправке, так как большинство браузеров не позволит определять способы обработки (например, "Открыть в Word") для этого базового MIME типа. Используйте специальные типы, например <code>application/vnd.mspowerpoint</code>, чтобы позволить пользователям открывать загруженный ресурс в программе по их выбору.</li> +</ul> + +<h2 id="MIME_sniffing">MIME sniffing</h2> + +<p>В отсутствии заданного MIME типа, или в определённых случаях, когда браузеры полагают, что MIME тип задан неправильно, они могут выполнять <em>MIME<strong> </strong>sniffing</em> — попытку угадать правильный MIME тип, анализируя характеристики ресурса.</p> + +<p>Каждый браузер выполняет MIME sniffing по-своему и при разных условиях (например, Safari будет смотреть на расширение файла, если переданный MIME тип является неподходящим для документа). В этих случаях могут присутствовать опасения по поводу безопасности, так как некоторые MIME типы представляют исполняемые файлы. Сервера имеют возможность предотвращать MIME sniffing, отправляя {{HTTPHeader("X-Content-Type-Options")}} заголовок ответа.</p> + +<h2 id="Другие_методы_сообщения_о_типе_ресурса"><strong>Другие методы сообщения о типе ресурса</strong></h2> + +<p>MIME типы не являются единственным способом сообщения типа документа:</p> + +<ul> + <li>Суффиксы в названиях файлов могут указывать на тип документа, главным образом на Microsoft Windows. Но не все операционные системы могут считать их имеющими смысл (например, Linux или MacOS). А так же нет никакой гарантии, что они будут указывать на правильный тип.</li> + <li>Магические числа. Синтаксисы различных форматов позволяют узнавать их тип, через анализ их структуры байтов. Например, GIF файлы начинаются с <code>47 49 46 38 39</code> шестнадцатеричного значения (<code>GIF89</code>), а PNG файлы с <code>89 50 4E 47</code> (<code>.PNG</code>). Опять же, не все типы документов имеют магические числа, так что этот подход так же не надёжен на 100%.</li> +</ul> + +<h2 id="Смотрите_так_же">Смотрите так же</h2> + +<ul> + <li><a href="https://wiki.developer.mozilla.org/ru/docs/Web/Media">Медиа технологии в web</a></li> + <li><a href="https://wiki.developer.mozilla.org/ru/docs/Web/Media/Formats">Руководство по медиа типам и форматам в web</a></li> + <li> + <p><a href="https://wiki.developer.mozilla.org/ru/docs/Web/Security/Securing_your_site/Configuring_server_MIME_types">Настраивание MIME типов на стороне сервера</a></p> + </li> +</ul> + +<div>{{HTTPSidebar}}</div> |
