Ga naar inhoud

NextPDF Cloudflare edge-rendering-bridge — overzicht

nextpdf/cloudflare is een edge-rendering-bridge. Uw PHP-toepassing bevat de Hypertext Markup Language (HTML); een Cloudflare Worker bevat de headless browser. De bridge stuurt de HTML via Hypertext Transfer Protocol Secure (HTTPS) naar de Worker en ontvangt gerenderde Portable Document Format (PDF)-bytes. Er draait geen headless browser in uw PHP-proces en de bridge vereist geen lokale Chromium-binary op het pad dat de bridge beheert.

Het pakket maakt deel uit van het NextPDF-ecosysteem en is afhankelijk van nextpdf/core^3.0. Het is wire-protocolcode: het bouwt een JavaScript Object Notation (JSON)-aanvraag op, valideert de invoer en de bestemming, stuurt de aanvraag via een PHP Standards Recommendation 18 (PSR-18)-client en parseert het antwoord naar een getypeerd resultaatobject. De Worker-implementatie valt buiten dit pakket. Deze bridge communiceert met de Worker die u implementeert.

Het bepalende kenmerk van deze bridge is dat HTML een netwerkgrens overschrijdt en een browser-engine bereikt waarover u geen directe controle hebt. Vanwege die grens bestaan alle beveiligingsmaatregelen in het pakket.

  • HTML wordt gevalideerd voordat die het PHP-proces verlaat (CloudflareSecurityPolicy::validate()).
  • De Uniform Resource Locator (URL) van de bestemming wordt gevalideerd voordat de aanvraag wordt verzonden (CloudflareSecurityPolicy::validateWorkerUrl()) en daarna op het moment van de aanvraag opnieuw gevalideerd om het time-of-check/time-of-use-venster te sluiten (assertPinsStillValid()).
  • De transportlaag kan de opgeloste Internet Protocol (IP)-set en de publieke sleutel van het servercertificaat pinnen (Transport\PinnedCurlTransport).

Als u deze bridge voor productie evalueert, lees dan /integrations/cloudflare/security-and-operations/ vóór /integrations/cloudflare/quickstart/. Het beveiligingsmodel is geen achteraf toegevoegde laag; het verklaart waarom het pakket zo is vormgegeven.

MogelijkheidOndersteund door
HTML naar PDF renderen via een Cloudflare WorkerCloudflareHtmlRenderer::render()
Beschikbaarheidsprobe (Hypertext Transfer Protocol (HTTP) HEAD)CloudflareHtmlRenderer::isAvailable()
Leveranciersneutrale transportlaagPSR-18 ClientInterface-injectie
Invoerverharding (grootte, base64-bom, meta-refresh)CloudflareSecurityPolicy::validate()
Verdediging tegen Server-side request forgery (SSRF) / Domain Name System (DNS)-rebindingCloudflareSecurityPolicy::validateWorkerUrl() + assertPinsStillValid()
Transport Layer Security (TLS) public-key-pinning en gepinde DNS op de cURL-laagTransport\PinnedCurlTransport
Lokale Chrome-fallback wanneer de Worker onbereikbaar isContract\LocalRendererFactoryInterface
Parsing van binaire antwoorden en JSON (base64)-antwoordenCloudflareResponseParser
Edge-telemetrie (rendertijd, edge-locatie, contenthoogte)CloudflareRenderResult
Aangepaste lettertypen uit een R2-bucketCloudflareRenderPayload (r2FontBucket, fontFiles)
Application Programming Interface (API)-beschermingslaag (sleutelauthenticatie, payloadgrootte, rate limiting)ApiProtection
PDF-archivering naar R2 via de S3-compatibele APIR2ArchiveManager

Elke rij verwijst naar een klasse in de namespace NextPDF\Cloudflare. Elke rij wordt getoetst aan het gedrag van die klasse en de bijbehorende test, niet aan een specificatiedocument.

  • De bridge draait geen browser. De Worker doet dat.
  • De bridge implementeert of configureert uw Worker niet. U bent verantwoordelijk voor dat artefact.
  • Ze ondertekent geen PDF’s. Ondertekenen behoort tot nextpdf/core of de commerciële edities. Wanneer u ondertekening nodig hebt, rendert u eerst en ondertekent u daarna de geretourneerde bytes met de engine. NextPDF Pro biedt PAdES B-B-ondertekening. Long-term-validation-profielen zijn een Enterprise-mogelijkheid.
  • Ze doet geen uitspraak over capaciteit of limieten van het Cloudflare-platform. De enige grootte- en tijdslimieten die deze documentatie vermeldt, zijn de limieten die dit pakket via zijn eigen configuratie afdwingt (zie /integrations/cloudflare/configuration/).

De bridge bevat twee afzonderlijke, complementaire beleidsregels. Ze door elkaar halen is de meest voorkomende fout bij reviews. Hier worden ze afzonderlijk beschreven.

  • HTML-beveiligingsbeleid (HtmlSecurityPolicyInterface, standaard NextPDF\Html\DefaultHtmlSecurityPolicy, geleverd door nextpdf/core): contentfiltering op de parseerlaag, toegepast voordat content de Worker bereikt. Haal het op met getHtmlSecurityPolicy().
  • Cloudflare-beveiligingsbeleid (CloudflareSecurityPolicy, statisch): controles op de transportlaag: invoergrootte, detectie van base64-decompressiebommen, blokkering van meta-refresh, afdwinging van HTTPS en SSRF / DNS-rebinding-verdediging voor de Worker-URL.

Het docblock van de renderer zelf vermeldt deze scheiding. Deze pagina herhaalt dit omdat reviewers op productieniveau beide namen op één scherm nodig hebben.

Eén enkele render()-aanroep volgt deze waarneembare reeks. De reeks is rechtstreeks afgeleid uit CloudflareHtmlRenderer::render().

  1. Controle op volledigheid van de configuratie (workerUrl en apiToken niet leeg). Als de controle mislukt, valt de bridge terug op een lokale renderer of wordt CloudflareNotAvailableException gegooid.
  2. HTML-validatie aan de hand van de geconfigureerde maximale grootte, het base64-URI-plafond en het meta-refresh-verbod.
  3. Validatie van de Worker-URL, die de host oplost en de gecontroleerde IP-set retourneert.
  4. Constructie van de payload (CloudflareRenderPayload).
  5. Een time-of-use-hercontrole bevestigt dat het DNS-antwoord van de host sinds stap 3 niet is gewijzigd.
  6. De HTTP-POST wordt verzonden via de gepinde cURL-transportlaag wanneer er een IP-set of Subject Public Key Info (SPKI)-pinset aanwezig is en een PSR-17 ResponseFactory is geleverd, anders via de geïnjecteerde PSR-18-client.
  7. Het antwoord wordt geparseerd tot een CloudflareRenderResult.

Iedere throwable behalve CloudflareRenderException activeert het fallback-pad. CloudflareRenderException (een HTTP-fout of een misvormd antwoord van de Worker) wordt ongewijzigd opnieuw gegooid. Het is een fout aan de Worker-kant, geen bereikbaarheidsfout, dus de bridge valt niet terug.

  • /integrations/cloudflare/install/ — installeer het pakket en een PSR-18-client.
  • /integrations/cloudflare/configuration/ — elk configuratieveld, met de standaardwaarde die aan de broncode is getoetst.
  • /integrations/cloudflare/quickstart/ — uw eerste uitvoerbare render.
  • /integrations/cloudflare/production-usage/ — fallback, telemetrie, R2-archivering, API-bescherming.
  • /integrations/cloudflare/security-and-operations/ — operationele details voor de trust boundary.
  • /integrations/cloudflare/troubleshooting/ — faalmodi gekoppeld aan excepties.
  • /integrations/cloudflare/boot-and-discovery/ — hoe de bridge met een host-framework integreert.
  • /integrations/cloudflare/integration/ — NextPDF aansturen via Cloudflare-services.