Skip to content

Commit

Permalink
Add HTTP Versions + Content Negotiation
Browse files Browse the repository at this point in the history
  • Loading branch information
lukaspanni committed Nov 29, 2023
1 parent c082153 commit 6247bb9
Show file tree
Hide file tree
Showing 3 changed files with 88 additions and 9 deletions.
12 changes: 11 additions & 1 deletion Material/Slides/01_Vorstellung_Intro.md
Original file line number Diff line number Diff line change
Expand Up @@ -77,14 +77,24 @@ plantuml-format: svg
### Projektarbeit:

- Entwicklung einer (kleinen) Webanwendung mit hier gelernten Technologien
- Gruppenarbeit möglich (<=4 Studierende)
- Gruppenarbeit möglich (3 - 5 Studierende)
- Bewertung mit Vorlesung Projektmanagement (Hr. Merkel)
- Note Webengineering:
- Konzept & Umsetzung der Webanwendungen
- Einhaltung vorgestellter Best-Practices
- Regelmäßige Vorstellung aktueller Zwischenstände
- Note Projektmanagement: Projektmanagement, mehr dazu von Hr. Merkel

\rightarrow{} **Aufgabe bis in 2 Wochen (22.01.): Gruppen bilden & Thema überlegen**

## Projektarbeit - mögliche Themen

- TODO-App
- Zeiterfassung ("Stechuhr")
- einfaches Spiel (Snake, Pac-Man, ...)
- Dashboard für Daten von einer APIs (GitHub, deps.dev, ...)
- [verschiedene Daten öffentlicher Stellen](https://github.com/bundesAPI)
- eigene Ideen

# Vorlesungsinhalt & Lernziele

Expand Down
85 changes: 77 additions & 8 deletions Material/Slides/02_HTTP_REST.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ plantuml-format: svg
- Protokoll speichert keine Informationen!
- Jedes Request-Response-Paar ist unabhängig voneinander
- Erhöht Skalierbarkeit \rightarrow{} dazu später mehr
- Zustandsinformationen (z.B. Logindaten) müssen auf andere Art und Weise gespeichert werden
- ABER: Zustandsinformationen (z.B. Logindaten) müssen auf andere Art und Weise gespeichert werden

## HTTP Request - Response

Expand Down Expand Up @@ -63,7 +63,36 @@ Date: Fri, 17 Nov 2023 12:26:59 GMT


## Verbreitung der HTTP-Versionen
![](https://blog.cloudflare.com/content/images/2023/06/download-3.png){height=95%}
![](https://blog.cloudflare.com/content/images/2023/06/download-3.png){height=80%}

_https://blog.cloudflare.com/content/images/2023/06/download-3.png_

## HTTP-Versionen

- 1996: **HTTP/1.0**
- 1999: **HTTP/1.1**
- Verschiedene Verbesserungen, z.B. Pipelining zur Reduktion von TCP-Verbindungen
- Einführung von optionalem "Host"-[[HTTP-Header|Header]]
- → ermöglicht Nutzung von einem physischen Server für mehrere Webseiten
- 2015: **HTTP/2**
- **Ziel**: Performanceverbesserungen und Optimierungen
- Volle Abwärtskompatibilität
- Multiplexing: mehrere Anfragen über eine Verbindung
- Server-initiierte Datenübertragung \rightarrow{} konnte sich nicht durchsetzen, seit Chrome 106 (September 2022) nicht mehr unterstützt


## HTTP-Versionen

- 2022: **HTTP/3**
- Neues Übertragungsprotokoll: **QUIC**
- Bei zuvor genutztem Multiplexing über TCP ist Head-of-Line-Blocking möglicht
- Bei Paketverlust müssen alle folgenden Pakete (aller gemultiplexten Streams) auf erneute Übertragung des Verlorenen warten
- Mehrere nutzt _unabhängige_ parallele Datenströme über UDP, Head-of-Line-Blocking betrifft jeweils nur einen Stream

## HTTP-Versionen - HTTP/3 vs. HTTP/2
![](media/HTTP3.png){height=65%}

_https://de.wikipedia.org/wiki/Hypertext_Transfer_Protocol#/media/Datei:HTTP-2_vs._HTTP-3_Protocol_Stack.svg_


## HTTP Header
Expand All @@ -78,19 +107,59 @@ Date: Fri, 17 Nov 2023 12:26:59 GMT
- Accept-Language
- Cookie
- ...
- Steuern verschiedene Funktionen ...


## Exkurs HTTP Content Negotiation
## HTTP Content Negotiation

- Feature das eine *automatische* Einigung auf ein Ausgabeformt ermöglicht
- Client sendet gewünschtes Format im `Accept`-Header
- Ermöglicht verschiedene _Repräsentationen_ für die gleiche _Ressource_
- Weitere Header für Sprache (`Accept-Language`) und Kodierung `Accept-Encoding`
- Format der Antwort über `ContentType`, `Language`, `Encoding` Header angegeben

- Server-driven (Server entscheidet):
- Client sendet gewünschtes Format im `Accept`-Header
- Angabe mehrerer Formate: z.B. `Accept: text/html,text/plain`
- Server gibt die Antwort im ersten untertützten Format zurück
- Format der Antwort über `ContentType`-Header angegeben

```{.plantuml height=35%}
Client->Server : Accept: application/json, text/xml
Server->Client : ContentType: application/json

## HTTP Content Negotiation

```{.plantuml height=50%}
Client->Server : GET /; Accept: application/json, text/xml
Server->Client : 200 OK, ContentType: application/json
```

## HTTP Content Negotiation

- Agent-driven (Client entscheidet)
- Gleicher Beginn, Server antwortet mit Liste verfügbarer Repräsentationen
- Client kann die am besten passende auswählen und anfragen


```{.plantuml height=50%}
Client->Server : GET /; Accept: application/json, text/xml
Server->Client : 300 Multiple Choices; ...
Client->Server : GET /r1; Accept: application/json
Server->Client : 200 OK, ContentType: application/json
```


## HTTP Content Negotiation

- Beide Varianten haben Vor- und Nachteile

| | Nachteile | Vorteile |
| --- | --- | --- |
| Server-driven | gute Unterstzützung | Server kann nicht optimal entscheiden |
| Agent-driven | kein einheitliches Format | - Client kann die optimale Entscheidung treffen \newline - zusätzlicher Request notwendig |




## HTTP Methoden


## HTTP Status Codes

# REST
Binary file added Material/Slides/media/HTTP3.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit 6247bb9

Please sign in to comment.