Safari - неправильный MD5-контент при удалении объекта - PullRequest
0 голосов
/ 04 марта 2020

Когда я пытаюсь удалить Объект в моем Bucket с помощью Chrome, он работает отлично. Когда я пытаюсь использовать Safari, я получаю эту ошибку: The Content-MD5 you specified did not match what we received.

Это строка curl из Chrome:

curl 'https://mybucket.s3.cloud/?delete' -H 'Connection: keep-alive' -H 'Pragma: no-cache' -H 'Cache-Control: no-cache' -H 'X-Amz-User-Agent: aws-sdk-js/2.631.0 promise' -H 'Content-MD5: b0reU5O4x/fCQnk/W2oH4w==' -H 'Authorization: OK_STRING, SignedHeaders=content-md5;host;x-amz-content-sha256;x-amz-date;x-amz-user-agent, Signature=OK_STRING' -H 'Content-Type: application/octet-stream; charset=UTF-8' -H 'X-Amz-Content-Sha256: UNSIGNED-PAYLOAD' -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.122 Safari/537.36' -H 'Sec-Fetch-Dest: empty' -H 'X-Amz-Date: 20200304T171137Z' -H 'Accept: */*' -H 'Origin: http://localhost:9000' -H 'Sec-Fetch-Site: cross-site' -H 'Sec-Fetch-Mode: cors' -H 'Referer: http://localhost:9000/myurl/explorer' -H 'Accept-Language: fr-FR,fr;q=0.9,en-US;q=0.8,en;q=0.7' --data-binary '<Delete xmlns="http://s3.amazonaws.com/doc/2006-03-01/"><Object><Key>Capture d’écran 2020-03-03 à 17.46.22.png</Key></Object></Delete>' --compressed

Теперь это тот же файл и то же действие с Safari:

curl 'https://mybucket.s3.cloud/?delete' \
-XPOST \
-H 'Content-Type: application/octet-stream; charset=UTF-8' \
-H 'Accept: */*' \
-H 'Authorization: OK_STRING, SignedHeaders=content-md5;host;x-amz-content-sha256;x-amz-date;x-amz-user-agent, Signature=OK_STRING' \
-H 'Accept-Language: fr-fr' \
-H 'Accept-Encoding: gzip, deflate, br' \
-H 'Host: mybucket.s3.cloud' \
-H 'Origin: http://localhost:9000' \
-H 'Content-Length: 138' \
-H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.5 Safari/605.1.15' \
-H 'Referer: http://localhost:9000/' \
-H 'Connection: keep-alive' \
-H 'Content-MD5: b0reU5O4x/fCQnk/W2oH4w==' \
-H 'X-Amz-Date: 20200304T170853Z' \
-H 'X-Amz-User-Agent: aws-sdk-js/2.631.0 promise' \
-H 'X-Amz-Content-Sha256: UNSIGNED-PAYLOAD' \
--data-binary $'<Delete xmlns="http://s3.amazonaws.com/doc/2006-03-01/"><Object><Key>Capture d\u2019\xe9cran 2020-03-03 \xe0 17.46.22.png</Key></Object></Delete>'

Код, генерирующий эти вызовы:

s3({
      method: 'deleteObject',
      region: bucket.region,
      params: {
        Bucket: bucket.id,
        Key: file.Key,
        VersionId: file.VersionId,
      },
    })

s3 являющийся экземпляром 'aws -sdk / clients / s3'

Кто-нибудь имеет представление о том, что может go не так? Похоже, Safari кодирует мое имя файла в соответствии с data-binary. Почему? Как я могу предотвратить это? или заставить его везде?

1 Ответ

0 голосов
/ 18 марта 2020

Я не мог найти способ исправить это правильно. Но это было связано с некоторыми специальными символами, присутствующими в ключе объекта. Вот инструкция AWS https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingMetadata.html#object -key-guide

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

...