HTTP
HTTP, Hypertext Transfer Protocol, er en applikationsprotokol til request/response-kommunikation. En klient sender en forespørgsel til en server, og serveren sender et svar tilbage.
HTTP kræver et netværk nedenunder. IP sørger for adressering, og transportlaget leverer forbindelsen mellem programmerne. Den underliggende lokale netværksteknologi kan være WiFi eller en anden teknologi; her fokuserer vi på HTTP selv.
Byte-rate: HTTP har ikke sin egen faste bytehastighed. Den afhænger af den underliggende Wi-Fi-/netværksforbindelse, transporten og størrelsen på HTTP-headers og payload.
En HTTP-request
- Metode – for eksempel
GET,POST,PUTellerDELETE. - URL – server, port og sti, for eksempel
http://example.org/sensor. - Headers – metadata som
Host,AcceptogContent-Type. - Payload – eventuelle data, især ved
POSTellerPUT.
Et HTTP-response
- Statuskode – for eksempel
200 OK,404 Not Foundeller500 Server Error. - Headers – beskriver blandt andet indholdstype og længde.
- Payload – HTML, JSON, tekst eller andre data.
Payload-formater
HTML og JSON er ikke HTTP-protokoller. De er formater, som HTTP kan transportere i payloaden.
- HTML – et dokumentformat til websideindhold, typisk med
Content-Type: text/html. - JSON – et struktureret dataformat, der ofte bruges mellem IoT-klienter og API’er, typisk med
Content-Type: application/json. - Accept – klienten kan angive, hvilke formater den kan modtage.
- Content-Type – afsenderen angiver, hvilket format payloaden faktisk har.
Det hører derfor først hjemme på HTTP-siden som payload og content negotiation. Senere kan HTML og JSON få selvstændige teorisider under dataformater, hvis de skal forklares i dybden.
HTTP-pakkeformat: HTML eller JSON?
Klienten angiver ønsket format med Accept. Serveren angiver det format, den faktisk sender, med Content-Type. Det er altså ikke URL’en alene, der bestemmer, om svaret er HTML eller JSON.
Klient beder om HTML
GET /status HTTP/1.1
Host: example.org
Accept: text/html
Connection: close
HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 82
<h1>Temperatur</h1>
<p>21,5 °C</p>
Klient beder om JSON
GET /api/status HTTP/1.1
Host: example.org
Accept: application/json
Connection: close
HTTP/1.1 200 OK
Content-Type: application/json
{"temperature":21.5,"unit":"C"}
Acceptstår i requesten og udtrykker klientens ønske.Content-Typestår i response-headeren og beskriver payloadens faktiske format.- Ved en request med body, for eksempel
POST, angiver klienten selv body-formatet med sin egenContent-Type.
HTTP i IoT
En sensor kan sende målinger med POST, og en controller kan hente konfiguration med GET. HTTP er let at integrere med webservere, men protokollen har mere overhead end specialiserede IoT-protokoller.
- IP – adressering og transport af pakker.
- WiFi – en mulig lokal netværksforbindelse.
- HTTP-klient – konkret Arduino-eksempel.