Closed zerobig closed 8 months ago
получил от сервера ошибку.
Какую именно ошибку получили? Пришлите URL и ошибку
Это был локальный сервер MinIO и конфигурация демо БСП.
Запрос: HEAD http://localhost:9000/testbucket/_ДемоНоменклатура/20240215/ТестоваяКартинка.png
Ошибка: 403. А должен был вернуть статус 404 или 200.
В Postman всё нормально отвечает. Потому что происходит кодировка пути.
А попробуйте руками закодировать путь, ошибка будет сохраняться?
Попробовал (см. моё первое сообщение). После кодирования пути "руками" ошибка ушла.
Вот такое тело возвращается от MinIO на тот же запрос, но с методом GET:
<?xml version="1.0" encoding="UTF-8"?>
<Error>
<Code>SignatureDoesNotMatch</Code>
<Message>The request signature we calculated does not match the signature you provided. Check your key and signing method.</Message>
<Key>_ДемоНоменклатура/20240215/ТестоваяКартинка.png</Key>
<BucketName>testbucket</BucketName>
<Resource>/testbucket/_ДемоНоменклатура/20240215/ТестоваяКартинка.png</Resource>
<RequestId>17B61AC2226C5684</RequestId>
<HostId>dd9025bab4ad464b049177c95eb6ebf374d3b3fd1af9251148b658df7ac2e3e8</HostId>
</Error>
Причем, судя по https://cloud.yandex.ru/ru/docs/storage/s3/api-ref/response-codes (см. 403 SignatureDoesNotMatch) такое поведение будет для всех серверов S3.
И можно сделать вывод, что скорее всего это особенность формирования ключей серверами S3. Они формируют ключи из URL. А не закодированный URL в качестве ключа им не годится. Так что моё предложение внести кодирование в библиотеку некорректное.
Можно закрывать issue. Всем спасибо!
Дополнение... В ответе на запрос HEAD тела нет. Потому и не смог сразу разобраться к чему относится эта 403-я ошибка. Но если внимательно посмотреть заголовки, то там можно увидеть:
X-Minio-Error-Desc: "The request signature we calculated does not match the signature you provided. Check your key and signing method."
Отсюда мораль: читайте ответ полностью!
Ну вообще я бы сделал в библиотке кодирование автоматическое, точно пригодится для S3 и прочих вещей
Попробовал обратиться по url, который содержит не только английские буквы, получил от сервера ошибку. В принципе мне ничто не мешает кодировать url перед передачей его в библиотеку, но, на мой взгляд, логично было бы внести это внутрь библиотеки чтобы не вспоминать каждый раз перед вызовом. Что-то вроде:
вместо