Направляйте изображения HTTP для сайта HTTPS - PullRequest
0 голосов
/ 17 февраля 2011

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

Чтобы обойти это, я хотел бы направить изображения через мой сервер.клиенту, предоставив им требуемый протокол https.

например, при просмотре контента на защищенном сайте тег изображения должен выглядеть следующим образом: <img src="https://mysite/img.aspx?src=http://url.to/someimage.jpg" >

Поскольку мой сайт использует Umbraco (.NET 3.5, IIS7), я уже использовалбиблиотека urlrewritingnet, но кажется, что она может только переписывать и перенаправлять URL.

Кто-нибудь делал это?

1 Ответ

0 голосов
/ 17 февраля 2011

Следующее работает довольно хорошо:

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

public partial class Img : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

            string url = Page.Request.QueryString["url"];

            HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
            request.Timeout = 5000;
            request.ReadWriteTimeout = 20000;
            HttpWebResponse imgresponse = (HttpWebResponse)request.GetResponse();
            //StreamReader sr = new StreamReader(imgresponse.GetResponseStream());


            Response.ContentType = "image/gif";
            byte[] fileBytes = GetFileBytes(imgresponse.GetResponseStream());
            Response.BinaryWrite(fileBytes);
            Response.Flush();

        }

        protected byte[] GetFileBytes(Stream stream)
        {

            byte[] fileBytes = null;
            byte[] buffer = new byte[4096];

            try
            {

                MemoryStream memoryStream = new MemoryStream();
                int chunkSize = 0;
                do
                {
                    chunkSize = stream.Read(buffer, 0, buffer.Length);
                    memoryStream.Write(buffer, 0, chunkSize);
                } while (chunkSize != 0);
                fileBytes = memoryStream.ToArray();

            }
            catch (Exception ex)
            {
                Response.Write(ex.Message);
            }

            return fileBytes;
        }

    }
...