Konten campuran
Apa itu konten campuran, mengapa konten campuran aktif diblokir sementara konten pasif memicu peringatan, serta cara mendeteksi dan memperbaiki sub-sumber daya tidak aman dalam skala besar melalui konsol browser, pelaporan CSP, upgrade-insecure-requests, block-all-mixed-content, dan penelusuran sumber yang dimunculkan kembali oleh CMS maupun teknologi iklan.
Bahasa
Konten campuran terjadi saat halaman HTTPS memuat sub-sumber daya melalui HTTP. Taksonomi browser saat ini membaginya menjadi konten yang dapat ditingkatkan dan konten yang harus diblokir; pembagian lama aktif/pasif masih sesuai untuk sebagian besar jenis, dengan beberapa pengecualian: gambar berkemampuan CORS, kandidat srcset/picture, dan permintaan ke host berupa alamat IP harus diblokir, bukan ditingkatkan. Konten aktif—skrip, stylesheet, iframe, dan XMLHttpRequest/fetch—diblokir karena skrip yang disusupi dapat menulis ulang seluruh halaman; inilah penyebab utama situs rusak setelah migrasi HTTP→HTTPS, sehingga harus diperbaiki lebih dahulu. Konten pasif—gambar, audio, dan video—dahulu dimuat dengan indikator keamanan yang diturunkan, tetapi kini makin sering ditingkatkan otomatis atau diblokir. Tautan jangkar dan navigasi HTTP tingkat atas bukan konten campuran; unduhan tidak aman juga merupakan masalah terpisah. Temukan masalah di tiga lapisan: sumber yang diambil, keadaan hasil render/runtime, dan sesi pengguna nyata. Crawl situs HTTPS, periksa konsol Chrome DevTools—dengan redaksi yang bergantung pada browser dan versinya—atau kumpulkan pelanggaran Content-Security-Policy-Report-Only. Pastikan versi HTTPS benar-benar berfungsi sebelum mengarahkan setiap sub-sumber daya ke https://; gunakan jalur relatif atau relatif-protokol hanya setelah kepemilikan dan perilaku URL dasar terverifikasi. Header Content-Security-Policy: upgrade-insecure-requests menulis ulang permintaan sub-sumber daya http:// dalam cakupan, termasuk lintas origin, menjadi https:// sebelum dikirim dan sebelum pemeriksaan konten campuran/CSP. Tidak ada fallback HTTP jika peningkatan gagal. Direktif ini adalah jaring pengaman, bukan pengganti pembersihan sumber; tidak meningkatkan navigasi tingkat atas ke origin pihak ketiga, sehingga tidak menggantikan HSTS. Menempatkan direktif itu sendiri dalam mode pelaporan saja tidak berpengaruh; pantau dengan kebijakan pelaporan saja yang terpisah. Basis data CMS—cadangkan dan uji kering penggantian karena penggantian string naif dapat merusak data terserialisasi—beserta plugin, tema, service worker/cache, dan tag iklan/analitik merupakan sumber masalah berulang. Auditlah dalam skala besar dengan crawler dan pelaporan CSP, bukan halaman demi halaman.
TL;DR — Mixed konten adalah ketika sebuah aman
https://halaman memuat sesuatu — sebuah image, sebuah script, sebuah stylesheet — di atas tidak amanhttp://. itu mixes sebuah aman halaman dengan tidak aman pieces, yang defeats poin dari HTTPS. browser block berbahaya jenis (scripts, styles, iframes) dan warn tentang milder jenis (images, media). ini merupakan paling umum hal itu breaks sebuah situs right setelah Anda switch untuk HTTPS, dan perbaiki adalah sederhana: membuat setiap resource muat di atashttps://too.
apa konten campuran adalah
ketika Anda move sebuah situs untuk HTTPS, halaman itself memuat securely. tetapi sebuah halaman adalah tidak pernah
hanya HTML — ini pulls di images, scripts, stylesheets, fonts, videos, dan
sometimes embedded frames dari lainnya places. jika apa pun dari itu pieces adalah masih
diminta di atas biasa http://, Anda memiliki konten campuran: sebuah aman halaman carrying
tidak aman cargo. Evidence for this claim Mixed content occurs when a secure page loads resources over insecure HTTP, and browsers upgrade or block mixed-content requests by resource type. Scope: MDN documents current browser categories and behavior; individual browser versions may differ at the margins. Confidence: high · Verified: MDN: Mixed content
sebagai Google’s own explainer puts ini, “A page has mixed content when its initial HTML is loaded over a secure HTTPS connection, but other resources (such as images, videos, stylesheets, and scripts) are loaded over an insecure HTTP connection.” (terjemahan) “sebuah halaman memiliki konten campuran ketika -nya initial HTML adalah dimuat di atas sebuah aman HTTPS connection, tetapi lainnya resources (such sebagai images, videos, stylesheets, dan scripts) adalah dimuat di atas sebuah tidak aman HTTP connection.”
itu penting karena tidak aman pieces reopen exactly hole HTTPS closed.
Anyone sitting pada network antara pengunjung dan server dapat baca atau tamper
dengan itu http:// permintaan — so padlock di address bar adalah promising lebih
security daripada halaman sebenarnya memiliki.
dua jenis, dan apa browser melakukan tentang them
browser jangan treat semua konten campuran yang sama. mereka sort ini oleh bagaimana much damage sumber daya tidak aman dapat melakukan:
- Konten campuran aktif — scripts, stylesheets, dan iframes. ini dapat control seluruh halaman, so sebuah tampered satu dapat menulis ulang semuanya. browser block ini. ini merupakan apa sebenarnya breaks Anda layout, Anda interactivity, atau sebuah seluruh embedded widget setelah sebuah migration.
- Konten campuran pasif — images, audio, dan video. ini dapat’t take di atas halaman, so browser memiliki secara historis dimuat them tetapi taken away padlock dan ditampilkan sebuah “tidak fully aman” (terjemahan) “tidak fully aman” warning. itu’s berubah — modern browser semakin sering upgrade atau block ini too.
satu hal itu adalah tidak konten campuran: sebuah tautan biasa (<a href="http://…">) untuk sebuah
HTTP halaman. itu hanya navigates Anda somewhere; ini tidak muat sebuah tidak aman piece ke
Anda aman halaman.
cara perbaiki ini
perbaiki adalah almost selalu yang sama: membuat sumber daya tidak aman muat di atas HTTPS.
perubahan http:// untuk https:// di rujukan, atau gunakan path itu tidak hard-code
protocol di semua. sebagian besar dari time resource adalah sudah tersedia di atas HTTPS —
someone hanya left sebuah old http:// URL di sebuah template, sebuah plugin, atau database.
jika Anda ingin sebuah safety net untuk apa pun Anda missed, Anda dapat tambahkan sebuah single line dari
configuration — upgrade-insecure-requests header — itu tells browser untuk
secara diam-diam menulis ulang leftover http:// resource permintaan untuk https:// sebelum ini mengirim
them. ini merupakan sebuah great backstop, tetapi ini merupakan tidak sebuah alasan untuk skip membersihkan up nyata
sumber. Evidence for this claim The upgrade-insecure-requests CSP directive rewrites insecure URLs as secure URLs before requests are made. Scope: MDN documents the directive's rewriting behavior and limits; it does not guarantee that an HTTPS version of every resource exists. Confidence: high · Verified: MDN: CSP upgrade-insecure-requests
ingin full picture — persis resource lists browser block, cara detect
konten campuran dalam skala besar dengan DevTools console dan CSP laporan,
upgrade-insecure-requests dan block-all-mixed-content directives, mengapa Anda CMS
mempertahankan reintroducing ini, dan bagaimana konten campuran interacts dengan HSTS? Switch untuk
Advanced tab.
TL;DR — Mixed konten adalah sebuah HTTPS halaman memuat sebuah sub-sumber daya di atas HTTP. saat ini browser/W3C taxonomy sorts ini ke dapat ditingkatkan dan dapat diblokir konten; lama active/passive split (digunakan below sebagai sebuah blast-radius framing) masih tracks itu divide untuk sebagian besar resource jenis, dengan exceptions — CORS-enabled images,
srcset/picturecandidates, dan IP-host permintaan adalah dapat diblokir bahkan though sebuah biasaimg srcadalah dapat ditingkatkan. Active (scripts, stylesheets, iframes,XMLHttpRequest/fetch, dan apa pun browser executes) adalah diblokir — sebuah tampered script dapat menulis ulang halaman — so ini merupakan launch-day regression untuk perbaiki pertama. Passive (images, audio, video) secara historis dimuat dengan sebuah downgraded indicator dan adalah kini semakin sering auto-ditingkatkan atau diblokir. Anchor tautan dan lainnya tingkat atas HTTP navigasi bukan konten campuran; neither adalah tidak aman downloads, yang adalah sebuah terkait tetapi terpisah boundary. Detect ini di seluruh tiga lapisan — sumber yang diambil, keadaan hasil render/runtime, dan pengguna nyata sessions — oleh crawling HTTPS situs, membaca Chrome DevTools console (persis wording adalah browser/versi spesifik), atau mengumpulkanContent-Security-Policy-Report-Onlyviolations; perbaiki ini oleh memastikan sebuah versi HTTPS sebenarnya berfungsi, lalu pointing setiap sub-sumber daya dihttps://(relative/protocol-relative paths adalah fine setelah Anda’ve verified kepemilikan dan URL dasar perilaku, tidak sebuah universal bawaan).konten-Security-Policy: upgrade-tidak aman-permintaanrewrites di-scopehttp://permintaan sub-sumber daya (including cross-origin ones) untukhttps://sebelum mereka’re dikirim dan sebelum mixed-konten/CSP memeriksa jalankan — sebuah net, tidak sebuah substitute untuk memperbaiki sumber, dengan no HTTP fallback jika upgrade gagal, dan ini melakukan tidak upgrade tingkat atas navigasi untuk pihak ketiga origins, so ini tidak replace HSTS. Putting directive itself di laporkan-hanya mode adalah sebuah no-op — monitor dengan sebuah terpisah laporkan-hanya policy sebagai gantinya. CMS databases (back up dan dry-jalankan apa pun replacement — naive string-replace dapat corrupt serialized data), plugins, themes, service workers/caches, dan ad/analytics tags adalah recurring re-offenders — audit di scale, tidak halaman demi halaman.
HTTPS hub introduces konten campuran sebagai satu dari dua launch-day kegagalan modes dari sebuah migration ( lainnya menjadi redirects). ini merupakan deep dive ini poin untuk — persis resource tiers, detection stack, CSP directives, dan operational alasan ini mempertahankan coming back.
apa counts sebagai konten campuran — dan apa tidak
Mixed konten adalah scoped secara tepat: ini merupakan tentang sub-sumber dayas halaman memuat, tidak tentang tautan halaman berisi. Google’s definition: “A page has mixed content when its initial HTML is loaded over a secure HTTPS connection, but other resources (such as images, videos, stylesheets, and scripts) are loaded over an insecure HTTP connection.” (terjemahan) “sebuah halaman memiliki konten campuran ketika -nya initial HTML adalah dimuat di atas sebuah aman HTTPS connection, tetapi lainnya resources (such sebagai images, videos, stylesheets, dan scripts) adalah dimuat di atas sebuah tidak aman HTTP connection.” Evidence for this claim Mixed content occurs when a secure page loads resources over insecure HTTP, and browsers upgrade or block mixed-content requests by resource type. Scope: MDN documents current browser categories and behavior; individual browser versions may differ at the margins. Confidence: high · Verified: MDN: Mixed content
trap itu reassures people falsely adalah anchor tag. sebuah <a href="http://…">
tautan untuk sebuah HTTP halaman adalah tidak konten campuran — ini navigates untuk sebuah baru document; ini
tidak muat sebuah sumber daya tidak aman ke saat ini aman satu. itu’s benar dari apa pun
tingkat atas navigasi untuk sebuah HTTP halaman, tidak hanya anchor clicks.
ini merupakan masih worth sending outbound tautan untuk HTTPS destinations. di bawah modern
browser-bawaan Referrer-Policy (strict-origin-when-cross-origin), sebuah click dari
sebuah HTTPS halaman untuk sebuah HTTP destination melakukan drop Referer header, yang dapat mangle
referral analytics — tetapi itu perilaku adalah policy- dan browser-dependent, tidak sebuah
universal aturan: sebuah halaman (atau sebuah upstream proxy/CDN) itu sets sebuah looser
Referrer-Policy dapat masih kirim referrer pada itu downgrade. periksa actual
Referrer-Policy di effect sebelum asserting bagaimana much referral data sebuah given situs
loses — tetapi di apa pun kasus, itu’s sebuah terpisah masalah dari konten campuran, tidak mixed
konten itself.
Active vs. passive: distinction itu sets Anda priorities
Modern browser dan W3C documentation classifies konten campuran primarily sebagai dapat ditingkatkan versus dapat diblokir konten — resource jenis browser akan silently retry di atas HTTPS versus ones ini refuses outright — alih-alih lama active/passive split. Active/passive adalah masih berguna shorthand untuk mengapa browser draw itu line (bagaimana much dari halaman resource dapat compromise), dan ini merupakan bagaimana Google’s own explainer frames ini, so ini merupakan dipertahankan below sebagai primary triage framing — hanya jangan treat ini sebagai saat ini official taxonomy ketika Anda perlu alasan tentang sebuah spesifik resource jenis; see exceptions setelah dua lists.
browser classify konten campuran oleh bagaimana much dari halaman sumber daya tidak aman dapat compromise. Google: “Active mixed content poses a greater threat than passive mixed content.” (terjemahan) “Konten campuran aktif poses sebuah greater threat daripada passive mixed konten.” itu single kalimat seharusnya drive Anda triage order.
Konten campuran aktif interacts dengan — dan dapat take di atas — seluruh halaman. Google describes ini sebagai “scripts, stylesheets, iframes, and any other code the browser can download and execute.” (terjemahan) “scripts, stylesheets, iframes, dan apa pun lainnya code browser dapat unduhan dan execute.” dalam praktik active list adalah:
<script src="http://…">— worst kasus; sebuah intercepted script dapat menulis ulang entire DOM, exfiltrate form data, atau inject konten.<link rel="stylesheet" href="http://…">— CSS dapat hide, reposition, atau overlay apa pun, so ini merupakan treated sebagai active.<iframe src="http://…">— sebuah embedded tidak aman document di dalam Anda aman satu.XMLHttpRequest/fetch()untukhttp://— tidak aman data halaman lalu acts pada.- Web fonts,
<object>/<embed>resources, dan<link>variants itu pull di executable atau layout-controlling konten.
karena sebuah tampered active resource dapat menulis ulang halaman, “Most browsers already block this type of content by default to protect users.” (terjemahan) “sebagian besar browser sudah block ini jenis dari konten oleh bawaan untuk protect pengguna.” itu’s mengapa active mixed konten adalah apa visibly breaks hal setelah sebuah migration — sebuah diblokir stylesheet strips Anda CSS, sebuah diblokir script kills interactivity, sebuah diblokir iframe leaves sebuah hole. perbaiki active pertama. ini merupakan sebuah functional bug, tidak hanya sebuah security nag.
Passive (display) konten campuran — Google: “including images, video, and audio” (terjemahan) “including images, video, dan audio” — “doesn’t interact with the rest of the page.” (terjemahan) “tidak interact dengan rest dari halaman.” sebuah intercepted image dapat menjadi swapped tetapi dapat’t seize document. So secara historis browser dimuat ini dan hanya downgraded indicator: “Until recently, passive mixed content was loaded in all browsers, because blocking it would have broken many websites. This is now beginning to change.” (terjemahan) “Until recently, konten campuran pasif adalah dimuat di semua browser, karena blocking ini akan memiliki broken banyak situs web. ini merupakan kini beginning untuk perubahan.” direction dari travel di seluruh browser adalah menuju auto-upgrading passive resources untuk HTTPS tempat mungkin dan blocking apa dapat’t menjadi ditingkatkan, so “passive = tidak berbahaya” (terjemahan) “passive = tidak berbahaya” adalah no longer sebuah safe assumption untuk bangun pada.
Exceptions active/passive split tidak capture
dapat ditingkatkan/dapat diblokir line memiliki several exceptions itu jangan ikuti umum “images upgrade, scripts block” (terjemahan) “images upgrade, scripts block” pattern above — ini merupakan kasus itu sebenarnya trip people up dalam praktik:
- CORS-enabled image permintaan adalah force-gagal, tidak ditingkatkan. sebuah biasa
<img src="http://…">adalah dapat ditingkatkan, tetapi sebuah image permintaan dibuat dengancrossorigintetapkan adalah treated differently oleh mixed-konten algorithm dan gagal alih-alih silently upgrading. srcsetdan<picture>candidates adalah dapat diblokir, tidak dapat ditingkatkan. yang sama image, diminta melalui sebuah responsive-image mechanism alih-alih sebuah biasasrc, falls ke dapat diblokir category — jangan assume setiap image rujukan behaves sama cara.- IP-address hosts adalah diblokir, tidak ditingkatkan, bahkan untuk sebuah otherwise-dapat ditingkatkan
resource jenis. sebuah rujukan like
http://203.0.113.5/logo.pngtidak get automatic-upgrade treatment sebuah domain-hosted equivalent akan. - Nested contexts dan workers adalah di cakupan. Mixed-konten memeriksa apply di dalam iframes dan di dalam service worker/shared worker too, tidak hanya top document — sebuah worker mengambil sebuah tidak aman script adalah masih konten campuran.
- Local dan loopback origins memiliki mereka own nuance.
localhost, loopback addresses, danfile://contexts adalah “potentially trustworthy origins” (terjemahan) “potentially trustworthy origins” di bawah spec bahkan tanpa TLS, so sebuah sederhana HTTP-vs-HTTPS heuristic tidak map cleanly onto local development environments. - tidak aman downloads adalah sebuah terkait tetapi terpisah boundary. sebuah unduhan initiated
dari sebuah aman halaman di atas
http://adalah sebuah nyata risk, tetapi ini merupakan governed oleh -nya own unduhan-security handling, tidak sub-sumber daya mixed-konten aturan di ini bagian. - Top-tingkat HTTP navigasi masih bukan konten campuran, including anchor-tautan kasus above — itu’s sebuah property dari navigasi, tidak dari sebuah dimuat sub-sumber daya, however banyak dari ini lainnya exceptions apply.
Detecting konten campuran — seluruh stack
tidak ada single button, dan setiap lapisan below jawaban sebuah berbeda pertanyaan — sebuah bersih hasil di satu lapisan tidak jelas yang lain. Diagnose sumber yang diambil (apa raw HTML sebenarnya rujukan), keadaan hasil render/runtime (apa browser permintaan once ini merupakan parsed halaman dan jalankan -nya scripts), dan pengguna nyata sessions (apa happens untuk sebuah pengunjung behind sebuah consent banner, sebuah geo-redirect, sebuah login wall, atau sebuah pihak ketiga tag itu hanya fires di bawah spesifik conditions) separately. Lapisan ini berkembang dari “one page” (terjemahan) “satu halaman tertentu” menjadi “whole site” (terjemahan) “keseluruhan situs web”:
-
** Chrome DevTools console** (keadaan hasil render/runtime). muat HTTPS halaman dan open console. diblokir konten campuran aktif logs sebuah message along lines dari “Mixed Content: The page … was loaded over HTTPS, but requested an insecure … This request has been blocked; the content must be served over HTTPS.” (terjemahan) “Mixed konten: halaman … adalah dimuat di atas HTTPS, tetapi diminta sebuah tidak aman … ini permintaan telah diblokir; konten harus menjadi disajikan di atas HTTPS.” Passive itu gets dimuat logs sebuah warning alih-alih sebuah block. Security panel (atau Issues tab) groups ini up per halaman. Fast untuk spot-memeriksa dan untuk memastikan sebuah spesifik perbaiki — tetapi treat persis message wording, panel layout, dan bahkan yang resource jenis get diblokir sebagai browser- dan versi-spesifik; ini merupakan confirmed terhadap Chrome sebagai dari 2026-07 dan Anda harus verify saat ini wording pada actual browser/versi Anda’re diagnosing alih-alih quoting ini sebagai sebuah fixed UI string, dan expect Firefox, Safari, dan Edge untuk differ.
-
sebuah situs crawler (sumber yang diambil, dalam skala besar). DevTools adalah per-halaman; sebuah crawl adalah situs-wide. Ahrefs situs Audit dan Screaming Frog both flag halaman itu rujukan
http://sub-sumber dayas pada sebuah HTTPS situs — satu-satunya realistis cara untuk temukan mixed konten di seluruh thousands dari URLs. ini merupakan primary alat untuk sebuah audit, tetapi ini merupakan masih membaca sumber: sebuah crawl passing bersih tidak prove dirender halaman atau sebuah nyata session adalah bersih too — record yang browser/alat/versi produced sebuah given hasil alih-alih pelaporan satu unqualified pass/fail. -
CSP violation pelaporan (pengguna nyata sessions). Anda dapat membuat browser dari nyata pengunjung laporkan konten campuran back untuk Anda, yang catches resources itu hanya muat pada certain halaman, untuk certain pengguna, di bawah certain consent states, atau dari pihak ketiga tags Anda tidak control — lapisan neither sebuah crawl nor sebuah single DevTools periksa dapat reach. web.dev: “You can use content security policy to collect reports of mixed content on your site. To enable this feature, set the
Content-Security-Policy-Report-Onlydirective by adding it as a response header for your site.” (terjemahan) “Anda dapat gunakan konten security policy untuk kumpulkan laporan dari konten campuran pada Anda situs. untuk enable ini fitur, atur direktifContent-Security-Policy-Report-Onlydengan menambahkannya sebagai header respons untuk Anda situs.” laporkan-hanya mode laporan violations tanpa enforcing policy, so Anda dapat mengukur masalah di production sebelum Anda turn pada blocking. ( mechanism adalah modernreport-to/Reporting-Endpointsheader, atau lamareport-uri. Note ini merupakan sebuah berbeda, umum-purpose laporkan-hanya policy daripadaupgrade-insecure-requestsitself — putting itu spesifik directive di laporkan-hanya mode tidak berfungsi, sebagai covered below.)
gunakan semua tiga: DevTools untuk verify sebuah dirender halaman, sebuah crawler untuk inventory diambil sumber, CSP laporan untuk catch nyata-session panjang tail itu hanya menampilkan up di wild. satu crawl passing adalah evidence tentang sumber, tidak sebuah guarantee itu setiap consent state, ad-tech variant, personalization branch, atau worker adalah bersih.
memperbaiki di sumber
nyata perbaiki starts sebelum Anda touch sebuah single rujukan: verify HTTPS equivalent sebenarnya exists, presents sebuah valid certificate, dan mengembalikan konten Anda expect — jangan assume swapping scheme adalah safe hanya karena domain resolves. Once itu’s confirmed, setiap sub-sumber daya rujukan seharusnya resolve di atas HTTPS. Options below adalah di rough order dari preference, tetapi setiap satu masih depends pada kepemilikan dan konteks, tidak hanya string Anda jenis:
- Absolute HTTPS URLs — perubahan
http://cdn.example.com/app.jsuntukhttps://cdn.example.com/app.js. Explicit dan unambiguous; safest bawaan ketika Anda’re tidak certain tentang serving konteks below. - Root-relative atau relative paths — untuk resources Anda own pada yang sama situs,
/assets/app.jsinherits halaman’s scheme automatically. Google’s HTTPS guidance: “Make sure intrasite URLs and external URLs don’t depend on a specific protocol. Use relative paths or leave out the protocol as in//example.com/something.js.” (terjemahan) “pastikan intrasite URLs dan external URLs jangan depend pada sebuah spesifik protocol. gunakan jalur relatif atau hilangkan protokol seperti pada//example.com/something.js.” Treat ini sebagai bersyarat, tidak sebuah universal recommendation: ini hanya holds once Anda’ve confirmed Anda sebenarnya own resource (sebuah relative path untuk sebuah pihak ketiga asset tidak membuat sense), itu halaman’s nyata base URL resolves cara Anda expect (sebuah<base>tag, sebuah proxied path, atau sebuah embedded/AMP konteks dapat perubahan apa “relative” (terjemahan) “relative” berarti), dan itu tidak ada downstream reconstructs URL di sebuah cara itu reintroduceshttp://— client-side code membangun sebuah URL dariwindow.locationatau sebuah stored absolute nilai, misalnya. - Protocol-relative URLs (
//example.com/something.js) masih berfungsi, tetapi mereka’re tidak preferred universal perbaiki — gate them pada yang sama kepemilikan/URL dasar memeriksa above, tidak hanya habit. pada sebuah semua-HTTPS web, sebuah explicithttps://adalah biasanya clearer dan menghindari surprises jika file adalah ever opened dari sebuah non-HTTP konteks; reach untuk protocol-relative hanya tempat Anda memiliki sebuah spesifik alasan tidak untuk hard-code scheme.
dalam skala besar Anda almost tidak pernah hand-edit templates satu oleh satu — tetapi jangan jalankan sebuah
unguarded database string-replacement terhadap production either. http://yourdomain
→ https://yourdomain looks like sebuah sederhana temukan-dan-replace, dan untuk biasa-text
fields ini sering adalah safe, tetapi CMS konten dapat menjadi serialized atau structured (PHP
serialized arrays, JSON blobs, block-editor data) tempat sebuah naive substring swap
corrupts record alih-alih memperbaiki ini. gunakan application-aware tooling itu
understands serialization format, back up database pertama, dan
dry-jalankan replacement so Anda dapat review affected rows sebelum committing.
lalu perbaiki handful dari template/config files itu emit URLs; crawler dan
CSP laporan mop up stragglers.
upgrade-insecure-requests: safety net (dan -nya limits)
proactive backstop adalah sebuah konten-Security-Policy directive. web.dev: “The
upgrade-insecure-requests CSP directive instructs the browser to upgrade insecure
URLs before making network requests.” (terjemahan) “
direktif CSP upgrade-insecure-requests memerintahkan browser untuk meningkatkan
URL yang tidak aman sebelum membuat permintaan jaringan.” Tetapkan header:
Content-Security-Policy: upgrade-insecure-requestsPer MDN, ini “instructs user agents to treat all of a site’s insecure URLs (those served over HTTP) as though they have been replaced with secure URLs (those served over HTTPS).” (terjemahan) “instructs pengguna agents untuk treat semua dari sebuah situs’s URL tidak aman (itu disajikan di atas HTTP) sebagai though mereka telah replaced dengan URL aman (itu disajikan di atas HTTPS).” Concretely, MDN says ini upgrades: “requests to load resources (such as images, scripts, or fonts),” (terjemahan) “permintaan untuk muat resources (such sebagai images, scripts, atau fonts),”; “navigation requests (such as link targets) which are same-origin with the document,” (terjemahan) “permintaan navigasi—seperti tujuan tautan—yang memiliki origin sama dengan dokumen,”; “navigation requests in nested browsing contexts, such as iframes,” (terjemahan) “permintaan navigasi dalam konteks penjelajahan bersarang, seperti iframe,”; dan “form submissions.” (terjemahan) “pengiriman formulir.” Evidence for this claim The upgrade-insecure-requests CSP directive rewrites insecure URLs as secure URLs before requests are made. Scope: MDN documents the directive's rewriting behavior and limits; it does not guarantee that an HTTPS version of every resource exists. Confidence: high · Verified: MDN: CSP upgrade-insecure-requests
dua operational detail penting beyond itu quote. pertama, sub-sumber daya upgrade bukan limited untuk origin yang sama permintaan — ini merupakan navigasi upgrade itu’s origin yang sama-hanya per quote above; biasa permintaan sub-sumber daya get rewritten di seluruh origins too, so sebuah CDN-hosted script atau sebuah pihak ketiga font gets ditingkatkan, tidak hanya sama-situs assets. kedua, menulis ulang happens sebelum browser’s mixed-konten dan CSP memeriksa evaluate permintaan, yang adalah mengapa sebuah resource itu akan otherwise menjadi diblokir outright sebagai konten campuran dapat muat cleanly once ini merupakan telah ditingkatkan — upgrade pre-empts block.
tiga limits Anda harus tidak paper di atas:
- ini melakukan tidak upgrade pihak ketiga tingkat atas navigasi. MDN: “However, top-level
navigation requests whose target is a different origin will not be upgraded.” (terjemahan) “However, tingkat atas
navigasi permintaan whose target adalah sebuah berbeda origin akan tidak menjadi ditingkatkan.”
karena itu, ini merupakan secara eksplisit tidak sebuah replacement untuk HSTS: “The
upgrade-insecure-requestsdirective will not ensure that users visiting your site via links on third-party sites will be upgraded to HTTPS for the top-level navigation and thus does not replace theStrict-Transport-Security(HSTS) header.” (terjemahan) “ direktifupgrade-insecure-requeststidak menjamin bahwa pengguna yang mengunjungi situs Anda melalui tautan di situs pihak ketiga akan dialihkan ke HTTPS untuk navigasi tingkat atas; karena itu, direktif tersebut tidak menggantikan headerStrict-Transport-Security(HSTS).” (Perbedaan ini dijelaskan lebih lanjut di bawah.) - ini merupakan sebuah net, tidak sebuah perbaiki, dan ini tidak fall back. jika resource benar-benar
bukan tersedia di atas HTTPS, ditingkatkan permintaan hanya gagal outright — ini melakukan
tidak fall back untuk original
http://versi. membersihkan sumber adalah masih job; directive covers apa Anda missed, tidak apa’s benar-benar broken. - laporkan-hanya mode tidak perform upgrade — ini merupakan sebuah no-op. Putting
upgrade-insecure-requestsdi dalam sebuahContent-Security-Policy-Report-Onlyheader adalah ignored oleh browser: tidak ada gets rewritten, dan tidak ada gets reported untuk ini either. jika Anda ingin visibilitas ke apa upgrade akan affect sebelum Anda enforce ini, jalankan sebuah terpisah, umum-purpose laporkan-hanya policy itu laporan disallowedhttp://destinations (yang samadefault-src https:laporkan-hanya approach digunakan untuk detection above) — Anda dapat’t get itu visibilitas oleh membuatupgrade-insecure-requestsitself laporkan-hanya.
block-all-mixed-content — mostly historical
There’s sebuah companion directive, block-all-mixed-content, yang — per MDN —
“prevents loading any assets over HTTP when the page uses HTTPS,” (terjemahan) “mencegah memuat apa pun assets di atas HTTP ketika halaman menggunakan HTTPS,” including “both
blockable and upgradable mixed content,” (terjemahan) “both
dapat diblokir dan dapat ditingkatkan konten campuran,” dan applies untuk iframes too. dalam praktik ini merupakan
telah superseded. MDN marks ini deprecated dan “obsolete in the specification,” (terjemahan) “obsolete di specification,”
noting: “Content that isn’t blocked is now always upgraded to a secure connection, so
this directive is not needed.” (terjemahan) “konten itu bukan diblokir adalah kini selalu ditingkatkan untuk sebuah aman connection, so
ini directive adalah tidak needed.” Reach untuk upgrade-insecure-requests; treat
block-all-mixed-content sebagai legacy Anda mungkin inherit, tidak sesuatu untuk deploy baru.
jika Anda sudah kirim upgrade-insecure-requests, block-all-mixed-content memiliki
tidak ada left untuk melakukan untuk ditingkatkan permintaan — upgrade menulis ulang happens pertama, so oleh
time sebuah block-semua periksa akan jalankan, permintaan memiliki sudah telah ditingkatkan (atau memiliki
sudah gagal). ini merupakan tidak hanya legacy; ini merupakan redundant wherever UIR adalah sudah
deployed.
mengapa Anda CMS mempertahankan reintroducing ini
Mixed konten bukan sebuah satu-time cleanup — ini recurs, karena several sistem secara diam-diam
re-inject http:// URLs setelah Anda think Anda’re done:
- ** konten database.** di WordPress, Drupal, dan sebagian besar CMSes, editors paste
images dan embeds dengan absolute
http://URLs straight ke post bodies. itu live di database, tidak di sebuah template, so sebuah code-tingkat perbaiki tidak pernah touches them — hence DB search-dan-replace. - Themes dan plugins. sebuah theme atau plugin itu hard-codes sebuah
http://asset URL (sebuah font, sebuah script, sebuah background image) reintroduces konten campuran pada setiap halaman ini renders, dan sebuah plugin update dapat bring ini back setelah Anda’ve cleaned ini. - Ad tech, analytics, dan pihak ketiga tags. Tag managers, ad networks, chat
widgets, dan analytics snippets muat mereka own sub-sumber dayas — dan jika sebuah vendor’s
tag masih panggilan
http://, ini merupakan konten campuran Anda dapat’t perbaiki di Anda own codebase. ini merupakan exactly panjang tail CSP pelaporan adalah untuk; durable perbaiki adalah pressing vendor untuk sajikan di atas HTTPS (atau dropping tag). jika sebuah vendor memiliki no berfungsi HTTPS endpoint, durable choices adalah yang sama tiga: get them untuk perbaiki ini, replace dependency, atau drop ini — there bukan sebuah fourth option itu mempertahankan tidak aman versi menjalankan safely. - Service workers dan caches. sebuah service worker dapat cache sebuah respons (atau
permintaan itself) itu masih poin di
http://, dan ini’ll pertahankan serving itu stale rujukan pada repeat visits bahkan setelah Anda perbaiki sumber. Reproduce sebuah suspected perbaiki di sebuah incognito/uncached session sebelum concluding ini didn’t berfungsi, dan membuat sure sebuah deploy itu perubahan reURL sumber juga bumps service worker/cache versi so stale entries get evicted alih-alih replayed. - Hard-coded
http://di old konten dan email/print templates itu get reused.
operational takeaway: bake detection ke sebuah recurring audit (crawler + CSP laporan), tidak sebuah launch-day checklist Anda jalankan once.
bagaimana konten campuran interacts dengan HSTS
Mixed konten dan HSTS solve adjacent tetapi berbeda masalah, dan conflating them adalah sebuah umum mistake:
upgrade-insecure-requestsfixes sub-sumber dayas Anda own aman halaman permintaan — ini upgrades images/scripts/iframes halaman pulls di.- HSTS (
Strict-Transport-Security) forces * tingkat atas navigasi untuk Anda situs* onto HTTPS — bahkan very pertama permintaan, sebelum apa pun redirect fires — dan defends terhadap SSL-stripping. Google frames HSTS sebagai sebuah cara untuk “avoid the cost of the 301 redirect” (terjemahan) “hindari cost dari 301 redirect” dan untuk “defeat attacks like SSL Stripping.” (terjemahan) “defeat attacks like SSL Stripping.”
mereka jangan substitute untuk setiap lainnya. sebagai MDN spells out, upgrade-insecure-requests
“will not ensure that users visiting your site via links on third-party sites will
be upgraded to HTTPS for the top-level navigation and thus does not replace the
Strict-Transport-Security (HSTS) header.” (terjemahan) “akan tidak ensure itu pengguna visiting Anda situs via tautan pada pihak ketiga situs akan
menjadi ditingkatkan untuk HTTPS untuk tingkat atas navigasi dan thus melakukan tidak replace
header Strict-Transport-Security (HSTS).” Konfigurasi yang diperkuat sepenuhnya menggunakan keduanya:
upgrade-insecure-requests (atau bersih URL sumber) so aman halaman memiliki no tidak aman
cargo, dan HSTS so nobody reaches situs di atas HTTP di pertama place. dan
usual HSTS caution masih applies — Google: “Don’t enable HSTS until you’re certain
your site operation is robust enough to avoid ever deploying HTTPS with certificate
validation errors,” (terjemahan) “jangan enable HSTS until Anda’re certain
Anda situs operation adalah robust enough untuk hindari ever deploying HTTPS dengan certificate
validation errors,” dan preloading adalah close untuk sebuah satu-cara door.
melakukan konten campuran hurt SEO directly?
Lead dengan langsung effects, karena mereka’re ones Anda sebenarnya control: mixed konten adalah pertama sebuah security dan functional masalah. diblokir active mixed konten breaks rendering dan interactivity outright — sebuah missing stylesheet atau script adalah sebuah nyata regression regardless dari apa sebuah mesin pencari membuat dari ini. itu’s alasan enough untuk perbaiki ini sebelum Anda think tentang rankings di semua.
Konsekuensi SEO memang ada, tetapi bersyarat, bukan dampak langsung atau jaminan. Panduan
resmi Google saat ini tidak menetapkan bahwa memperbaiki konten campuran memberi peningkatan
peringkat langsung. Sinyal peringkat HTTPS didasarkan pada skema URL—apakah URL diawali
https://—bukan pemeriksaan kebersihan setiap sub-sumber daya; satu gambar tidak aman tidak
serta-merta menghilangkan “the HTTPS signal” (terjemahan) “sinyal HTTPS”. Namun, dampak
lanjutan tetap dapat terjadi tergantung pada bagian yang rusak. Jika Googlebot merender halaman
yang CSS atau JavaScript-nya diblokir sebagai konten campuran, Google dapat mengindeks versi
yang rusak atau tidak lengkap. Indikator keamanan yang diturunkan juga dapat merusak kepercayaan,
keterlibatan, dan konversi pengguna meskipun peringkat tidak berubah. Preferensi umum Google
untuk URL kanonis HTTPS pun bersyarat: sertifikat tidak valid, dependensi tidak aman, pengalihan
HTTPS-ke-HTTP, atau sinyal kanonis yang bertentangan dapat mengubah URL yang dipilih tanpa
bergantung khusus pada konten campuran. Verifikasi dampak rendering, pengindeksan,
kanonikalisasi, dan analitik pada halaman Anda sendiri; jangan menjanjikannya sebagai hasil
universal. Perbaiki konten campuran untuk
security dan functional alasan pertama.
ini sits di dalam broader HTTPS untuk SEO topic, yang covers migration playbook, peringkat-signal weight, dan HSTS di full; jika Anda’re juga debugging certificate itself (chain errors, expiry, DV/OV/EV), itu’s sebuah sibling deep dive.
Ringkasan AI
Ringkasan versi Lanjutan:
- Konten campuran adalah halaman HTTPS yang memuat sub-sumber daya melalui HTTP. Istilah ini mencakup sumber daya yang dimuat halaman, bukan tautan yang ada di dalamnya. Tautan jangkar ke halaman HTTP dan navigasi HTTP tingkat atas bukan konten campuran; unduhan tidak aman merupakan masalah terkait tetapi terpisah.
- Taksonomi saat ini adalah dapat ditingkatkan atau dapat diblokir. Pembagian aktif/pasif lebih
lama, tetapi tetap berguna untuk menggambarkan dampak. Konten aktif—skrip, stylesheet, iframe,
XMLHttpRequest/fetch, dan semua yang dijalankan browser—diblokir karena skrip yang disusupi; gambar biasa melaluiimg srcdapat ditingkatkan, tetapi pengecualian di bawah tetap berlaku. dapat menulis ulang halaman; perbaiki lebih dahulu. Konten pasif—gambar, audio, dan video—dahulu dimuat dengan indikator keamanan yang diturunkan, tetapi kini makin sering ditingkatkan otomatis atau diblokir. Gambar berkemampuan CORS, kandidatsrcset/<picture>, host berupa alamat IP, konteks bersarang, worker, serta origin lokal/loopback memiliki aturan khusus. - Deteksi di tiga lapisan: sumber yang diambil melalui crawler, keadaan hasil render/runtime
melalui konsol dan panel Security Chrome DevTools, serta sesi pengguna nyata melalui laporan
pelanggaran
Content-Security-Policy-Report-Only. Redaksi pesan bergantung pada browser dan versinya; hasil bersih pada satu lapisan tidak membuktikan dua lapisan lain bersih. - Perbaiki sumber setelah memastikan versi HTTPS berfungsi. Arahkan setiap sub-sumber daya ke
https://. Gunakan jalur relatif atau relatif-protokol hanya setelah kepemilikan dan perilaku URL dasar halaman terverifikasi. Dalam skala besar, cadangkan basis data dan lakukan uji kering sebelum penggantian; penggantian string naif dapat merusak data CMS terserialisasi atau terstruktur. Perbarui service worker dan versi cache agar rujukanhttp://lama tidak diputar ulang. upgrade-insecure-requestsmenulis ulang permintaan sub-sumber dayahttp://dalam cakupan, termasuk lintas origin, menjadihttps://sebelum dikirim dan sebelum pemeriksaan konten campuran/CSP. Direktif ini tidak memiliki fallback HTTP, tidak meningkatkan navigasi tingkat atas ke origin pihak ketiga, dan tidak menggantikan HSTS. Mode pelaporan saja pada direktif itu sendiri tidak berpengaruh; gunakan kebijakan pelaporan saja yang terpisah untuk pemantauan.block-all-mixed-contentsudah deprecated/usang dan menjadi redundan ketikaupgrade-insecure-requestsditerapkan.- Masalah dapat muncul kembali melalui basis data CMS, tema/plugin, service worker/cache, serta tag iklan dan analitik. Auditlah secara berkala.
- Dampak SEO bersyarat, bukan langsung. Google tidak menetapkan peningkatan peringkat langsung dari perbaikan konten campuran, dan sinyal HTTPS didasarkan pada skema URL. Namun, sumber daya aktif yang diblokir dapat membuat Googlebot merender atau mengindeks halaman rusak; indikator keamanan yang turun dapat mengurangi kepercayaan; dan preferensi kanonis HTTPS bergantung pada validitas sertifikat serta konsistensi sinyal lain.
Official documentation
Primary-sumber documentation dari Google dan browser/standards teams.
Google / web.dev
- apa adalah konten campuran? — definition, dan active vs. passive split dengan browser perilaku.
- memperbaiki konten campuran — finding ini, memperbaiki sub-sumber daya URLs,
upgrade-insecure-requests, dan CSP pelaporan. - Enable HTTPS pada Anda server — relative/protocol-relative URLs, HTTP
<iframe>note, dan HSTS guidance. - Preventing konten campuran adalah satu bagian dari Google’s HTTPS guidance — surrounding situs-move/migration playbook konten campuran fixes sit di dalam.
MDN / standards
- CSP:
upgrade-insecure-requests— apa ini upgrades, apa ini tidak, dan mengapa ini tidak replace HSTS. - CSP:
block-all-mixed-content— deprecated/obsolete blocking directive. - MDN — Mixed konten — browser-perilaku rujukan untuk dapat diblokir vs. dapat ditingkatkan konten.
- konten Security Policy (CSP) — header ini directives live di, including pelaporan.
Quotes dari sumber
pada—record definitions dari Google’s web.dev dan MDN standards docs. setiap tautan adalah sebuah deep tautan itu jumps untuk quoted passage tempat platform mendukung ini.
Google / web.dev — apa konten campuran adalah
- “A page has mixed content when its initial HTML is loaded over a secure HTTPS connection, but other resources (such as images, videos, stylesheets, and scripts) are loaded over an insecure HTTP connection.” (terjemahan) “sebuah halaman memiliki konten campuran ketika -nya initial HTML adalah dimuat di atas sebuah aman HTTPS connection, tetapi lainnya resources (such sebagai images, videos, stylesheets, dan scripts) adalah dimuat di atas sebuah tidak aman HTTP connection.” sumber
- “Active mixed content poses a greater threat than passive mixed content.” (terjemahan) “Konten campuran aktif poses sebuah greater threat daripada konten campuran pasif.” sumber
- Konten campuran aktif “includes scripts, stylesheets, iframes, and any other code the browser can download and execute,” (terjemahan) “mencakup scripts, stylesheets, iframes, dan apa pun lainnya code browser dapat unduhan dan execute,” dan “Most browsers already block this type of content by default to protect users.” (terjemahan) “sebagian besar browser sudah block ini jenis dari konten oleh bawaan untuk protect pengguna.” sumber
- Konten campuran pasif, “including images, video, and audio,” (terjemahan) “including images, video, dan audio,” “doesn’t interact with the rest of the page.” (terjemahan) “tidak interact dengan rest dari halaman.” dan: “Until recently, passive mixed content was loaded in all browsers, because blocking it would have broken many websites. This is now beginning to change.” (terjemahan) “Until recently, konten campuran pasif adalah dimuat di semua browser, karena blocking ini akan memiliki broken banyak situs web. ini merupakan kini beginning untuk perubahan.” sumber
Google / web.dev — detecting dan memperbaiki
- “You can use content security policy to collect reports of mixed content on your site. To enable this feature, set the
Content-Security-Policy-Report-Onlydirective by adding it as a response header for your site.” (terjemahan) “Anda dapat menggunakan Content Security Policy untuk mengumpulkan laporan konten campuran di situs Anda. Untuk mengaktifkan fitur ini, tetapkan direktifContent-Security-Policy-Report-Onlydengan menambahkannya sebagai header respons untuk situs Anda.” sumber - “The
upgrade-insecure-requestsCSP directive instructs the browser to upgrade insecure URLs before making network requests.” (terjemahan) “Direktif CSPupgrade-insecure-requestsmemerintahkan browser untuk meningkatkan URL yang tidak aman sebelum membuat permintaan jaringan.” sumber - “Make sure intrasite URLs and external URLs don’t depend on a specific protocol. Use relative paths or leave out the protocol as in
//example.com/something.js.” (terjemahan) “Pastikan URL internal dan eksternal tidak bergantung pada protokol tertentu. Gunakan jalur relatif atau hilangkan protokol seperti pada//example.com/something.js.” sumber
MDN — upgrade-insecure-requests dan -nya limits
- “The HTTP Content-Security-Policy (CSP)
upgrade-insecure-requestsdirective instructs user agents to treat all of a site’s insecure URLs (those served over HTTP) as though they have been replaced with secure URLs (those served over HTTPS).” (terjemahan) “Direktif HTTP Content-Security-Policy (CSP)upgrade-insecure-requestsmemerintahkan agen pengguna untuk memperlakukan semua URL tidak aman milik situs—yang disajikan melalui HTTP—seolah-olah telah diganti dengan URL aman yang disajikan melalui HTTPS.” sumber - “However, top-level navigation requests whose target is a different origin will not be upgraded.” (terjemahan) “However, tingkat atas navigasi permintaan whose target adalah sebuah berbeda origin akan tidak menjadi ditingkatkan.” sumber
- “The
upgrade-insecure-requestsdirective will not ensure that users visiting your site via links on third-party sites will be upgraded to HTTPS for the top-level navigation and thus does not replace theStrict-Transport-Security(HSTS) header.” (terjemahan) “Direktifupgrade-insecure-requeststidak menjamin bahwa pengguna yang mengunjungi situs Anda melalui tautan di situs pihak ketiga akan dialihkan ke HTTPS untuk navigasi tingkat atas; karena itu, direktif tersebut tidak menggantikan headerStrict-Transport-Security(HSTS).” sumber
MDN — block-all-mixed-content adalah legacy
- “The HTTP Content-Security-Policy (CSP)
block-all-mixed-contentdirective prevents loading any assets over HTTP when the page uses HTTPS.” (terjemahan) “Direktif HTTP Content-Security-Policy (CSP)block-all-mixed-contentmencegah pemuatan aset melalui HTTP ketika halaman menggunakan HTTPS.” Namun, direktif ini ditandai deprecated dan “obsolete in the specification,” (terjemahan) “usang dalam spesifikasi,” karena “Content that isn’t blocked is now always upgraded to a secure connection, so this directive is not needed.” (terjemahan) “Konten yang tidak diblokir kini selalu ditingkatkan ke koneksi aman, sehingga direktif ini tidak diperlukan.” sumber
Mixed-konten checklist
jalankan ini selama dan setelah sebuah HTTP→HTTPS migration, lalu pada sebuah recurring basis:
temukan ini
- dimuat key templates (home, product, artikel, checkout) di atas HTTPS dengan Chrome DevTools console open dan noted setiap “Mixed konten” (terjemahan) “Mixed konten” message.
- Ran sebuah full crawl (Ahrefs situs Audit atau Screaming Frog) dan pulled list
dari halaman referencing
http://sub-sumber dayas. - tetapkan
Content-Security-Policy-Report-Onlydengan sebuah pelaporan endpoint untuk catch production panjang tail (per-pengguna, per-halaman, dan pihak ketiga tags).
perbaiki ini (active pertama)
- semua active rujukan fixed:
<script>,<link rel="stylesheet">,<iframe>,fetch/XMLHttpRequest, fonts — ini merupakan diblokir, so mereka break halaman. - semua passive rujukan fixed:
<img>,<audio>,<video>, dan mereka<source>/poster URLs. - CMS database replacement (
http://yourdomain→https://yourdomain) untuk pasted konten — backed up, dry-jalankan dengan application-aware tooling, tidak sebuah raw string-replace terhadap serialized/structured fields. - Theme/plugin hard-coded
http://asset URLs ditemukan dan patched. - Service worker/cache entries reproduced di sebuah uncached session, dan
cache/service-worker versi bumped so stale
http://rujukan jangan replay. - pihak ketiga tags (ads, analytics, chat, embeds) confirmed untuk muat di atas HTTPS — atau vendor pushed / tag dropped.
Backstop dan verify
-
Content-Security-Policy: upgrade-insecure-requestsheader tetapkan sebagai sebuah safety net (understanding ini melakukan tidak replace HSTS). - Re-di-crawl dan re-diperiksa console — zero diblokir active resources, bersih padlock pada diperiksa halaman.
- Mixed-konten detection ditambahkan untuk recurring audit, tidak hanya launch checklist (plugin updates dan baru konten reintroduce ini).
yang perbaiki melakukan ini mixed-konten kasus perlu?
berfungsi down dari symptom.
adalah tidak aman hal sebuah resource halaman memuat, atau sebuah tautan halaman berisi?
- sebuah tautan (
<a href="http://…">) → tidak konten campuran. Leave ini (optionally poin ini di HTTPS untuk referral-data cleanliness). Stop here. - sebuah dimuat resource (script, style, iframe, image, font, media,
fetch) → pertahankan going.
adalah resource tersedia di atas HTTPS?
- Yes, dan Anda’ve verified ini (valid cert, mengembalikan intended konten) →
perubahan rujukan untuk
https://( safe bawaan), atau sebuah relative / protocol-relative path hanya jika Anda own resource dan memiliki diperiksa halaman’s URL dasar perilaku. ini merupakan nyata perbaiki. Done. - No / unsure → adalah ini pertama-party (Anda own asset)?
- pertama-party → sajikan ini di atas HTTPS (ini merupakan Anda server; Anda dapat). lalu perbaiki rujukan sebagai above.
- pihak ketiga (sebuah vendor tag, ad, embed) → tanyakan vendor untuk sebuah HTTPS endpoint;
jika mereka jangan memiliki satu, replace atau drop tag.
upgrade-insecure-requestsakan try untuk upgrade ini, tetapi jika vendor memiliki no HTTPS versi ditingkatkan permintaan hanya gagal.
adalah ini active atau passive?
- Active (script / stylesheet / iframe /
fetch/ font) → highest priority — ini merupakan diblokir, so halaman adalah functionally broken until Anda perbaiki ini. - Passive (image / audio / video) → perbaiki ini too, tetapi ini merupakan lower urgency (padlock downgrade / mungkin future block, tidak sebuah immediate break).
melakukan Anda ingin sebuah safety net untuk whatever Anda missed?
- tetapkan
Content-Security-Policy: upgrade-insecure-requests. Remember: net, tidak substitute — dan ini tidak cover pihak ketiga tingkat atas navigasi, so ini merupakan tidak sebuah stand-di untuk HSTS.
melakukan Anda juga perlu untuk force tingkat atas halaman onto HTTPS untuk pertama-time / pihak ketiga referrals?
- itu’s HSTS, sebuah terpisah control. tambahkan
Strict-Transport-Security— tetapi hanya once Anda certificate operation adalah rock-solid, karena HSTS (terutama preload) adalah close untuk sebuah satu-cara door.
mental models
1. Resources, tidak tautan. Mixed konten adalah tentang apa aman halaman memuat, tidak pernah tentang tempat ini tautan. jika Anda dapat’t decide apakah sesuatu counts, tanyakan: melakukan browser fetch ini untuk bangun saat ini halaman? Yes → mungkin konten campuran. ini hanya takes me untuk lainnya halaman → tidak konten campuran.
2. Triage oleh apa browser melakukan, tidak oleh severity di abstract. Active (scripts, styles, iframes) adalah diblokir → ini merupakan sebuah functional bug, perbaiki pertama. Passive (images, media) adalah warned/ditingkatkan → perbaiki next. browser’s own perilaku adalah Anda priority queue.
3. Detection adalah sebuah funnel: verify → inventory → catch tail. DevTools console (satu halaman, persis), crawler (seluruh situs, bulk), CSP laporan (production, pihak ketiga, per-pengguna panjang tail). No single alat sees semua tiga.
4. perbaiki sumber; net rest.
bersih actual URLs — DB, templates, tags. lalu tambahkan
upgrade-insecure-requests sebagai sebuah backstop untuk apa slips melalui. directive adalah
insurance, tidak sebuah repair.
5. dua berbeda “force HTTPS” (terjemahan) “force HTTPS” jobs, dua berbeda alat.
upgrade-insecure-requests upgrades sub-sumber dayas Anda aman halaman permintaan.
HSTS forces tingkat atas navigasi untuk Anda situs onto HTTPS. mereka jangan
overlap dan satu tidak pernah replaces lainnya — sebuah hardened situs menggunakan both.
6. ini merupakan sebuah recurring audit, tidak sebuah satu-time task.
CMS database, plugin/theme updates, dan pihak ketiga tags pertahankan reintroducing
http://. Treat detection sebagai sebuah scheduled sweep, atau ini silently comes back.
Mixed-konten anti-patterns
Mistakes itu leave tidak aman konten live — atau paper di atas ini alih-alih memperbaiki ini.
- Treating
upgrade-insecure-requestssebagai perbaiki. ini merupakan sebuah net. jika resource memiliki no HTTPS versi ditingkatkan permintaan gagal, dan Anda’ve hidden sebuah broken dependency alih-alih resolving ini. bersih URL sumber; gunakan directive untuk tail. - Assuming sebuah code deploy cleaned database. di sebuah CMS, sebagian besar
http://image dan embed URLs live di konten rows, tidak templates. sebuah template perbaiki leaves setiap old post mixed. jalankan DB search-dan-replace. - Deprioritizing konten campuran aktif karena “it’s just a warning.” (terjemahan) “ini merupakan hanya sebuah warning.” ini bukan — active adalah diblokir. sebuah diblokir stylesheet atau script adalah sebuah gangguan fungsi, tidak sebuah cosmetic nag.
- Spot-memeriksa homepage dan calling ini done. Mixed konten hides pada product halaman, old blog posts, dan paths hanya beberapa pengguna hit. crawl seluruh situs dan gunakan CSP pelaporan untuk apa crawl dapat’t reach.
- Ignoring pihak ketiga tags. sebuah ad, analytics, atau chat vendor masih calling
http://adalah konten campuran Anda dapat’t perbaiki di Anda own repo. Chasing ini di Anda codebase forever adalah wasted effort — push vendor atau drop tag. - menggunakan
block-all-mixed-contentpada sebuah baru bangun. ini merupakan deprecated dan obsolete. Reach untukupgrade-insecure-requestssebagai gantinya. - Confusing
upgrade-insecure-requestsdengan HSTS. satu upgrades sub-sumber dayas; lainnya forces tingkat atas HTTPS dan defends terhadap SSL stripping. Shipping satu dan assuming Anda’ve covered lainnya leaves sebuah nyata gap. - Leaving detection out dari recurring audit. memperbaiki ini once dan tidak pernah memeriksa
again guarantees sebuah plugin update atau sebuah pasted
http://image brings ini back unnoticed.
Mixed konten — cheat sheet
Active vs. passive
| jenis | contoh resources | browser perilaku | Priority |
|---|---|---|---|
| Active | <script>, <link rel="stylesheet">, <iframe>, fetch/XMLHttpRequest, fonts, <object> | diblokir — breaks halaman | perbaiki pertama |
| Passive | <img>, <audio>, <video> dan mereka sources | Warns / downgrades padlock; semakin sering auto-ditingkatkan atau diblokir | perbaiki next |
Anchor tautan <a href="http://…"> | (sebuah navigasi, tidak sebuah sub-sumber daya) | tidak konten campuran di semua | N/sebuah |
Detection stack
| lapisan | alat | Sees |
|---|---|---|
| Per halaman | Chrome DevTools console / Security panel | persis diblokir + warned resources pada open halaman |
| seluruh situs | Ahrefs situs Audit, Screaming Frog | setiap halaman referencing http:// sub-sumber dayas |
| Production tail | Content-Security-Policy-Report-Only + pelaporan endpoint | Per-pengguna, per-halaman, dan pihak ketiga-tag violations |
** CSP directives**
| Directive | apa ini melakukan | Status |
|---|---|---|
upgrade-insecure-requests | menulis ulang di-cakupan http:// permintaan sub-sumber daya untuk https:// sebelum sending | saat ini — satu untuk gunakan |
block-all-mixed-content | Blocks semua HTTP assets pada sebuah HTTPS halaman | Deprecated / obsolete |
Content-Security-Policy-Report-Only | laporan violations tanpa enforcing | saat ini — gunakan untuk mengukur pertama |
jangan-confuse-ini
| Fixes | cakupan | |
|---|---|---|
upgrade-insecure-requests | Sub-resources aman halaman memuat | origin yang sama + di-cakupan; tidak pihak ketiga tingkat atas nav |
HSTS (Strict-Transport-Security) | Top-tingkat navigasi untuk Anda situs | Forces HTTPS bahkan pada pertama permintaan; tidak sebuah mixed-konten perbaiki |
satu-liner perbaiki (CMS): DB search-dan-replace http://yourdomain → https://yourdomain, lalu patch templates/plugins, lalu tetapkan upgrade-insecure-requests.
temukan konten campuran — snippets
1. crawl satu halaman dari command line
Grab sebuah halaman dan flag apa pun tidak aman src/href sub-sumber dayas left di HTML.
macOS / Linux
# Flag insecure script/img/link/iframe/source references on a single URL
curl -s https://example.com/ \
| grep -Eo '(src|href)="http://[^"]+"' \
| sort -uWindows (PowerShell)
(Invoke-WebRequest -Uri "https://example.com/").Content `
| Select-String -Pattern '(src|href)="http://[^"]+"' -AllMatches `
| ForEach-Object { $_.Matches.Value } | Sort-Object -Uniqueini hanya sees raw HTML — resources injected oleh JavaScript tidak akan tampilkan up, yang adalah exactly mengapa Anda juga gunakan DevTools dan sebuah nyata crawler.
2. Chrome DevTools Console — list sumber daya tidak amans pada dirender halaman
Paste ke console pada HTTPS halaman untuk catch bahkan JS-inserted rujukan:
// Every element with an http:// resource attribute in the live DOM
[...document.querySelectorAll('[src],[href],[srcset],[data-src]')]
.filter(el => /^http:\/\//.test(
el.src || el.href || el.getAttribute('srcset') || el.getAttribute('data-src') || ''
))
.map(el => ({ tag: el.tagName, url: el.src || el.href }));Browser juga mencatat konten campuran aktif yang diblokir dengan pesan seperti
“Mixed Content: … This request has been blocked; the content must be served over HTTPS.” (terjemahan) “Konten Campuran: … Permintaan ini telah diblokir; konten harus
disajikan melalui HTTPS.” Baca pesan tersebut lebih dahulu.
3. Bookmarklet — satu-click console dump
Save sebagai sebuah bookmark; click ini pada apa pun HTTPS halaman untuk console-log -nya http://
rujukan:
javascript:(()=>{const h=[...document.querySelectorAll('[src],[href]')].filter(e=>/^http:\/\//.test(e.src||e.href)).map(e=>e.src||e.href);console.log('%cMixed content candidates:','font-weight:bold',h.length);h.forEach(u=>console.log(u));})();4. Turn pada CSP pelaporan (detect di production)
tambahkan sebuah laporkan-hanya header so nyata pengunjung’ browser tell Anda tentang violations — including pihak ketiga tags dan halaman Anda crawl misses:
Content-Security-Policy-Report-Only: default-src https:; report-uri /csp-report-endpointlaporkan-hanya laporan tanpa enforcing, so Anda dapat size masalah safely sebelum
switching pada upgrade-insecure-requests atau enforcement. ( modern equivalent menggunakan
report-to dengan sebuah Reporting-Endpoints header.)
5. safety-net header (setelah Anda’ve fixed sumber)
Content-Security-Policy: upgrade-insecure-requestsRemember ini tidak upgrade pihak ketiga tingkat atas navigasi dan adalah tidak sebuah replacement untuk HSTS.
Recurring mixed-konten audit SOP
jalankan ini setelah HTTPS launches, CMS atau theme releases, tag-manager perubahan, dan pada sebuah regular schedule untuk situs whose konten perubahan frequently.
- crawl HTTPS halaman di raw dan dirender modes. Export URL tidak aman dari
src,srcset, stylesheet, iframe, media, dan fetch/XHR permintaan; biasa HTTP anchor tautan adalah tidak konten campuran. - kumpulkan browser evidence. Review DevTools pada representative templates dan gunakan
Content-Security-Policy-Report-Onlyuntuk capture violations triggered oleh nyata pengunjung dan pihak ketiga tags. - Classify setiap finding. Mark ini active atau passive, pertama-party atau pihak ketiga, static atau JavaScript-injected, dan identify template, database field, plugin, tag, atau vendor itu owns sumber.
- perbaiki sumber rujukan. poin ini untuk sebuah berfungsi HTTPS resource atau sebuah safe
relative URL. melakukan tidak assume berubah
http://untukhttps://adalah enough; verify destination sebenarnya mendukung TLS. - gunakan CSP sebagai sebuah safety net. tambahkan
upgrade-insecure-requestshanya setelah reviewing findings. ini dapat reduce exposure, tetapi ini melakukan tidak repair CMS record atau replace HSTS. - Re-crawl dan render. Active mixed-konten errors seharusnya menjadi zero pada tested templates; passive resources seharusnya juga resolve di atas HTTPS tanpa fallback.
- mencegah recurrence. Correct originating template atau editor workflow, retain laporkan-hanya collection tempat appropriate, dan assign baru violations untuk sistem owner.
Gejala → kemungkinan penyebab → perbaikan
| Gejala | Kemungkinan penyebab | Hal yang perlu diperiksa | Perbaikan |
|---|---|---|---|
| Halaman kehilangan tata letak atau interaksi setelah peluncuran HTTPS | Konten aktif diblokir, biasanya stylesheet, skrip, iframe, atau permintaan fetch | Galat Console dan Network DevTools pada templat terdampak | Pindahkan sumber daya ke URL HTTPS yang valid dan perbaiki templat atau tag sumber |
| Ikon gembok atau indikator keamanan diturunkan meskipun halaman masih dapat digunakan | Gambar, audio, video pasif, atau konten lain yang dapat ditingkatkan | DOM hasil render, srcset, atribut lazy-load, CSS, dan peringatan browser | Ganti setiap rujukan tidak aman dan pastikan aset HTTPS merespons dengan benar |
| Masalah kembali setelah rilis CMS | URL HTTP absolut masih tersimpan di basis data, tema, plugin, atau konten buatan sistem | Bandingkan pelanggaran baru per templat dan deployment; telusuri bidang tersimpan serta konfigurasi | Perbaiki generator atau nilai tersimpan, lalu perbarui konten terdampak |
| Crawl bersih, tetapi pengguna nyata masih melaporkan kegagalan | JavaScript, logika persetujuan, teknologi iklan, atau tag pihak ketiga menyuntikkan permintaan saat runtime | Peristiwa CSP report-only dan DevTools dengan status persetujuan/perangkat yang relevan | Ubah atau hapus konfigurasi tag/vendor penyebab, lalu uji ulang status tersebut |
upgrade-insecure-requests ada, tetapi sumber daya tetap gagal | Origin HTTP tidak memiliki versi HTTPS yang berfungsi atau kebijakan tidak mencakup navigasi tersebut | URL akhir, sertifikat, dan respons permintaan yang ditingkatkan | Sajikan aset melalui HTTPS atau ganti aset; jangan perlakukan direktif sebagai proxy |
Mixed-konten release tests
Test 1: dirender template sweep
- Purpose: Catch active dan passive resources itu raw HTML alone misses.
- metode: Render sebuah representative URL dari setiap template dan interaction state; inspect Console dan Network output untuk tidak aman atau diblokir permintaan.
- diharapkan hasil: No sub-sumber daya adalah diminta di atas HTTP dan no active konten adalah diblokir.
- kegagalan trigger: apa pun mixed-konten warning, auto-upgrade kegagalan, atau missing layout/function caused oleh sebuah diblokir resource.
- Next tindakan: Trace permintaan untuk -nya template, tag, plugin, atau stored field; perbaiki sumber dan rerun sweep.
Test 2: sumber dan CSP comparison
- Purpose: Detect violations introduced hanya untuk nyata pengunjung atau oleh ketiga parties.
- metode: Compare crawler findings dengan
Content-Security-Policy-Report-Onlyevents, grouped oleh diblokir URL, halaman template, directive, dan owner. - diharapkan hasil: No unexplained production-hanya violations remain; known noise adalah documented dan excluded narrowly.
- kegagalan trigger: sebuah repeatable violation absent dari crawl atau sebuah unowned pihak ketiga sumber.
- Next tindakan: Reproduce pengunjung state dan correct atau hapus injecting integration.
Test 3: recurrence test setelah publishing
- Purpose: Verify CMS no longer generates baru tidak aman rujukan.
- metode: Publish sebuah test item melalui normal editorial workflow, lalu crawl dan render ini dengan yang sama memeriksa digunakan untuk production.
- diharapkan hasil: Generated markup dan dimuat resources gunakan valid HTTPS URLs.
- kegagalan trigger: baru halaman recreates sebuah HTTP rujukan previously cleaned dari lama konten.
- Next tindakan: perbaiki editor bawaan, template, plugin, atau konten transform sebelum release proceeds.
Resources worth Anda time
My speaking
- Better Safe daripada Sorry dengan HTTPS — SMX East 2016 (SlideShare) — my deep-dive pada TLS, umum HTTPS implementation failures, dan migration gotchas itu produce konten campuran di pertama place. (Standing disclaimer: ini merupakan my understanding dari ini sistem, dan adoption stats di ini merupakan dari 2016.)
My terkait menulis
- Beginner’s Guide untuk SEO teknis — tempat HTTPS dan konten campuran fit di bigger technical picture.
dari sekitar industry
- apa adalah konten campuran? (web.dev / Google) — canonical definition dan active-vs-passive split.
- memperbaiki konten campuran (web.dev / Google) — langkah-oleh-langkah: finding ini, memperbaiki sub-sumber daya URLs,
upgrade-insecure-requests, dan CSP pelaporan. - MDN —
upgrade-insecure-requests— secara tepat apa ini upgrades, apa ini tidak, dan mengapa ini tidak replace HSTS. - MDN —
block-all-mixed-content— deprecated blocking directive, untuk ketika Anda inherit ini. - MDN — Referensi perilaku konten campuran — rujukan browser untuk sumber daya yang dapat diblokir dan dapat ditingkatkan.
- Enable HTTPS pada Anda server (web.dev / Google) — relative/protocol-relative URLs dan surrounding HTTPS setup guidance.
Stats worth citing
- Konten campuran aktif adalah diblokir oleh bawaan. Google: “Most browsers already block this type of content by default to protect users.” (terjemahan) “sebagian besar browser sudah block ini jenis dari konten oleh bawaan untuk protect pengguna.” — alasan active konten campuran adalah sebuah gangguan fungsi, tidak sebuah warning. sumber
- Konten campuran aktif adalah greater threat. Google’s own peringkat dari dua tiers: “Active mixed content poses a greater threat than passive mixed content.” (terjemahan) “Konten campuran aktif poses sebuah greater threat daripada konten campuran pasif.” — right-sizes Anda triage order. sumber
- Konten campuran pasif adalah no longer safely “allowed.” (terjemahan) “allowed.” Google: “Until recently, passive mixed content was loaded in all browsers … This is now beginning to change.” (terjemahan) “Until recently, konten campuran pasif adalah dimuat di semua browser … ini merupakan kini beginning untuk perubahan.” — “images are tidak berbahaya” (terjemahan) “images adalah tidak berbahaya” assumption adalah expiring. sumber
upgrade-insecure-requestsadalah tidak sebuah substitute untuk HSTS. MDN states ini plainly: ini “does not replace theStrict-Transport-Security(HSTS) header.” (terjemahan) “tidak menggantikan headerStrict-Transport-Security(HSTS).” — dua controls solve berbeda halves dari masalah. sumber- ~89% dari web adalah pada HTTPS (W3Techs, 2026; pastikan saat ini figure), yang
adalah exactly mengapa leftover
http://sub-sumber dayas pada sebuah otherwise-aman halaman adalah umum kegagalan mode kini — halaman adalah HTTPS; cargo lags behind. konteks via HTTPS hub.
Test yourself: Mixed konten
Five quick pertanyaan pada konten campuran. Pick sebuah jawaban untuk setiap, lalu periksa.
Log perubahan
Diperbarui 21 Agu 2026.
Ringkasan editorial dan detail perubahan yang tercatat.Detail perubahan
-
Catatan perubahan terperinci saat ini tersedia dalam bahasa Inggris.
Perbandingan lengkap tidak tersedia — tidak ada cuplikan sebelumnya yang diarsipkan untuk revisi ini.
Diperbarui 17 Jul 2026.
Ringkasan editorial dan detail perubahan yang tercatat.Detail perubahan
-
Catatan perubahan terperinci saat ini tersedia dalam bahasa Inggris.
Perbandingan lengkap tidak tersedia — tidak ada cuplikan sebelumnya yang diarsipkan untuk revisi ini.