# Limites

> Ce que colis ne fait pas, ou fait avec une contrepartie : taille des fichiers, durée de vie, un fichier par code, aperçu, mots de passe.

Canonical: https://colis-docs.vercel.app/docs/limites · Markdown: https://colis-docs.vercel.app/docs/limites.md

## La taille d’un fichier

| Chemin                                                              | Limite                                                                                                                   |
| ------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------ |
| Envoi en une requête (n8n, petits fichiers de la page et de la CLI) | `DROP_MAX_SIZE_MB`, 4 Mo par défaut : une fonction Vercel accepte 4,5 Mo par requête.                                    |
| Envoi en morceaux depuis la page ou la CLI                          | `DROP_MAX_UPLOAD_MB`, 2 048 Mo par défaut. La page demande une règle CORS sur le bucket.                                 |
| Déploiement ouvert, sans `DROP_PASSWORD` (le service public)        | `DROP_OPEN_MAX_UPLOAD_MB`, 100 Mo par défaut, et `DROP_UPLOADS_PER_HOUR` envois par heure et par adresse, 20 par défaut. |
| Compte sur la [formule Pro](https://colis-docs.vercel.app/docs/abonnement), déploiement ouvert   | `DROP_PRO_MAX_UPLOAD_MB`, 2 048 Mo par défaut, et `DROP_PRO_UPLOADS_PER_HOUR` envois par heure et par compte, 200.       |
| Aperçu sur la page de retrait                                       | `DROP_PREVIEW_MAX_MB`, 16 Mo par défaut. Au-delà, la page décrit le fichier.                                             |

Sur un hébergement sans limite de requête, relevez `DROP_MAX_SIZE_MB` et `DROP_MAX_UPLOAD_MB`
ensemble. Sans règle CORS, gardez `DROP_MAX_UPLOAD_MB` au niveau de `DROP_MAX_SIZE_MB` : un fichier
trop gros est alors refusé avant l’envoi. Voir [Gros fichiers](https://colis-docs.vercel.app/docs/gros-fichiers).

Dans votre propre code, `maxSize` sur `createBucket()` refuse un corps trop gros avant tout appel
réseau (`FILE_TOO_LARGE`), et le gestionnaire de routes répond alors `413 TOO_LARGE`.

## La durée de vie

- **L’expiration empêche la remise ; elle ne supprime pas.** Un colis expiré n’est plus remis, mais
  l’objet reste dans le bucket jusqu’à ce qu’une règle de cycle de vie le supprime. `colis verifier`
  signale la règle manquante.
- **La durée d’un gros fichier démarre avec son envoi.** Les métadonnées S3 ne changent plus une fois
  l’objet créé : l’expiration est écrite à l’ouverture de l’envoi.
- **L’accusé vit plus longtemps que le colis**, jusqu’à `DROP_MAX_EXPIRES_IN` (ou
  `DROP_PRO_MAX_EXPIRES_IN`, trente jours, sur un déploiement ouvert) : votre règle de cycle de vie
  doit aller au-delà.

## Ce qu’il n’y a pas

- **Pas d’historique des envois.** Le [compte](https://colis-docs.vercel.app/docs/compte) est facultatif et ne liste pas encore vos colis. Un code est un jeton porteur avec une date d’expiration. Pour
  un fichier sensible, choisissez une durée courte, un mot de passe, la destruction au premier
  téléchargement, ou chiffrez avant d’envoyer.
- **Un fichier par code.** Zippez un dossier d’abord ; `tar cz ./dossier | colis envoyer - --name dossier.tar.gz` le fait depuis un terminal.
- **Une réponse par colis.** Pour une nouvelle version, un nouveau colis.
- **Pas de rejeu des webhooks.** Après trois tentatives, un événement manqué est perdu ; l’accusé
  reste consultable avec `colis statut`.
- **Pas de chiffrement de bout en bout.** Votre déploiement lit chaque fichier qu’il stocke.

## Les contreparties

- **Un aperçu coûte ce que coûte un téléchargement.** Les octets passent par la fonction dans les deux
  cas. Les fichiers envoyés ne sont jamais servis comme un document que l’origine exécuterait : la
  route d’aperçu répond avec un type pris dans une courte liste (le HTML comme `text/plain`),
  `nosniff`, et une politique CSP `sandbox`. `DROP_PREVIEW=false` coupe tout.
- **La destruction au téléchargement a lieu quand les octets quittent le bucket**, pas quand ils
  arrivent. Un téléchargement coupé à mi-chemin a consommé le code ; la page le dit avant le clic.
- **Un mot de passe protège le colis, pas le code.** Un code inconnu répond `404`, un code protégé
  `401` : qui détient le code sait déjà qu’il existe. Le mot de passe garde le reste : le nom, la
  taille, l’aperçu et les octets.
- **La limite d’essais de mot de passe vit en mémoire**, instance par instance. Sur un hébergement
  serverless, elle ralentit les essais plus qu’elle ne les arrête.
- **En mode `DROP_RAW_MODE=redirect`, un colis à usage unique passe quand même par la fonction** :
  une URL présignée survivrait à sa destruction.
- **La CLI et les hooks React ne connaissent pas les options de la page** (durée, mot de passe,
  message, usage unique) : un colis créé par eux prend les valeurs par défaut. Les en-têtes `x-drop-*`
  les posent à la main, voir [Page de livraison](https://colis-docs.vercel.app/docs/page-de-livraison#avant-lenvoi).
