HTTP-заголовок сообщает нам, был ли файл загружен, загружен или доступен?

Я работаю с заголовками HTTP, как показано ниже.

    GET /success.txt HTTP/1.1
    Host: detectportal.firefox.com
    User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:54.0)
    Accept: */*
    Accept-Language: en-US,en;q=0.5
    Accept-Encoding: gzip, deflate
    Cache-Control: no-cache
    Pragma: no-cache
    Connection: keep-alive

    HTTP/1.1 200 OK
    Content-Type: text/plain
    Content-Length: 8
    Last-Modified: Mon, 15 May 2017 18:04:40 GMT
    ETag: "ae780585fb7d28906123"
    Accept-Ranges: bytes
    Server: AmazonS3
    X-Amz-Cf-Id: iMjet-5hLAEAf8HyvtHWnotG4mkD7VeN7A==
    Cache-Control: no-cache, no-store, must-revalidate
    Date: Mon, 24 Jul 2017 18:24:08 GMT
    Connection: keep-alive

как видно из приведенного выше рукопожатия, это было успешное двустороннее рукопожатие. Мне просто интересно, могут ли эти типы рукопожатий сказать нам, был ли файл загружен, загружен или получен доступ? если нет, как мы узнаем, какое из этих действий было выполнено из файла заголовка? Спасибо!


person martial mathers    schedule 26.07.2017    source источник
comment
Неа. Почему вы ожидаете, что эта информация будет в заголовках? Что вы подразумеваете под загрузкой, выгрузкой или доступом в любом случае? Какую проблему вы пытаетесь решить и почему вы ищете решение в заголовках ответов HTTP? Это также не рукопожатие (термин, используемый для обозначения начала какого-либо соединения), это пара запрос-ответ. В целом ваш вопрос звучит действительно ошибочно, и вам может понадобиться объяснение того, что вы на самом деле пытаетесь сделать.   -  person CodeCaster    schedule 26.07.2017
comment
скажем, вы запросили страницу в формате PDF и загрузили ее из Интернета или просто прочитали и закрыли ее, тем временем вы захватываете трафик с помощью wireshark или чего-то еще, так что в любом случае можно узнать, что файл PDF был загружен из заголовка HTTP ?   -  person martial mathers    schedule 26.07.2017
comment
Все еще очень неясно, почему вы спрашиваете об этом, но я собираюсь дать ответ, который отвечает на этот вопрос. Я не думаю, что вы можете сделать что-то полезное с ним. Возможно, сделайте этот вопрос менее гипотетическим и объясните, что вы на самом деле пытаетесь сделать.   -  person CodeCaster    schedule 26.07.2017


Ответы (2)


можно ли в любом случае узнать, что файл PDF был загружен из [захваченных сетевых пакетов, содержащих эти] заголовки HTTP?

Нет. Заголовки описывают ресурс и, возможно, последующее содержимое этого ресурса.

Никто не мешает вам закрыть соединение после прочтения заголовков, из-за чего контент не скачивается.

Таким образом, простое наблюдение за этими заголовками в сети не является доказательством того, что кто-то действительно просматривал содержимое этого ответа, даже если оно было.

Но в целом, если в запросе есть полезная нагрузка, вы можете сказать, что «что-то» было загружено, а если в ответе есть полезная нагрузка, вы можете сказать, что «что-то» было загружено. Что именно было загружено, можно узнать, проверив заголовки типа содержимого запроса. Обратите внимание, что понятие «файл» становится размытым при их передаче по сети. Веб-сервер, отвечающий на запрос, может сгенерировать PDF-документ в памяти и передать его с заголовком, который вызывает диалоговое окно «Сохранить как...» в вашем браузере. Можете ли вы тогда сказать, что «файл» был загружен? Что, если сайт использует файл CSS, существующий на диске сервера, который ваш браузер отображает, но не сохраняет на диске (за исключением кэширования)? Был ли тогда «загружен» «файл»?

См. заголовки ответов HTTP, действительные без Transfer-Encoding и Content-Length? как определить длину сообщения.

person CodeCaster    schedule 26.07.2017
comment
хорошо спасибо. Мне просто было интересно, есть ли способ. Я ценю ваше время. - person martial mathers; 26.07.2017
comment
В последний раз способ сделать ЧТО именно? Вы хотите доказать, что кто-то скачал что-то в вашей сети? - person CodeCaster; 26.07.2017
comment
способ узнать, было ли что-то загружено или загружено из заголовка Http, который я получил, используя поток tcp в wireshark. - person martial mathers; 26.07.2017
comment
В общем, если в запросе есть заголовок content-length, что-то было загружено, а если в ответе есть заголовок content-length, что-то было загружено нормально. Если соединение не было закрыто перед отправкой или получением полезной нагрузки. Или, если в игре не было фрагментации или соединения: закрыть без длины содержимого. - person CodeCaster; 26.07.2017
comment
ну, это был ответ, который я искал. еще раз спасибо - person martial mathers; 26.07.2017
comment
В этом случае я несколько расширил свой ответ. Я надеюсь, что это объясняет, почему было немного неясно, что именно вам нужно. - person CodeCaster; 26.07.2017

Если вы хотите узнать, относится ли ответ HTTP к файлу, отличному от HTML-документа, просто взглянув на заголовки, проверьте заголовок Content-Type. Он содержит MIME-тип содержимого. отправляется, например, text/html для файла HTML, text/css для файла CSS, application/pdf или application/x-pdf для файла PDF, video/mp4 для видео MP4 и т. д. Официальный список находится по адресу http://www.iana.org/assignments/media-types/media-types.xhtml

person Leo Aso    schedule 26.07.2017