Kurse:HTTP Code Übungen: Unterschied zwischen den Versionen

Aus ahrensburg.city
Zur Navigation springen Zur Suche springen
Die Seite wurde neu angelegt: „== Übungen zu HTTP-Protokoll und ASP.NET Core == === Übung 1: HTTP-Antwort beobachten im Browser === # Öffne deine Beispiel-Webseite in Chrome oder Firefox. # Aktiviere die Entwickler-Tools und wechsle zum Netzwerk-Tab (siehe §19.6 in LaunchCode) :contentReference[oaicite:1]{index=1}. # Lade die Seite neu und identifiziere: : * Eine GET‑Anfrage für das HTML-Dokument : * Eine GET‑Anfrage für eine CSS-Datei : * Eine GET‑Anfrage für ein Bild #…“
 
Keine Bearbeitungszusammenfassung
 
(Eine dazwischenliegende Version desselben Benutzers wird nicht angezeigt)
Zeile 1: Zeile 1:
== Übungen zu HTTP-Protokoll und ASP.NET Core ==
== HTTP Spickzettel (MediaWiki) ==


=== Übung 1: HTTP-Antwort beobachten im Browser ===
=== HTTP-Protokoll – Übersicht ===
# Öffne deine Beispiel-Webseite in Chrome oder Firefox.
* HTTP (Hypertext Transfer Protocol) ist ein zustandsloses Protokoll ...
# Aktiviere die Entwickler-Tools und wechsle zum Netzwerk-Tab (siehe §19.6 in LaunchCode) :contentReference[oaicite:1]{index=1}.
...
# Lade die Seite neu und identifiziere:
: * Eine GET‑Anfrage für das HTML-Dokument
: * Eine GET‑Anfrage für eine CSS-Datei
: * Eine GET‑Anfrage für ein Bild
# Notiere für jede Anfrage:
: * Statuscode, z. B. 200 oder 404
: * Content-Type und Größe (Bytes)
# Experimentiere:
: * Ändere im HTML die URL einer CSS-Datei auf einen falschen Namen
: * Lade die Seite erneut und erkläre, wie sich das Verhalten ändert :contentReference[oaicite:2]{index=2}
 
=== Übung 2: HTTP‑Response‑Analyse ===
Analysiere diese Beispiel-Antwort:


<pre>
=== Übung: Statuscode und Header setzen ===
HTTP/1.1 404 Not Found
Date: Sat, 21 Jun 2025 20:38:53 +0000
Server: Apache/2.2.3 (CentOS)
Content-Length: 67365
Keep-Alive: timeout=37, max=95
Connection: Keep-alive
Content-Type: text/html
</pre>
 
Beantworte:
# Welche HTTP-Version wird verwendet?
# Wurde der Inhalt erfolgreich gesendet?
# Wie groß ist das Dokument?
# Ist die Verbindung persistent?
# Welcher Medientyp wird zurückgesendet?
# Welche Server-Software und Version?
# Ändert sich der ETag bei neuen Ressourcenversionen?
(Lösungsvorlage siehe UMass-Quelle) :contentReference[oaicite:3]{index=3}
 
=== Übung 3: Minimal-HTTP‑Server mit ASP.NET Core ===
Erstelle eine minimalistische ASP.NET Core‑App (ohne MVC oder Razor), die:
* Auf GET-Anfragen an `/` antwortet mit: `Hello, World!`
* Angabe:
<pre>
<pre>
var builder = WebApplication.CreateBuilder(args);
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
var app = builder.Build();


app.Run(async context => {
app.Run(async (HttpContext context) =>
     context.Response.Headers["Content-Type"] = "text/plain";
{
     await context.Response.WriteAsync("Hello, World!");
    context.Response.StatusCode = 200;
     context.Response.Headers["Content-Type"] = "text/html";
     await context.Response.WriteAsync("&lt;h1&gt;Übung erfolgreich&lt;/h1&gt;");
});
});


app.Run();
app.Run();
</pre>
</pre>
'''Ziel:''' Einen eigenen HTTP-Header setzen und eine HTML-Antwort senden.


=== Übung 4: Antwort-Header anpassen ===
=== Übung: Abfrage von Query-Parametern ===
Erweitere Übung 3 so, dass:
<pre>
* Ein eigener Header `X‑Powered‑By` mit Wert `MyServer` gesetzt wird.
app.Run(async (HttpContext context) =>
* Der Content-Type auf `text/html` geändert wird und das HTML `<h1>Hallo Welt!</h1>` zurückgeliefert wird.
{
    if (context.Request.Method == "GET" && context.Request.Query.ContainsKey("name"))
    {
        string name = context.Request.Query["name"];
        await context.Response.WriteAsync($"&lt;p&gt;Hallo {name}!&lt;/p&gt;");
    }
    else
    {
        await context.Response.WriteAsync("&lt;p&gt;Bitte gib einen Namen per Query an (z.B. ?name=Max)&lt;/p&gt;");
    }
});
</pre>
'''Ziel:''' Umgang mit Query-Strings (z. B. ?name=Max) trainieren.


=== Übung 5: HTTP‑Statuscodes dynamisch setzen ===
=== Übung: User-Agent anzeigen ===
Erstelle eine Route `/status`, die anhand eines Query‑Parameters `code` den Status festlegt:
<pre>
app.Run(async (HttpContext context) =>
{
    string agent = context.Request.Headers["User-Agent"];
    await context.Response.WriteAsync($"&lt;p&gt;Dein Browser: {agent}&lt;/p&gt;");
});
</pre>
'''Ziel:''' HTTP-Header auslesen und anzeigen.


* Beispielaufruf: `/status?code=201`
=== Übung: HTTP-Request analysieren ===
* Dein Code:
<pre>
<pre>
var code = int.Parse(context.Request.Query["code"]);
app.Run(async (HttpContext context) =>
context.Response.StatusCode = code;
{
await context.Response.WriteAsync($"Status: {code}");
    var path = context.Request.Path;
    var method = context.Request.Method;
    await context.Response.WriteAsync($"&lt;p&gt;Pfad: {path}&lt;/p&gt;");
    await context.Response.WriteAsync($"&lt;p&gt;Methode: {method}&lt;/p&gt;");
});
</pre>
</pre>
'''Ziel:''' Grundlagen zu Methode und Pfad aus Requests üben.


Teste mit verschiedenen Codes wie 200, 400, 404, 500.
=== Übung: GET vs. POST Test mit Postman ===
'''Anleitung:'''
# Starte deine ASP.NET Core App lokal.
# Öffne Postman.
# Sende GET- und POST-Anfragen an http://localhost:7070 mit passenden Inhalten.
# Beobachte Verhalten bei:
  * GET mit Query
  * POST mit Body (JSON oder Form-Daten)


=== Übung 6: GET‑Parameter auslesen ===
'''Ziel:''' Unterschiede zwischen GET- und POST-Anfragen erfahren und testen.
Baue eine Route `/hello`, die einen Query‑Parameter `name` erwartet:
 
* Beispiel: `/hello?name=Alice`
* Antwort: `<p>Hello, Alice!</p>`
* Beispiel-Code:
<pre>
if (context.Request.Path == "/hello" && context.Request.Method == "GET") {
  var name = context.Request.Query["name"];
  await context.Response.WriteAsync($"<p>Hello, {name}!</p>");
}

Aktuelle Version vom 23. Juni 2025, 21:19 Uhr

HTTP Spickzettel (MediaWiki)

HTTP-Protokoll – Übersicht

  • HTTP (Hypertext Transfer Protocol) ist ein zustandsloses Protokoll ...

...

Übung: Statuscode und Header setzen

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.Run(async (HttpContext context) =>
{
    context.Response.StatusCode = 200;
    context.Response.Headers["Content-Type"] = "text/html";
    await context.Response.WriteAsync("<h1>Übung erfolgreich</h1>");
});

app.Run();

Ziel: Einen eigenen HTTP-Header setzen und eine HTML-Antwort senden.

Übung: Abfrage von Query-Parametern

app.Run(async (HttpContext context) =>
{
    if (context.Request.Method == "GET" && context.Request.Query.ContainsKey("name"))
    {
        string name = context.Request.Query["name"];
        await context.Response.WriteAsync($"<p>Hallo {name}!</p>");
    }
    else
    {
        await context.Response.WriteAsync("<p>Bitte gib einen Namen per Query an (z.B. ?name=Max)</p>");
    }
});

Ziel: Umgang mit Query-Strings (z. B. ?name=Max) trainieren.

Übung: User-Agent anzeigen

app.Run(async (HttpContext context) =>
{
    string agent = context.Request.Headers["User-Agent"];
    await context.Response.WriteAsync($"<p>Dein Browser: {agent}</p>");
});

Ziel: HTTP-Header auslesen und anzeigen.

Übung: HTTP-Request analysieren

app.Run(async (HttpContext context) =>
{
    var path = context.Request.Path;
    var method = context.Request.Method;
    await context.Response.WriteAsync($"<p>Pfad: {path}</p>");
    await context.Response.WriteAsync($"<p>Methode: {method}</p>");
});

Ziel: Grundlagen zu Methode und Pfad aus Requests üben.

Übung: GET vs. POST Test mit Postman

Anleitung:

  1. Starte deine ASP.NET Core App lokal.
  2. Öffne Postman.
  3. Sende GET- und POST-Anfragen an http://localhost:7070 mit passenden Inhalten.
  4. Beobachte Verhalten bei:
 * GET mit Query
 * POST mit Body (JSON oder Form-Daten)

Ziel: Unterschiede zwischen GET- und POST-Anfragen erfahren und testen.