Zadejte hledaný výraz...
Jakub Glos
Webtrh.cz
Vývoj webových stránek na WordPressu a proklientský přístup pro freelancery
Třídenní infromacemi nabitý prezenční + online kurz v Praze od Webtrhu pouze za 2 871 Kč
Více informací

Jak obejít Mixed Content

mcever4
verified
rating uzivatele
15. 3. 2021 21:44:53
Ahoj, mám starší server, kam nejdou nainstalovat SSL certifikáty. Proč to neřešte, prostě nejdou.
Na tom serveru mám 200 GB obrázků z výrobní linky, kam denně přitéká cca dalších 600 obrázků.
Nyní mám nový server včetně SSL certifikátů a veškeré weby již běží na HTTPS.
Problém nastává pokud chci na nových webových aplikacích zobrazovat obrázky ze starého serveru.
Prohlížeč zahlásí Mixed Content a konec.
Lze to obejít například přes iframe nebo nějak jinak, abych mohl zobrazovat obsah ?
15. 3. 2021 21:44:53
https://webtrh.cz/diskuse/jak-obejit-mixed-content/#reply1480246
TomasX
verified
rating uzivatele
(4 hodnocení)
15. 3. 2021 22:47:48
použij reverzní proxy, obrázky pak budeš stahovat přímo přes ten nový server a ten si je vyžádá. Máš kontrolu nad webovým serverem nebo použiváš nějaký běžný hosting?
Pokud nemůžeš měnit konfiguraci webového serveru, lze udělat i jednoduchý php script, který bude obrázek stahovat, pokud není velká návštěvnost, může to být dostatečné řešení. Stejně tak je možné využít nějakou CDN, která udělá to stejné, sama si stáhne obrázky a tobě poskytne přes https.
V prohlížeči to moc obejít nejde a jsou v tom číl dál agresivnější.
15. 3. 2021 22:47:48
https://webtrh.cz/diskuse/jak-obejit-mixed-content/#reply1480245
mcever4
verified
rating uzivatele
15. 3. 2021 23:04:04
hele dobrý, to je vlastně pravda, dík
---------- Příspěvek doplněn 15.03.2021 v 23:20 ----------
ještě dotaz, neplní se mi tam nějaký TEMP a až bude plný, tak to všechno spadne ? :)) nebo je to jen v paměti ?
15. 3. 2021 23:04:04
https://webtrh.cz/diskuse/jak-obejit-mixed-content/#reply1480244
petrx
verified
rating uzivatele
(8 hodnocení)
16. 3. 2021 09:44:57
Napsal mcever4;1618202
Ahoj, mám starší server, kam nejdou nainstalovat SSL certifikáty. Proč to neřešte, prostě nejdou.
Vyřešte to pomocí reverzní proxy na CloudFlare, ta tam může přidat HTTPS a zároveň odlehčí origin serveru
16. 3. 2021 09:44:57
https://webtrh.cz/diskuse/jak-obejit-mixed-content/#reply1480243
TomasX
verified
rating uzivatele
(4 hodnocení)
16. 3. 2021 10:42:21
Napsal mcever4;1618228
hele dobrý, to je vlastně pravda, dík
---------- Příspěvek doplněn 15.03.2021 v 23:20 ----------
ještě dotaz, neplní se mi tam nějaký TEMP a až bude plný, tak to všechno spadne ? :)) nebo je to jen v paměti ?
tohle není nejvhodnější řešení, protože takhle přenášíš obrázky v html a pokaždé znovu. Pokud ti to tak ale stačí, proč by ne.
Já si představoval skript, přes který ten obrázek stáhneš a bude respektovat aspoň základní hlavičky. Zajímavé je, že se mi nic nepodařilo najít, tak jsem v rychlosti něco napsal, zkoušeno pouze u sebe a nejsem programátor v php, takže kód je takový nesrovnaný.
Skript nahraješ na svůj web a poté voláš jako https://muj-novy-web.cz?name=obrazek.jpg a on stáhne obrázek z url http://muj-stary-web.cz/obrazky/obrazek.jpg a vrátít ti ho, opakované stažení již respesktuje Nod modified hlavičku. Případně lze volat i z podsložky https://muj-novy-web.cz?name=podslozka/obrazek.jpg, to stáhne obrázek z http://muj-stary-web.cz/obrazky/podslozka/obrazek.jpg. Na začátku stačí jen upravit základní url pro starý web a mělo by to fungovat bez problémů od php 5.6 s podporou curl.
$image_url = 'http://muj-stary-web.cz/obrazky/';
function get_headers_from_response($response)
{
$headers = Array();
list($headers_raw, $body) = explode("rnrn", $response, 2);
foreach (explode("rn", $headers_raw) as $i => $line) {
if ($i === 0) {
$headers = $line;
} else {
list($name, $value) = explode(': ', $line);
$headers = $value;
}
}
return Array($headers, $body);
}
$request_headers = Array();
if (isset($_GET)) {
$image_url .= $_GET;
} else {
header('HTTP/1.1 404 Not Found');
exit;
}
if (isset($_SERVER)) {
$request_headers[] = "If-Modified-Since: " . $_SERVER;
}
if (isset($_SERVER)) {
$request_headers[] = "If-None-Match: " . $_SERVER;
}
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $image_url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_USERAGENT, 'php-image-proxy/1.0');
curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
curl_setopt($ch, CURLOPT_BUFFERSIZE, 12800);
curl_setopt($ch, CURLOPT_NOPROGRESS, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $request_headers);
$response = curl_exec ($ch);
curl_close ($ch);
list($headers, $image) = get_headers_from_response($response);
if (array_key_exists('Location', $headers)) {
header("HTTP/1.1 301 Moved Permanently");
header('Location: ' . $headers);
exit;
} else {
header($headers);
}
if (array_key_exists('Content-Type', $headers)) {
$contentType = $headers;
# vracet pouze obrázky
if (strpos($contentType, 'image/') === false) {
header('HTTP/1.1 404 Not Found');
exit;
}
header('Content-Type: ' . $contentType);
}
if (array_key_exists('Content-Length', $headers)) header('Content-Length: ' . $headers);
if (array_key_exists('Expires', $headers)) header('Expires: ' . $headers);
if (array_key_exists('Cache-Control', $headers)) header('Cache-Control: ' . $headers);
if (array_key_exists('Last-Modified', $headers)) header('Last-Modified: ' . $headers);
echo $image;
16. 3. 2021 10:42:21
https://webtrh.cz/diskuse/jak-obejit-mixed-content/#reply1480242
Pro odpověď se přihlašte.
Přihlásit