Ga naar hoofdinhoud

Te veel verzoeken: de server van deze reeks

Om te zien wat veel verzoeken met een server doen, heb je een server nodig die zo weinig mogelijk doet. Die zet je hier klaar.

Waar je werkt

Maak voor deze reeks een nieuwe map veiligheid-dos, naast je eigen project, en open die in VS Code. De server en de scripts van deze reeks komen daarin. Zo blijft je eigen gastenboek heel. Aan het eind van de reeks pas je het geleerde toe op je eigen project.

Maak in die map een virtual environment en installeer de packages; hoe dat gaat staat bij Een map per reeks.

Het startbestand​

Je begint met het kleinste endpoint dat er is, een dat op een GET-verzoek reageert. Zet dit in main.py in die map:

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
async def root():
return {"bericht": "Hallo wereld!"}

Starten​

Alleen je eigen server

Stuur de verzoeken in deze reeks uitsluitend naar je eigen server op 127.0.0.1. Dat adres wijst altijd naar je eigen computer en verlaat het netwerk niet. Een ander zijn server bestoken met verzoeken is een aanval, en strafbaar, ook als het "maar een testje" is.

Start je server met fastapi dev main.py, en open http://127.0.0.1:8000/ in je browser.

Controlevraag
Je herlaadt de pagina drie keer. Hoeveel regels voor je startpagina, GET / zonder favicon.ico, komen er in de terminal van je server bij?
Kies wat jij denkt. Bij het goede antwoord zie je de uitleg.
Zo ziet je main.py er nu uit
from fastapi import FastAPI

app = FastAPI()

@app.get("/")
async def root():
return {"bericht": "Hallo wereld!"}

Dit is de beginstand. In les 5 komt er een limiet bij.

Er gaat iets mis​

Address already in use​

Je browser toont iets anders dan Hallo wereld!, bijvoorbeeld {"detail":"Not Found"}. In de terminal van je nieuwe server eindigt de melding op Windows met:

[WinError 10048] Elk socketadres (protocol/netwerkadres/poort) kan normaal slechts één keer worden gebruikt

In een Engelse Windows staat er only one usage of each socket address. Op macOS staat er [Errno 48] Address already in use, op Linux [Errno 98] Address already in use.

Oorzaak: de server van een vorige reeks draait nog op poort 8000, in een ander venster van VS Code. Je nieuwe server kon niet starten, en je browser kreeg antwoord van de oude.

Oplossing: stop de oude server met Ctrl+C in zijn terminal, en start deze opnieuw.

Opdrachten​

Opdracht 1: Run - Een pad dat niet bestaat​

Open http://127.0.0.1:8000/hallo. Wat zie je, en wat staat er in de terminal van je server?

Antwoord

In je browser staat {"detail":"Not Found"}, en in de terminal een regel met GET /hallo en 404 Not Found. Ook een verzoek naar een pad dat niet bestaat, moet je server beantwoorden.

Door naar les 2: wat een verzoek kost.