Votre pire scénario n'est pas aussi mauvais que vous le pensez.
Vous êtes déjà l'analyse du flux RSS, vous avez déjà l'image d'Url. Disons que vous avez un URL de l'image comme http://otherdomain.com/someimage.jpg
. Vous réécrivez cette URL https://mydomain.com/imageserver?url=http://otherdomain.com/someimage.jpg&hash=abcdeafad
. De cette façon, le navigateur fait une requête https, afin que vous vous débarrasser de ces problèmes.
La prochaine partie - créer une page proxy ou servlet qui effectue les opérations suivantes -
- Lire le paramètre de l'url de la chaîne de requête, et de vérifier le hash
- Télécharger l'image depuis le serveur, proxy et de revenir au navigateur
- En option, les images en cache sur le disque
Cette solution présente certains avantages. Vous n'avez pas à télécharger l'image au moment de la création de l'html. Vous n'avez pas à stocker les images localement. Aussi, vous êtes apatride; l'url contient toutes les informations nécessaires pour servir de l'image.
Enfin, le paramètre de hachage est pour la sécurité, vous ne voulez que votre servlet pour servir des images pour les url que vous avez construit. Ainsi, lorsque vous créez l'url, de calculer, md5(image_url + secret_key)
et d'ajouter que le paramètre de hachage. Avant de vous servir de la demande, de recalculer la valeur de hachage et de le comparer à ce qui a été transmis à vous. Depuis le secret_key n'est connue que de vous, personne d'autre ne peut construire des url valides.
Si vous développez en java, Servlet est juste quelques lignes de code. Vous devriez être capable de port le code ci-dessous sur un autre back-end de la technologie.
/*
targetURL is the url you get from RSS feeds
request and response are wrt to the browser
Assumes you have commons-io in your classpath
*/
protected void proxyResponse (String targetURL, HttpServletRequest request,
HttpServletResponse response) throws IOException {
GetMethod get = new GetMethod(targetURL);
get.setFollowRedirects(true);
/*
* Proxy the request headers from the browser to the target server
*/
Enumeration headers = request.getHeaderNames();
while(headers!=null && headers.hasMoreElements())
{
String headerName = (String)headers.nextElement();
String headerValue = request.getHeader(headerName);
if(headerValue != null)
{
get.addRequestHeader(headerName, headerValue);
}
}
/*Make a request to the target server*/
m_httpClient.executeMethod(get);
/*
* Set the status code
*/
response.setStatus(get.getStatusCode());
/*
* proxy the response headers to the browser
*/
Header responseHeaders[] = get.getResponseHeaders();
for(int i=0; i<responseHeaders.length; i++)
{
String headerName = responseHeaders[i].getName();
String headerValue = responseHeaders[i].getValue();
if(headerValue != null)
{
response.addHeader(headerName, headerValue);
}
}
/*
* Proxy the response body to the browser
*/
InputStream in = get.getResponseBodyAsStream();
OutputStream out = response.getOutputStream();
/*
* If the server sends a 204 not-modified response, the InputStream will be null.
*/
if (in !=null) {
IOUtils.copy(in, out);
}
}