diff options
Diffstat (limited to 'files/ru/web/http/headers/set-cookie/index.html')
-rw-r--r-- | files/ru/web/http/headers/set-cookie/index.html | 193 |
1 files changed, 193 insertions, 0 deletions
diff --git a/files/ru/web/http/headers/set-cookie/index.html b/files/ru/web/http/headers/set-cookie/index.html new file mode 100644 index 0000000000..d7822a1790 --- /dev/null +++ b/files/ru/web/http/headers/set-cookie/index.html @@ -0,0 +1,193 @@ +--- +title: Set-Cookie +slug: Web/HTTP/Заголовки/Set-Cookie +translation_of: Web/HTTP/Headers/Set-Cookie +--- +<div> +<p>{{HTTPSidebar}}</p> + +<p>HTTP заголовок <strong><code>Set-Cookie</code></strong> используется для отправки cookies с сервера на агент пользователя.</p> + +<p>Для детальной информации, смотрите руководство по <a href="/en-US/docs/Web/HTTP/Cookies">HTTP cookies</a>.</p> + +<table> + <tbody> + <tr> + <th scope="row">Тип заголовка</th> + <td>{{Glossary("Response header")}}</td> + </tr> + <tr> + <th scope="row">{{Glossary("Forbidden header name")}}</th> + <td>нет</td> + </tr> + </tbody> +</table> + +<h2 id="Синтаксис">Синтаксис</h2> + +<pre class="notranslate">Set-Cookie: <cookie-name>=<cookie-value> +Set-Cookie: <cookie-name>=<cookie-value>; Expires=<date> +Set-Cookie: <cookie-name>=<cookie-value>; Max-Age=<non-zero-digit> +Set-Cookie: <cookie-name>=<cookie-value>; Domain=<domain-value> +Set-Cookie: <cookie-name>=<cookie-value>; Path=<path-value> +Set-Cookie: <cookie-name>=<cookie-value>; Secure +Set-Cookie: <cookie-name>=<cookie-value>; HttpOnly + +Set-Cookie: <cookie-name>=<cookie-value>; SameSite=Strict +Set-Cookie: <cookie-name>=<cookie-value>; SameSite=Lax +Set-Cookie: <cookie-name>=<cookie-value>; SameSite=None {{experimental_inline}} + +// Multiple directives are also possible, for example: +Set-Cookie: <cookie-name>=<cookie-value>; Domain=<domain-value>; Secure; HttpOnly +</pre> + +<h2 id="Директивы">Директивы</h2> + +<ul> + <li>По умолчанию - хост текущего URL документа, не включая поддомены</li> + <li>В текущей спецификация начальная точка в имени хоста игнорируется (<code>.example.com</code>)</li> + <li>Cookie будут отправляться также на поддомены указанного хоста</li> + <li>Указывать несколько хостов недопустимо.</li> +</ul> + +<ul> + <li>По умолчанию - хост текущего URL документа, не включая поддомены</li> + <li>В текущей спецификация начальная точка в имени хоста игнорируется (.example.com)</li> + <li>Cookie будут отправляться также на поддомены указанного хоста</li> + <li>Указывать несколько хостов недопустимо.</li> +</ul> + +<dl> + <dt><code><cookie-name>=<cookie-value></code></dt> + <dd>Cookie начинается с пары имя-значение: + <ul> + <li><code><cookie-name></code> может содержать любые символы US-ASCII, за исключением управляющих символов (CTLs), пробелов, или табуляций. Оно также не должно содержать разделительнных символов, таких как следующие: <code>( ) < > @ , ; : \ " / [ ] ? = { }</code>.</li> + <li><code><cookie-value></code> может быть опционально заключено в двойные кавычки, разрешены любые символы US-ASCII за исключением CTLs, пробела, двойных кавычек, запятой, точки с запятой, и обратного слэша. <strong>Кодирование:</strong> Многие реализации выполняют кодирование в значениях cookies, однако этого не требуется по спецификации RFC. Однако, это помогает удовлетворить требование о разрешенных символах в <cookie-value>.</li> + <li><strong><code>__Secure-</code> prefix</strong> {{non-standard_inline}}: Cookies с именем, начинающимся с <code> __Secure-</code> (подчеркивание является частью префикса ) должны быть установлены вместе с флагом secure, и должны быть с безопасной страницы (HTTPS).</li> + <li><strong><code>__Host-</code> prefix</strong> {{non-standard_inline}}: Cookies с именем, начинающимся с <code>__Host-</code> должны быть установлены с флагом secure <code>secure</code>, должны быть с безопасной страницы (HTTPS), не должны иметь определенный домен (и, следовательно, не не посылаются поддоменами), а также параметр Path должен быть "/".</li> + </ul> + </dd> + <dt><code>Expires=<date></code> {{optional_inline}}</dt> + <dd> + <p>Максимальное время жизни cookie в формате метки даты-времени HTTP. См. {{HTTPHeader("Date")}} о деталях формата Если не определен, cookie будет иметь время жизни <strong>сессионного cookie. </strong>Сессия окончена, когда клиент отключается, что приводит к удалению сессионных cookie в этот момент. Однако, многие браузеры имеют возможность, называемую восстановление сессии, которая сохраняет все ваши вкладки и затем возвращает их, когда вы в следующий раз запускаете браузер. Cookies будут также присутствовать, словно вы никогда не закрывали браузер.</p> + + <p>Когда установливается срок действия, время и дата устанавливаются не относитеьно сервера, а относительно клиента, на котором установлено cookie,</p> + </dd> + <dt><code>Max-Age=<number> </code>{{optional_inline}}</dt> + <dd>Количество секунд, после которого cookie устаревает. Ноль или отрицательное число приводят к моментальному устареванию cookie. Старые браузеры (ie6, ie7, and ie8) не поддерживают Max-Age. Для прочих браузеров, если оба параметра (<code>Expires</code> and <code>Max-Age</code>) установлены, <code>Max-Age</code> будет иметь преимущество.</dd> + <dt><code>Domain=<domain-value></code> {{optional_inline}}</dt> + <dd>Хост, на который будут отправляться cookie.<br> + <br> + По умолчанию - хост текущего URL документа, не включая поддомены<br> + В текущей спецификация начальная точка в имени хоста игнорируется (.example.com)<br> + Cookie будут отправляться также на поддомены указанного хоста<br> + Указывать несколько хостов недопустимо.</dd> + <dt><code>Path=<path-value></code> {{optional_inline}}</dt> + <dd>Путь, который должен существовать в запрошенном URL, иначе браузер не отправит заголовок Cookie.</dd> + <dd>Пример: <code>/</code> - cookie будет отправляться со всеми запросами<br> + Пример: <code>/docs/</code> - cookie будет отправляться с запросами к директории docs и ее поддиректориям</dd> + <dt><code>Secure</code> {{optional_inline}}</dt> + <dd>Cookie будет отправлен на сервер только с запросами c использованием SSL и протокола HTTPS.<br> + <br> + Cookie не будет дополнительно шифроваться, поэтому в нем не стоит хранить конфиденциальную инфомрацию.</dd> + <dd> + <p><strong>Note:</strong> небезопасные сайты (<code>http:</code>) не могут использовать cookie с атрибутом "secure" (начиная с Chrome 52+ и Firefox 52+).</p> + </dd> + <dt><code>HttpOnly</code> {{optional_inline}}</dt> + <dd>Запрещает JavaScript доступ к cookie</dd> + <dd>Полезно для защиы от XSS-атак.</dd> + <dt><code>SameSite=<samesite-value></code> {{optional_inline}}</dt> +</dl> + +<ul> + <li><code>Strict</code>: The browser sends the cookie only for same-site requests (that is, requests originating from the same site that set the cookie). If the request originated from a different URL than the current one, no cookies with the <code>SameSite=Strict</code> attribute are sent.</li> + <li><code>Lax</code>: The cookie is withheld on cross-site subrequests, such as calls to load images or frames, but is sent when a user navigates to the URL from an external site, such as by following a link</li> + <li><code>None</code>: The browser sends the cookie with both cross-site and same-site requests</li> +</ul> + +<dl> + <dd> + <p>Allows servers to assert that a cookie ought not to be sent along with cross-site requests, which provides some protection against cross-site request forgery attacks ({{Glossary("CSRF")}}).</p> + + <p>Современные браузеры используют <code>SameSite=Lax</code>. Если необходима работа <code>SameSite=</code><code>None</code> cookie должна быть установлена с атрибутом <code>Secure</code>.</p> + </dd> +</dl> + +<h2 id="Примеры">Примеры</h2> + +<h3 id="Сессионный_cookie">Сессионный cookie</h3> + +<p>Сессионные cookies будут удалены после отключения клиента. В них не указываются директивы <code>Expires</code> или <code>Max-Age</code>. Учитывайте, что часто в браузере включено восстановление сессии.</p> + +<pre class="notranslate">Set-Cookie: sessionid=38afes7a8; HttpOnly; Path=/</pre> + +<h3 id="Постоянный_cookie">Постоянный cookie</h3> + +<p>Вместо истечения срока действия, когда клиент закрыт, срок действия постоянных файлов cookie истекает в определенную дату (<code>Expires</code>) или по истечении определенного промежутка времени (<code>Max-Age</code>).</p> + +<pre class="notranslate">Set-Cookie: id=a3fWa; Expires=Wed, 21 Oct 2015 07:28:00 GMT; Secure; HttpOnly +</pre> + +<h3 id="Неверные_домены">Неверные домены</h3> + +<p>Файл cookie, принадлежащий домену, который не включает исходный сервер, <a href="https://tools.ietf.org/html/rfc6265#section-4.1.2.3">должен быть отклонен пользовательским</a>. Следующий cookie будет отклонен, если он был установлен сервером, размещенным на originalcompany.com.</p> + +<pre class="notranslate">Set-Cookie: qwerty=219ffwef9w0f; Domain=somecompany.co.uk; Path=/; Expires=Wed, 30 Aug 2019 00:00:00 GMT</pre> + +<h3 id="Cookie_prefixes">Cookie prefixes</h3> + +<p>Cookies names with the prefixes <code>__Secure-</code> and <code>__Host-</code> can be used only if they are set with the <code>secure</code> directive from a secure (HTTPS) origin. In addition, cookies with the <code>__Host-</code> prefix must have a path of "/" (the entire host) and must not have a domain attribute. For clients that don't implement cookie prefixes, you cannot count on having these additional assurances and the cookies will always be accepted.</p> + +<pre class="notranslate">// Both accepted when from a secure origin (HTTPS) +Set-Cookie: __Secure-ID=123; Secure; Domain=example.com +Set-Cookie: __Host-ID=123; Secure; Path=/ + +// Rejected due to missing Secure directive +Set-Cookie: __Secure-id=1 + +// Rejected due to the missing Path=/ directive +Set-Cookie: __Host-id=1; Secure + +// Rejected due to setting a domain +Set-Cookie: __Host-id=1; Secure; Path=/; domain=example.com +</pre> + +<h2 id="Specifications">Specifications</h2> + +<table> + <tbody> + <tr> + <th scope="col">Specification</th> + <th scope="col">Title</th> + </tr> + <tr> + <td>{{RFC("6265", "Set-Cookie", "4.1")}}</td> + <td>HTTP State Management Mechanism</td> + </tr> + <tr> + <td><a href="https://tools.ietf.org/html/draft-ietf-httpbis-rfc6265bis-02">draft-ietf-httpbis-rfc6265bis-02</a></td> + <td>Cookie Prefixes, Same-Site Cookies, and Strict Secure Cookies</td> + </tr> + </tbody> +</table> + +<h2 id="Browser_compatibility">Browser compatibility</h2> + +<p>The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p> + +<p>{{Compat("http.headers.Set-Cookie")}}</p> + +<h2 id="Compatibility_notes">Compatibility notes</h2> + +<ul> + <li>Starting with Chrome 52 and Firefox 52, insecure sites (<code>http:</code>) can't set cookies with the "secure" directive anymore.</li> +</ul> + +<h2 id="See_also">See also</h2> + +<ul> + <li><a href="/en-US/docs/Web/HTTP/Cookies">HTTP cookies</a></li> + <li>{{HTTPHeader("Cookie")}}</li> + <li>{{domxref("Document.cookie")}}</li> +</ul> +</div> |