HTTP: генерация заголовка завершающего тега

AngularJS делает это правильно, поскольку делает следующий контент-тип внутри заголовка http-запроса:

Content-Type: application/json

Если вы собираетесь с php, как я, или даже с Symfony2, вы можете просто расширить ваша совместимость с сервером для стандартного json, как описано здесь: http://silex.sensiolabs.org/doc/cookbook/json_request_body.html

Способ Symfony2 (например, внутри вашего DefaultController ):

$request = $this->getRequest();
if (0 === strpos($request->headers->get('Content-Type'), 'application/json')) {
    $data = json_decode($request->getContent(), true);
    $request->request->replace(is_array($data) ? $data : array());
}
var_dump($request->request->all());

Преимущество заключалось бы в том, что вам не нужно использовать параметр jQuery, и вы можете использовать AngularJS свой собственный способ выполнения таких запросов.

24
задан Stu Thompson 17 September 2008 в 08:06
поделиться

4 ответа

Завершающий тег является произвольной строкой, которую сервер отправляет клиенту, который клиент передаст обратно серверу в следующий раз, когда файл требуют.

завершающий тег должен быть вычислимым на сервере на основе файла. Вид подобных контрольная сумма, но Вы не могли бы хотеть к контрольной сумме каждый файл, отсылающий его.

 server                client

        <------------- request file foo

 file foo etag: "xyz"  -------->

        <------------- request file foo
                       etag: "xyz" (what the server just sent)

 (the etag is the same, so the server can send a 304)

я создал строку в формате "файл inode число/метка даты/размер файла". Так, если файл будет изменен на сервере после того, как это было роздано клиенту, недавно повторно созданный завершающий тег не будет соответствовать, если клиент повторно запросит его.

char *mketag(char *s, struct stat *sb)
{
    sprintf(s, "%d/%d/%d", sb->st_ino, sb->st_mtime, sb->st_size);
    return s;
}
16
ответ дан Juan Campa 28 November 2019 в 23:35
поделиться

Пока это изменяется каждый раз, когда представление ресурса изменяется, как Вы производите его, полностью ваше дело.

необходимо попытаться произвести его способом что дополнительно:

  1. не требует, чтобы Вы повторно вычислили, это на каждом условном выражении ДОБИРАЕТСЯ, и
  2. не изменяется, если содержание ресурса не изменилось

Используя хеши содержания, может заставить Вас перестать работать в № 1, если Вы не храните вычисленные хеши наряду с файлами.

Используя inode числа может заставить Вас перестать работать в № 2, если Вы перестраиваете свою файловую систему, или Вы служите содержанию с нескольких серверов.

Один механизм, который может работать, должен использовать что-то совершенно довольное зависимый, такой как хеш SHA-1 или строка версии, вычисленная и сохраненная однажды каждый раз, когда Ваше содержание ресурса изменяется.

17
ответ дан Justin Sheehy 28 November 2019 в 23:35
поделиться

От http://developer.yahoo.com/performance/rules.html#etags :

По умолчанию, и Apache и IIS встраивают данные в Завершающий тег, который существенно уменьшает разногласия теста законности, успешно выполняющегося на веб-сайтах с несколькими серверами.

...

, Если Вы не используете в своих интересах гибкую модель проверки, которую предоставляют Завершающие теги, лучше просто удалить Завершающий тег в целом.

6
ответ дан grom 28 November 2019 в 23:35
поделиться

Я рекомендовал бы не использовать их и идти для измененных в последний раз заголовков вместо этого.

Askapache имеет полезную статью об этом. (поскольку они делают в значительной степени все, чем это кажется!)

http://www.askapache.com/htaccess/apache-speed-etags.html

0
ответ дан Rich Bradshaw 28 November 2019 в 23:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: