API für Agenten und LLMs

Das ist keine separate API: Es ist genau die Oberfläche, die der Browser aufruft, wenn Sie den Geschwindigkeitstest auf dieser Website ausführen, dokumentiert, damit ein Skript, ein Agent oder ein LLM-Werkzeug sie ebenfalls aufrufen kann. Kein Schlüssel, keine Anmeldung, kein CORS.

Es gibt hier keine separate „öffentliche API“: Das sind dieselben vier Endpunkte, die der Browser dieser Website aufruft, um einen Geschwindigkeitstest auszuführen, ohne API-Schlüssel, ohne Konto, und, siehe unten, ohne CORS-Header.

Endpunkte

GET/api/speed/pingUnbegrenzt

Eine minimale Round-Trip-Sonde.

Das Feld t in der Antwort dient nur der Diagnose. Workers frieren Date.now() zwischen E/A-Operationen ein, daher ist es keine verlässliche Uhr zur Latenzmessung, messen Sie die Anfrage selbst.

GET/api/speed/metaUnbegrenzt

Spiegelt, was Cloudflare über den Aufrufer sieht: IP, ISP, ASN, Stadt, Land und den antwortenden Edge-Standort (Colo).

Nichts davon wird gespeichert. Es wird nur an den Aufrufer zurückgegeben, sonst an niemanden.

GET/api/speed/down120 Anfragen / 60 s / IP

Streamt bytes (Query-Parameter, Standard 1 MB, Obergrenze 100 MB) an Zufallsdaten, zur Messung der Download-Geschwindigkeit.

Die Antwort ist no-store, no-transform, nichts komprimiert oder cacht sie, beides würde die gemessene Geschwindigkeit künstlich erhöhen.

POST/api/speed/up120 Anfragen / 60 s / IP

Nimmt einen Anfragetext von bis zu 100 MB entgegen und meldet, wie viele Bytes angekommen sind und wie lange das gedauert hat, zur Messung der Upload-Geschwindigkeit.

Ein deklarierter Content-Length über 100 MB wird mit 413 abgelehnt, bevor der Text gelesen wird.

Die Nutzungsgrenze, als Rechnung

/api/speed/down und /api/speed/up teilen sich ein Limit von 120 Anfragen pro IP je Zeitfenster von 60 Sekunden, das sich von selbst zurücksetzt. Auf einer Gigabit-Leitung stellt ein Standard-Geschwindigkeitstest etwa 40 dieser Anfragen (vier Download- und vier Upload-Streams, die bis zum Ende ihrer Phase immer neue Anfragen stellen; langsamere Leitungen stellen weniger), das sind also etwa 3 vollständige Tests pro Zeitfenster. Darüber hinaus erhalten Sie 429 mit einem Retry-After-Header. Gezählt wird pro Cloudflare-Standort, betrachten Sie den Wert daher als ungefähr. /api/speed/ping und /api/speed/meta sind unbegrenzt: Deren Nutzlasten sind trivial, und eine Begrenzung würde genau auf dem Pfad, den sie messen sollen, eine zusätzliche Prüfung einfügen.

Die größte Anfrage, die einer der beiden Endpunkte liefert oder annimmt, beträgt 100 MB.

Kein CORS, mit Absicht

Diese Endpunkte senden keinen Access-Control-Allow-Origin-Header, und keiner von ihnen unterliegt der Same-Origin-Prüfung, die diese Website bei ihren Konto- und Abrechnungsrouten verwendet. Diese Kombination ist beabsichtigt: Ein serverseitiger Aufrufer, curl, ein Agent, ein LLM-Werkzeug, funktioniert bereits heute, während ein Browser, der Cross-Origin-JavaScript gegen diese Endpunkte ausführt, bereits vom Browser selbst blockiert wird. Ein *-CORS würde es jeder Website erlauben, die Bandbreite dieser Website über die Browser ihrer eigenen Besucher zu verbrauchen; die aktuelle Form zu dokumentieren kostet nichts und ändert nichts.

Ein durchgerechnetes Beispiel: curl

Laden Sie 5 MB herunter und stoppen Sie die Zeit, die übliche Form einer manuellen Durchsatzprüfung.

curl -o /dev/null -w "%{time_total}s for %{size_download} bytes\n" \
  "https://mysygnal.net/api/speed/down?bytes=5000000"

Ein durchgerechnetes Beispiel: ein Agent oder LLM-Werkzeug

Dieselbe Messung, vom Aufrufer selbst gestoppt statt der Antwort zu vertrauen, siehe den Hinweis zu /api/speed/ping oben.

const t0 = performance.now();
const res = await fetch("https://mysygnal.net/api/speed/down?bytes=5000000");
await res.arrayBuffer();
const seconds = (performance.now() - t0) / 1000;
const mbps = (5_000_000 * 8) / seconds / 1_000_000;

Alles andere, was diese Website einem Aufrufer bietet

llms.txt indiziert die Werkzeuge, die Anleitungen und jede Router-Seite dieser Website in einer einzigen Klartextdatei, gedacht zum Lesen durch ein Modell statt durch einen Browser.

Diese Seite wurde maschinell übersetzt und kann Fehler enthalten. Englisches Original lesen