Я размещаю файл 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-адресами.