# Klient-server kommunikation
```
author: krm
created: 2018-09-30 
status: draft
```

# 👁️‍🗨️  Om hur en server kommunicerar med en kleint

Vi måste förstå hur en server kommunicerar med en klient för att kunna 
utveckla bra web applikationer.

- Det är viktig för att webben ger oss många begräsningar.
- Att förstå dessa begräsningar får oss att förstå varför webben är som den är.
- Genom att förstå lösningar på dessa problem kan vi skapa bra applikationer.

# ❓ På vilket sätt komuncerar en klient med en server?

Den modell som används för webben kallas klient server 
modele("Client–server model") 

- Klienten är ett program på din lokala dator
- Från din klient görs ett anrop("request") till servern.
- Detta besvara servern med ett svar("respons") till klienten.
- Klienten tar emot detta svar.

# Client server Model

- 🔗 [Client server model](https://www.lifewire.com/web-browsers-and-web-servers-communicate-817764)

# Begräsningar

Detta innebär att vi har begräsningar

- Server anropar alldrig klienten.
- När server har svarat på ett anrop är den klar.
- Det innebär att servern "glömmer bort" klienten.
  - Fast i praktiken finns det många lösningar på detta.

# Anrop("request")

Klienten anropar servern. I anropen kan det finns mycket information 
till servern. 

- Anropen innehåller en URL 
- Vilken typ av klient och dator
- Tid när anropet gjordes.
- Var någonstans svaret ska skickas.
- Vilken kryptering som ska använs
- Data som klienten vill skicka till servern.

# Svar("respons")

Server ger ett svar till klienten.

- Svaret innehåller en header som ger information om svaret
- Data som server vill skicka till klienten.

# Stateless

Stateless betyder att ett protokoll behandlar varje anrop separat.

- Detta gör att protokollet inte hjälper servern eller klienten att 
   komma ihåg vad som hänt.
- Men det finns finns flera metoder att komma runt de problem som då 
   skapas.
 - Webbkakor("cookies") är ett sätt att komma runt detta.
 - En webbkaka sparar nämligen lite data hos klienten.

Kunde tyvärr inte hitta någon bra översättning till svenska.

# Polling

Eftersom en server inte kan fråga en klient något blir det problem om 
servern behöver säga något till klienten.

- Ett exempel på detta skulle vara en chatt app.
- För om server får besket av en klient att den vill prata med en 
   anna klient.
  - Hur gör den då?
- En lösning är att alla klienter anropar server ofta, för då kan 
   server svara.
- Detta kallas "polling"
- Det är inget effektivt sätt att komunicera. 
