2015-01-16 3 views
0

И, кроме того, почему чувствительность в белом пространстве? Если JavaScript может добавлять файлы cookie после загрузки HTML, я бы предположил, что есть что-то принципиально иное в том, как они это делают, но я не могу понять даже хорошее предположение о том, почему.Почему файлы cookie и сеансы должны присутствовать перед любым HTML?

+1

Вы должны прочитать введение в HTTP протокол, который используется для передачи HTML. – Phillip

+3

Это требуется [HTTP] (http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol). Файлы cookie устанавливаются в заголовках, а заголовки ** MUST ** - перед содержимым тела. JS не использует HTTP для файлов cookie.Он уже запущен внутри браузера и может напрямую устанавливать/управлять файлами cookie. Сервер не запущен в браузере. он может устанавливать только файлы cookie через директивы 'Cookie' в заголовке своих ответов. –

+0

@MarcB То, что * must * принадлежит только для HTTP/1.0. Кодирование с канальной передачей позволяет отправлять заголовки после тела файла. – Phillip

ответ

2

HTTP-ответы состоят из заголовка и тела (необязательно в зависимости от заголовка).

Файлы cookie устанавливаются с помощью HTTP-заголовков.

HTML-документы (любое другое фактическое содержимое) отправляются в теле.

Заголовок должен быть отправлен перед корпусом. Это может быть сделано путем:

  • работает код для вывода их перед кодом для вывода тела
  • буферизации вывода программы PHP, пока он не закончит работу

А кроме того, почему чувствительность в белом пространстве?

Пробелы не являются особыми в телах ответа HTTP. Он выводится как любой другой контент.


Если JavaScript можно добавить печенье после загрузки HTML, то я бы предположил, есть что-то принципиально другое о том, как они это делают

Они не используют HTTP-заголовки, чтобы установить их.

+0

Этот ответ является неполным. Можно отправлять заголовки после тела, используя кодировку с кодировкой HTTP/1.1. Интересный вопрос в том, почему PHP этого не позволяет. Я предполагаю, что они либо не знают, либо хотят, чтобы они обеспечивали одинаковое поведение на всех платформах, а также те, которые не поддерживают HTTP/1.1 или используют CGI, что также заставляет сначала отправлять заголовки. (Но последнее было бы необычным для PHP.) – Phillip

0

WWW-сервер отправляет данные в ваш браузер по частям. Первая часть - это текст, обычно известный как HTTP Headers. Они определяют тип, размер, язык, кодировку содержимого, сервер отправляет также некоторую информацию о себе. Куки также отправляются сюда, потому что это место для информации «за пределами площадки».

Сеансы несколько отличаются. Они серверные. Поэтому вам нужно объявить сеанс до того, как сервер начнет отображать контент и отправлять его в клиентский браузер. Еще одна причина этого заключается в том, что ваш идентификатор сеанса - это ... cookie! Так что да, сеанс не будет работать без файлов cookie.

Файлы cookie - это клиентские стороны (часть браузера), содержащие небольшие текстовые файлы. JavaScript - это сценарий на стороне клиента (браузера), который работает в вашем браузере. Таким образом, он не использует HTTP для связи со страницей веб-сайта, которую вы на самом деле смотрите. Нет необходимости использовать HTTP-заголовки и прочее. Если программа работает на вашем компьютере, гораздо проще и проще просто модифицировать эти файлы на компьютере, не так ли?

Вот почему JavaScript не использует заголовки HTTP для изменения файлов cookie. Он просто информирует ваш браузер о том, что он хочет изменить это и это, и браузер делает это.

Более подробная информация в Manual

+0

«Файлы cookie - это небольшие текстовые файлы на стороне клиента (браузер)». - Нет. Браузер может * хранить * данные для файла cookie в небольшом текстовом файле, но это деталь реализации. Куки-файлы - это части данных, которые обмениваются между HTTP-серверами и клиентами. – Quentin

Смежные вопросы