Получение как можно большей части HTTP-запроса, который не был выполнен

1

Короче говоря, если я отправляю HTTP POST с большой нагрузкой (20-30 мб) и соединение падает на полпути через отправку запроса на сервер, могу ли я восстановить 10mb+, который был отправлен до того, как соединение было отключено?

В моем тестировании PHP на NGINX, если соединение падает во время загрузки, мой PHP никогда не запускается. У меня есть ignore_user_abort (1) в верхней части скрипта, но это кажется только актуальным после получения полного запроса.

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

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

=======

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

Мне нужно будет выполнить некоторые тесты, но вы говорите, что если бы я использовал chunked transfer encoding для запроса, этот PHP получал бы все куски, полученные до отключения? Это стоит попробовать, и, конечно же, лучше сделать несколько небольших постов, что соединение сломается.

Спасибо за предложение.

  • 0
    возможный дубликат загрузки очень больших файлов (> 5 ГБ)
  • 0
    Многие chunking библиотеки обрабатывают подобные ситуации, так что вам это не нужно. Я настоятельно рекомендую использовать один, так как он позволит большие файлы, а также возобновляемую загрузку.
Теги:
nginx
upload

1 ответ

1
Лучший ответ

Никогда не обрабатывайте большие загрузки файлов через скриптовый сервер (Ruby, PHP), есть встроенная функция прямой загрузки, называемая client_body_in_file_only, см. Мой очень глубокий обзор здесь: https://coderwall.com/p/swgfvw/nginx-direct -file-загрузка-без прохождения-них-через-бэкенд

Единственный предел, который он не работает с данными в формате multipart, но только через AJAX или прямой POST с мобильного или сервера на сервер.

  • 0
    Очень приятно знать, что это существует, но, к сожалению, в данный момент мне это не помогает. В моем тестировании я начал передавать большой файл, дал ему время для начала и затем разорвал соединение. В папке upload / temp не осталось файлов. Когда я не разрывал соединение, файлы загружались нормально (за исключением того, что только один из моих пользовательских заголовков, кажется, проходит, но это, вероятно, простая ошибка с моей стороны).
  • 0
    Этот файл в основном представляет собой тело HTTP-запроса, который вы выгружаете на диск. Запрос либо завершен, либо прерван, что вызывает «проблему», но это ожидаемое поведение. Попробуйте пропущенные запросы, но я не уверен, поможет ли это.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню