Odpověď serveru 207 Multi-Status
Kratký přehled status kódu 207
Status kód HTTP 207 (Multi-Status) se používá k označení více stavů v jedné odpovědi. Tento kód je zvláště užitečný v situacích, kdy je potřeba poskytnout informace o stavu několika zdrojů v rámci jednoho požadavku.
Definice a účel
Kód 207 je součástí specifikace WebDAV (Web Distributed Authoring and Versioning), která rozšiřuje protokol HTTP. Umožňuje serveru vrátit více stavových kódů pro různé zdroje, což je nezbytné, když se operace týkají více objektů najednou.
Kdy použít kód 207
Kód 207 by měl být použit v případech, kdy klient provádí operace nad více zdroji, například při hromadném nahrávání, aktualizaci nebo mazání souborů. Tento kód usnadňuje efektivní zpracování odpovědí od serveru.
Struktura odpovědi s kódem 207
Odpověď serveru s kódem 207 obsahuje XML strukturu, která popisuje stav jednotlivých zdrojů. Tato struktura může vypadat následovně:
<multistatus> <response> <href>http://example.com/resource1</href> <status>HTTP/1.1 200 OK</status> </response> <response> <href>http://example.com/resource2</href> <status>HTTP/1.1 404 Not Found</status> </response> </multistatus>
Praktické příklady použití kódu 207
Příklad 1: Zpracování více souborů
Popis situace
Klient posílá požadavek na server pro nahrání několika souborů najednou. Server může odpovědět s různými stavy pro každý soubor.
Příklad požadavku a odpovědi
POST /upload HTTP/1.1 Host: example.com Content-Type: multipart/form-data --boundary Content-Disposition: form-data; name="file1"; filename="file1.txt" Content-Type: text/plain ...obsah souboru... --boundary Content-Disposition: form-data; name="file2"; filename="file2.txt" Content-Type: text/plain ...obsah souboru... --boundary--
HTTP/1.1 207 Multi-Status Content-Type: application/xml <multistatus> <response> <href>http://example.com/file1.txt</href> <status>HTTP/1.1 201 Created</status> </response> <response> <href>http://example.com/file2.txt</href> <status>HTTP/1.1 400 Bad Request</status> </response> </multistatus>
Příklad 2: Aktualizace několika zdrojů najednou
Popis scénáře
Klient chce aktualizovat informace o několika uživatelských účtech v jedné operaci. Server může vrátit odpověď se stavem pro každý účet.
Příklad požadavku a odpovědi
PUT /users HTTP/1.1 Host: example.com Content-Type: application/json [ {"id": 1, "name": "Nový Jméno 1"}, {"id": 2, "name": "Nový Jméno 2"} ]
HTTP/1.1 207 Multi-Status Content-Type: application/xml <multistatus> <response> <href>http://example.com/users/1</href> <status>HTTP/1.1 200 OK</status> </response> <response> <href>http://example.com/users/2</href> <status>HTTP/1.1 404 Not Found</status> </response> </multistatus>
Příklad 3: Získání stavů z různých zdrojů
Popis úkolu
Klient potřebuje zkontrolovat stavy více zdrojů a server vrátí odpověď s informacemi o každém z nich.
Příklad požadavku a odpovědi
GET /status-check HTTP/1.1 Host: example.com
HTTP/1.1 207 Multi-Status Content-Type: application/xml <multistatus> <response> <href>http://example.com/resource1</href> <status>HTTP/1.1 200 OK</status> </response> <response> <href>http://example.com/resource2</href> <status>HTTP/1.1 503 Service Unavailable</status> </response> </multistatus>
Oprava chyb spojených s kódem 207 v různých programovacích jazycích
Python
Příklad kódu s chybou
import requests response = requests.post('http://example.com/upload', files={'file': 'data'}) if response.status_code == 207: print("Úspěch") else: print("Chyba")
Způsoby opravy
Je nutné zpracovat odpověď jako XML a analyzovat jednotlivé stavy pro každou položku.
JavaScript (Node.js)
Příklad kódu s chybou
const axios = require('axios'); axios.post('http://example.com/upload', data) .then(response => { if (response.status === 207) { console.log("Úspěch"); } }) .catch(error => { console.error("Chyba:", error); });
Způsoby opravy
Je třeba zkontrolovat strukturu odpovědi a správně zpracovat XML pro extrakci jednotlivých stavů.
PHP
Příklad kódu s chybou
$response = file_get_contents('http://example.com/upload'); if ($http_response_header[0] == "HTTP/1.1 207 Multi-Status") { echo "Úspěch"; }
Způsoby opravy
Musíte správně analyzovat HTTP hlavičky a zpracovat XML odpověď pro získání stavu jednotlivých zdrojů.
Diskuze o možných problémech a omezeních
Možné chyby při použití kódu 207
Mezi běžné chyby patří nedostatečné zpracování XML odpovědi a ignorování různých stavových kódů pro jednotlivé zdroje.
Omezení ve formátu odpovědi
Formát odpovědi je silně závislý na XML, což může být problém pro klienty, kteří nemají potřebné knihovny pro jeho zpracování.
Doporučení pro optimalizaci požadavků
- Používejte kompresi pro snížení velikosti dat přenášených v odpovědích.
- Minimalizujte množství dat, která posíláte v jednom požadavku, aby nedošlo k přetížení serveru.
- Testujte a monitorujte výkon serveru při používání kódu 207.
Příklady úspěšného použití kódu 207 v reálných aplikacích
Služby, které používají kód 207
Název služby | Popis |
---|---|
Cloud Storage | Umožňuje uživatelům nahrávat a spravovat soubory s možností vrátit více stavů pro jednotlivé soubory. |
Hromadné aktualizace databáze | Podporuje aktualizaci více záznamů najednou s informacemi o stavu každého záznamu. |
Použivatelské případy a zpětná vazba od vývojářů
Vývojáři často uvádějí, že použití kódu 207 zjednodušuje proces správy více zdrojů a zvyšuje efektivitu jejich aplikací. Je však nezbytné pečlivě zpracovávat odpovědi a důkladně testovat všechny scénáře použití.