Distributing PHP applications is quite complicated. For instance, to run a Symfony project in production, a web server, the PHP engine, and the appropriate PHP extensions need to be installed. Their versions and configurations must be compatible with the app. Because PHP is an interpreted language, the application source code must also be available. Composer…
Category: Go
The PHP Revolution Is Underway: FrankenPHP 1.0 Beta
I’m very proud to announce the immediate availability of FrankenPHP 1.0 beta. FrankenPHP is a brand-new application server for PHP, written in Go and built on top of Caddy, that dramatically simplifies the deployment of PHP apps, and brings new features to PHP such as: FrankenPHP is available as a Docker image (Debian, Alpine, PHP…
Mercure 0.14: Major Performance Improvement and New Features
I’m very pleased to announce the immediate availability of the Mercure.rocks hub version 0.14. Mercure is a free and open-source solution for real-time communication. With Mercure, securely push data to all your connected users with a simple POST request. No third-party library or SDK is required: the browser (or any other type of client) receives…
Goroutines, threads, and thread IDs
If you attended AFUP Day 2022, you might know that I am currently working on a PHP module for web servers written in Go. While testing my upcoming library, I encountered strange memory access issues related to the threads created by the Go runtime (you know, cgo…). By default, the Go scheduler runs many goroutines…
New in Caddy 2.5: Redact Sensitive Data from Your Logs
Caddy is the rising star of web servers. It is fast, easy to configure, fully featured (automatic TLS certificate generation and renewal, HTTP/3, cloud-native, config hot reloading…), and secure (it is written in Go, not in C). Thanks to its unmatched extensibility that makes it a top-notch app platform, Caddy has a thriving ecosystem! To…
Preventing CORS Preflight Requests Using Content Negotiation
In modern web applications, it’s a common pattern to serve the web API and the frontend app from different subdomains: https://api.example.com: your web API, usually serving JSON documents https://example.com: your web application, usually built in JavaScript, generating HTML documents from the raw JSON data retrieved from the API This was the pattern implemented by API…
Webperf: PHP after Server Push
Here are the slide deck from the talk I gave this morning for AFUP Day 2021! And here is the video (in French): Google recently announced that it will remove Server Push support from its flagship browser. Server Push is a technology that is part of the HTTP/2 and HTTP/3 standards. Server Push is designed…
Using the “103 Early Hints” Status Code in Go Applications
103 is a new experimental HTTP status code defined in RFC 8297. It’s an informational status that can be sent by a server before the main HTTP response. Used in conjunction with the Link HTTP header and the preload relation, 103 gives the client the opportunity to fetch resources (assets, images, linked API documents…) related…
The Mercure.rocks Hub is now based on Caddy Web Server
I’m very happy to announce the immediate availability of the Mercure.rocks Hub version 0.11! The Mercure.rocks Hub is a free software implementing the Mercure specification, an open protocol for fast, reliable and battery-efficient in-browser real-time communications. Version 0.11 is a major milestone for the project! As you may know, the Mercure.rocks Hub is written in…
A Structured HTTP Fields Parser and Serializer for the Go Programming Language
“Structured Field Values for HTTP” is an upcoming RFC defining a set of well-defined data types to use in HTTP headers and trailers. This new format will improve the interoperability and the safety of HTTP by allowing to create generic parsers and serializers suitable for all HTTP headers (currently, most headers need a custom parser)…