Используете FineUploader с необязательным https?

Я настроил FineUploader на сайте и включил флажок, который позволяет пользователям загружать файлы с помощью HTTPS, если они этого хотят.

К сожалению, если пользователь заходит на сайт с помощью http, а затем пытается использовать ssl, возникают ошибки, я предполагаю, что это связано с проблемами CORS. Я предполагаю, что это проблема CORS, потому что, если я захожу на сайт с помощью https и пытаюсь загрузить с помощью ssl, он работает нормально.

Я нашел документацию о включении поддержки CORS. , но, похоже, вам либо нужно сделать так, чтобы выполнялись только запросы CORS, либо не выполнялись никакие запросы. В моей ситуации будет запрос CORS несколько раз, а не другие.

Кто-нибудь знает о хорошей работе для этого? Должен ли я просто перезагружать всю страницу, используя HTTPS, когда флажок установлен?


person Abe Miessler    schedule 04.04.2013    source источник
comment
Ваша проблема решена, если вы перезагрузите всю страницу с помощью HTTPS? Кроме того, есть ли способ создать экземпляр Fine Uploader после того, как пользователь решит, хотят ли они использовать HTTPS или нет? Просто пытаюсь получить немного больше информации о вашей ситуации.   -  person Ray Nicholus    schedule 04.04.2013
comment
Да, если я захожу на страницу по HTTPS, а затем загружаю по HTTPS, все работает. Если я нажму на HTTPS и попытаюсь загрузить с помощью HTTP, это приведет к ошибкам. Вы можете взять два приведенных выше предложения и поменять местами HTTP/HTTPS, и это все равно будет правдой. Я уверен, что мог бы создать экземпляр, когда пользователь выбирает, но я считаю, что проблема CORS все равно будет.   -  person Abe Miessler    schedule 04.04.2013
comment
Если вы создадите экземпляр после того, как пользователь выберет, если требуется CORS, вы просто включите функцию CORS, и все должно работать. Вы столкнулись с какой-то другой проблемой?   -  person Ray Nicholus    schedule 04.04.2013
comment
Ааа, я вижу, что вы говорите. Это может сработать.   -  person Abe Miessler    schedule 04.04.2013


Ответы (2)


Просто чтобы повторить то, что я упомянул в своих комментариях (чтобы другие могли легко это увидеть)...

Возможно, вы можете создать экземпляр Fine Uploader после того, как пользователь выберет HTTP или HTTPS в качестве протокола для загрузки. При необходимости вы можете включить функцию CORS с помощью свойства expected параметра cors. Имейте в виду, что есть некоторые детали на стороне сервера, которые вы должны учитывать при обработке запросов CORS, особенно если используется IE9 или более ранняя версия. См. мою запись в блоге о функции CORS для более подробной информации.

person Ray Nicholus    schedule 04.04.2013
comment
Поэтому я попытался настроить простую версию, которая по умолчанию выполняла запрос CORS, но все равно выдавала ошибку. Я просто установил expected: true для cors, а на стороне сервера добавил заголовок ответа: Access-Control-Allow-Origin:*, который, как я думал, будет в порядке, поскольку я не использовал sendCredentials: true. Имеет ли это смысл? Если да, то есть идеи, почему он все еще будет ошибаться? - person Abe Miessler; 05.04.2013
comment
Вы также учитываете первоначальный запрос OPTIONS? Это необходимо при обработке предварительных запросов CORS. Все запросы CORS XHR, отправленные Fine Uploader, должны предварительно проверяться пользовательским агентом. Подробнее об этом можно прочитать в моем блоге о поддержке CORS в Отличный загрузчик. - person Ray Nicholus; 05.04.2013
comment
Я так не думаю. Как мне обрабатывать OPTIONS на стороне сервера? Это то, что вы имели в виду, когда говорили: Your responses must include the appropriate Access-Control headers. Если да, не могли бы вы более подробно остановиться на том, что именно мне нужно сделать? - person Abe Miessler; 05.04.2013
comment
Я настоятельно рекомендую сначала прочитать сообщение в блоге, на которое я ссылаюсь, чтобы лучше понять не только то, как запросы CORS обрабатываются браузерами в целом, но и то, как работает поддержка CORS Fine Uploader (для запросов XHR и не-XHR). Тем не менее, я не уверен, какой серверный язык вы используете. Взгляните на пример Java в репозитории примеров на стороне сервера, чтобы увидеть, как я обрабатывать запросы OPTIONS в Java. - person Ray Nicholus; 05.04.2013
comment
Рэй, я просмотрел статью, на которую вы мне указали, а также пример кода Java. Я считаю, что моя серверная часть настроена правильно, но я все еще не могу загрузить http->https. Когда я смотрю на фактический запрос XHR, он даже не получает ответа от сервера, и если я проверю журналы на своем сервере, нет никаких указаний на то, что запрос когда-либо поступал туда. Я знаю, что это долгий путь, но есть ли у вас какие-либо предложения о том, где искать, чтобы отладить это? У меня заканчиваются идеи. - person Abe Miessler; 08.04.2013
comment
@AbeMiessler Отправьте мне письмо по адресу [email protected], и мы сможем продолжить обсуждение. Мне нужно, чтобы вы предоставили ссылку на ваше приложение, чтобы я мог заглянуть. - person Ray Nicholus; 08.04.2013
comment
Спасибо тебе большое. Я разверну все на URL-адресе, по которому вы можете нажать и отправить вам электронное письмо. - person Abe Miessler; 08.04.2013

Если вы загружаете прямо на Amazon s3, см. примечание в официальные документы, "SSL также поддерживается, и в этом случае ваш endpoint адрес должен начинаться с https://" в скрипте в вашем файле uploaderpage.html.

request: {
    endpoint: 'https://mybucket.s3.amazonaws.com', 
                // Note that "https://" added before bucket name, to work over https                     
    accessKey: 'AKIAblablabla' // as per the specific IAM account
},
  • Это по-прежнему будет работать, если uploaderpage.html обслуживается через http (или вы можете динамически заполнить значение конечной точки, если вам нужна гибкость в отношении конечной точки).
  • Это поможет вам избежать ошибки смешанного содержимого при загрузке через https, «запрошена небезопасная конечная точка XMLHttpRequest», что происходит, если страница https, но вы запрашиваете конечную точку http.
person Mark    schedule 22.02.2015
comment
Это решение работает, значит, я могу работать на локальном хосте и на производстве с https .... спасибо :) - person Shina; 11.01.2017