Я размещаю изображения на Amazon S3 и использую их в своем приложении Flash. Мое приложение получает подписанные URL-адреса S3, которые указывают на изображения в S3. URL выглядит примерно так (разрывы строк добавлены для ясности):
http://s3.amazonaws.com/my-bucket/my-image.jpg?
AWSAccessKeyId=AKIAI7PSLIMJFIA2JRQG&
Expires=1313812683&
Signature=yhnSe47GRjReUQlfG/S/A+JJTdo=
Проблема здесь со знаком +
, который может встречаться в подписи. Если я отправляю знак +
как есть, то браузер считает, что это пробел, как и должно быть в соответствии со спецификациями URL. Действительно, S3 не должен использовать +
знаки по этой причине, но похоже, что что-то, что они упустили .
Обычно это не проблема, поскольку вы просто заменяете знак +
на %2B
. Тем не менее, Flash имеет поведение по умолчанию, которое затрудняет это.
Из того, что я вижу, объект URLRequest
настроен на , всегда кодирует URL-адреса, как если бы он был передан через функцию encodeURI
. Я не вижу способа отключить это. К сожалению, encodeURI
не кодирует +
знаков, но делает кодировок %
знаков.
Это означает, что если я оставлю здесь знак +
, то Flash оставит его в покое, и S3 решит, что в моем URL есть пробел. Если я использую %2B
, то Flash превращает его в %252B
из-за кодирования %
. Doh!
Кто-нибудь видит способ обойти это, что мне не хватает?