Назад | Перейти на главную страницу

Chrome на Android выдает запрос двухбайтового диапазона для статического файла MP3, обслуживаемого Nginx

Я размещаю файл MP3 размером 2,9 МБ с Nginx. Когда я перехожу к его URL-адресу с помощью Chrome на Android, выполняется два запроса: один нормальный запрос и один запрос двухбайтового диапазона.

Когда я копирую первый запрос как команду cURL и выполняю его в Mac OS X, он загружает файл целиком. Однако на Android загружается только 3,7 КБ до того, как будет выполнен запрос двухбайтового диапазона. Nginx послушно отвечает только двумя байтами данных, а элементы управления звуком, отображаемые в Chrome, остаются нефункциональными.

Я пробовал установить max_ranges 0, отключение etags, gzip и т. д. Я не могу заставить Chrome загрузить оставшуюся часть файла.

Первый запрос:

GET /yt/test.mp3 HTTP/1.1 Host: xxx.xxx.xx.xxx Connection: keep-alive Pragma: no-cache Cache-Control: no-cache Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Linux; Android 6.0.1; Nexus 6P Build/MMB29Q) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.95 Mobile Safari/537.36 Accept-Encoding: gzip, deflate, sdch Accept-Language: en-US,en;q=0.8

Отклик:

HTTP/1.1 200 OK Server: nginx Date: Mon, 15 Feb 2016 01:12:31 GMT Content-Type: audio/mpeg Content-Length: 2891369 Last-Modified: Mon, 15 Feb 2016 00:26:18 GMT Connection: keep-alive ETag: "56c11b2a-2c1e69" X-Frame-Options: SAMEORIGIN X-Content-Type-Options: nosniff X-XSS-Protection: 1; mode=block Accept-Ranges: bytes

Второй запрос:

GET /yt/test.mp3 HTTP/1.1 Host: xxx.xxx.xx.xxx Connection: keep-alive Pragma: no-cache Cache-Control: no-cache User-Agent: Mozilla/5.0 (Linux; Android 6.0.1; Nexus 6P Build/MMB29Q) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.95 Mobile Safari/537.36 Accept: */* Referer: https://xxx.xxx.xx.xxx/yt/test.mp3 Accept-Encoding: gzip, deflate, sdch Accept-Language: en-US,en;q=0.8 Range: bytes=0-1

Отклик:

HTTP/1.1 206 Partial Content Server: nginx Date: Mon, 15 Feb 2016 01:12:32 GMT Content-Type: audio/mpeg Content-Length: 2 Last-Modified: Mon, 15 Feb 2016 00:26:18 GMT Connection: keep-alive ETag: "56c11b2a-2c1e69" X-Frame-Options: SAMEORIGIN X-Content-Type-Options: nosniff X-XSS-Protection: 1; mode=block Content-Range: bytes 0-1/2891369

Хорошо, почти наверняка проблема в том, что Chrome выгружает загрузку и воспроизведение мультимедиа на Android MediaPlayer. В моей ситуации сертификаты SSL не были настроены правильно (поскольку мое доменное имя было временно занесено в черный список моим реестром по ошибке). Я мог бы вручную просмотреть предупреждения системы безопасности в Chrome, чтобы перейти на страницу, но я думаю, что как только MediaPlayer попытался взять на себя выборку ресурса, он отказался от ошибки сертификата.

Не на 100% уверен, что это была проблема, но мой домен снова работает, и теперь все работает. Я, вероятно, мог бы избавить себя от головной боли, отключив HTTPS, когда работал с необработанными IP-адресами.