In my PHP web applications I sometimes use custom HTTP headers to aid debugging when things go wrong.
The Laravel framework redirects unauthenticated users to the login page when they access an URL that requires an authenticated user. Especially with API clients this is not helpful, and so my user guard implementation sends a "redirect reason" header with specific explanations:
X-Redirect-Reason: User token is invalid
This helped me a couple of times already, and prevents me from digging into the authorization code.
Another header is used in error handlers to provide more information than just "404 Not Found":
X-404-Cause: CRUD ModelNotFound
Other reasons could be that the user is not allowed to access the resource for auth reasons, or that the model exists in database but has been deleted.
Others using custom headers
Content Delivery Networks (CDNs) often aid debugging with custom HTTP headers. Fastly uses X-Cache, Akamai uses multiple headers like X-Check-Cacheable, X-Akamai-Request-ID, X-Cache and X-Cache-Remote.
Apache's Traffic Server has a XDebug plugin that sends out X-Cache and other headers.
The PHP FOSHTTPcache library aids debugging by configuring Varnish to send out a X-Cache header indicating cache hits and misses.
PHP HTTP client library Guzzle tracks the redirect history of a single HTTP request in the X-Redirect-History header.
TYPO3's realurl extension sends out X-TYPO3-RealURL-Info indicating what the reason for a redirect was:
X-TYPO3-RealURL-Info: redirecting expired URL to a fresh one X-TYPO3-RealURL-Info: redirect for missing slash X-TYPO3-RealURL-Info: redirect for expired page path X-TYPO3-RealURL-Info: postVarSet_failureMode redirect for ...