AbdulElahGwaith's picture
Upload folder using huggingface_hub
88df9e4 verified
# Shielding
## Overview
Essentially code in our server that controls the prevention of "junk requests" is scripted HTTP requests to endpoints that are _not_ made by regular browser users.
For example, there's middleware code that sees if a `GET` request
comes in with a bunch of random looking query strings keys. This would cause a PASS on the CDN but would not actually matter to the rendering. In this
case, we spot this early and return a redirect response to the same URL
without the unrecognized query string keys so that if the request follows
redirects, the eventual 200 would be normalized by a common URL so the CDN
can serve a HIT.
Here's an in-time discussion post that summaries the _need_ and much of the
recent things we've done to fortify our backend servers to avoid unnecessary
work loads:
**[How we have fortified Docs for better resiliency and availability (June 2023)](https://github.com/github/docs-engineering/discussions/3262)**
## How it works
At its root, the `src/shielding/frame/middleware/index.ts` is injected into our
Express server. From there, it loads all its individual middleware handlers.
Each middleware is one file that focuses on a single use-case. The
use-cases are borne from studying log files to
spot patterns of request abuse.
> [!NOTE]
> Some shielding "tricks" appear in other places throughout the code
> base such as controlling the 404 response for `/assets/*` URLs.
## Rate limiting
We rate limit at multiple levels:
1. CDN (Fastly)
2. All routes via [src/shielding/frame/index.ts](./middleware/index.ts) and the `createRateLimiter()` middleware.
- These routes are _only_ rate limited if they are deemed suspicious based on parameters we check.
3. API routes via their declaration in [src/frame/middleware/api.ts](../frame/middleware/api.ts) using the `createRateLimiter()` middleware.
- These routes are limited to a certain # of requests per minute, regardless of what the request looks like.