HTTP od zera do bohatera

36
od zera do bohatera Marek Stawiasz Paweł Apanasewicz

Transcript of HTTP od zera do bohatera

Page 1: HTTP od zera do bohatera

od zera do bohateraMarek StawiaszPaweł Apanasewicz

Page 2: HTTP od zera do bohatera

O czym będziemy mówić

HTTPHTTPS, WebDAV, SPDY

DNT, HSTS, HTLSAJAX, Same Origin Policy, CORS

Page 3: HTTP od zera do bohatera

1. Hypertext Transfer Protocol

2. protokół warstwy aplikacji według modelu OSI

3. bazuje na TCP

4. nasłuchuje na porcie 80 (wersja szyfrowana na porcie 443)

5. jest protokołem tekstowym

6. jest protokołem bezstanowym

OK, więc co to takiego ten HTTP?

Page 4: HTTP od zera do bohatera

Pierwszy dokument o HTTPukazał się w 1991 roku

Czyli 21 lat temu!

To prehistoria jeśli chodziInternet

A życie wtedy było dużo prostsze

Dawno, dawno temu...

Page 5: HTTP od zera do bohatera

HTTP w pierwszej swojej wersji 0.9 posiadał tylko jedną metodę – GET*

* daj mi ten dokument

REWOLUCJA ROZPOCZĘŁA SIĘ

Page 6: HTTP od zera do bohatera

Jak mówi klient (przeglądarka)?

A w praktyce

GET /index.html HTTP/1.1Host: www.example.comUser-Agent: Mozilla/5 (X11;Ubuntu;Linux) Firefox 16Cookie: ala=makotaAccept: text/htmlAccept-Language: en-US

Page 7: HTTP od zera do bohatera

Jak mówi serwer?

A w praktyce

HTTP/1.1 200 OKDate: Mon, 23 May 2005 22:38:34 GMTServer: Apache/1.3.3.7 (Unix) (Red-Hat/Linux)Etag: "3f80f-1b6-3e1cb03b"Content-Length: 438Connection: closeContent-Type: text/html; charset=UTF-8

Czterysta trzydzieści osiem bajtów odpowiedzi...

Page 8: HTTP od zera do bohatera

Najczęściej spotykane kody odpowiedzi serwera

A w praktyce

200 OK201 Created202 Accepted204 No Content206 Partial Content301 Moved Permanently304 Not Modified400 Bad Request403 Forbidden405 Method Not Allowed500 Interal Server Error

404 Not Found404 Not Found

Page 9: HTTP od zera do bohatera

Co jeszcze może HTTP:

A w praktyce

- pobierać dokument - GET- przesyłać dane - POST- zapytać o nagłówki - HEAD- przesyłać pliki na serwer - PUT- kasować pliki na serwerze - DELETE- spytać serwer o możliwości - OPTIONSi inne: TRACE, CONNECT

Page 10: HTTP od zera do bohatera

Siła drzemie... w nagłówkach

A w praktyce

w standardzie HTTP 1.1 otrzymujemy:31 nagłówków zapytania34 nagłówków odpowiedzi

dodatkowo poza standardem:7 powszechnie stosowanych nagłówków zapytania5 powszechnie stosowanych nagłówków odpowiedzi

Page 11: HTTP od zera do bohatera

Siła drzemie... w nagłówkach

A w praktyce

Serwer Klient

Server Host

Date User-Agent

Expires Accept-Language

Vary Accept-Encoding

Content-Language Accept

Content-Encoding Referer

Content-Type Set-Cookie

Location X-Forwarded-For

Cookie

Cache-Control

Page 12: HTTP od zera do bohatera

Siła drzemie... w nagłówkach

A w praktyce

X-Powered-By: UnicornsX-Powered-By: Rats in your basementX-Powered-By: Elves

X-Recruitng: Like HTTP headers? Come write ours: booking.com/jobsX-Recruiting: If you’re reading this, maybe you should be working at Zappos instead. Check out jobs.zappos.com

Page 13: HTTP od zera do bohatera

BEZPIECZEŃSTWO

- autoryzacja BASIC i DIGEST- protokół SSL- DNT (Do Not Track)- HSPS- Same Origin Policy + CORS

Page 14: HTTP od zera do bohatera

Autoryzacja BASIC

BEZPIECZEŃSTWO

Serwer:WWW-Authenticate: Basic realm="you shall not pass!"

Klient:Authorization: Basic QWxhZGluOnNlc2FtIG9wZW4=

Page 15: HTTP od zera do bohatera

Autoryzacja DIGEST

BEZPIECZEŃSTWO

SERWER:WWW-Authenticate: Digest realm="[email protected]",qop="auth,auth-int", nonce="dcd98b7102dd2f0e8b11d0f600bfb0c093",opaque="5ccc069c403ebaf9f0171e9517f40e41"

KLIENT:Authorization: Digest username="Mufasa",realm="[email protected]",nonce="dcd98b7102dd2f0e8b11d0f600bfb0c093",uri="/dir/index.html", qop=auth, nc=00000001, cnonce="0a4f113b",response="6629fae49393a05397450978507c4ef1",opaque="5ccc069c403ebaf9f0171e9517f40e41"

Page 16: HTTP od zera do bohatera

Protokół SSL

BEZPIECZEŃSTWO

Page 17: HTTP od zera do bohatera

HSTS – HTTP Strict Transport Security

BEZPIECZEŃSTWO

Strict-Transport-Security: max-age=31536000; includeSubDomains

ALE:- nagłówek ten musi zostać przesłany poprzez HTTPS z zaufanym certyfikatem inaczej MUSI zostać zignorowany!

- działa wszędzie już od dawna Firefox, Chrome, Opera... tylko nie w Internet Explorerze!

Page 18: HTTP od zera do bohatera

DNT: Do Not Track

BEZPIECZEŃSTWO

DNT: 1

Obsługiwany przez WSZYSTKIE przeglądarki!

Użytkownik ŚWIADOMIE musi zaznaczyć iż nie chce być śledzony.

Internet Explorer 10 łamie tą zasadę, wysyła DNT domyślnie!

Page 19: HTTP od zera do bohatera

CORS: Cross Origin Resource Sharing

BEZPIECZEŃSTWO

Pomaga w problemach z regułą Same Origin Policy w wywołaniach XHR:

Klient:Origin: http://www.serwer.com

Serwer:Access-Control-Allow-Origin: http://serwer.com/

Page 20: HTTP od zera do bohatera

CORS: Cross Origin Resource Sharing

BEZPIECZEŃSTWO

Domyślnie nie są przesyłane informacje uwierzytelniające (ciasteczka, autoryzacja, certyfikaty SSL)

Access-Control-Allow-Credentials: true

W Internet Explorer z CORS korzystamy poprzez obiekt XDomainRequest. IE nie daje JAKIEJKOLWIEK możliwości przesyłania informacji uwierzytelniających.

Page 21: HTTP od zera do bohatera

WYDAJNOŚĆ

- Keep-Alive- Wiele połączeń równolegle- Cache- Pobieranie fragmentów plików- HTLS

- SPDY

Page 22: HTTP od zera do bohatera

Keep-Alive, wiele połączeń równolegle

WYDAJNOŚĆ

Connection: close

Connection: keep-alive

Wiele połączeń TCP jednocześnie!

Trik: Ajax - Long-Pooling!

Page 23: HTTP od zera do bohatera

Cache

WYDAJNOŚĆ

Cache-control: public, private, no-cache, no-store, max-age, must-revalidate, proxy-revalidate

ETag: "686897696a7c876b7e"If-None-Match: "686897696a7c876b7e"304 Not Modified

Nagłówek ETag może zostać wykorzystany do śledzenia użytkownika!

Page 24: HTTP od zera do bohatera

Pobieranie fragmentów plików

WYDAJNOŚĆ

Serwer:Accept-Ranges: bytes

Klient:Range: początek-koniec

Serwer:Content-Range: początek-koniec/ogółem

206 Partial Content416 Request Range Not Satisfiable

Page 25: HTTP od zera do bohatera

HTLS – HTTP Live Streaming

WYDAJNOŚĆ

Technologia opracowana przez Applei zaimplementowana w QuickTime oraz iPhone.

Plik do przesłania dzielony jest na wiele małychczęści.

Części te przesyłane są na samym początku transmisji w pliku m3u8.

Page 26: HTTP od zera do bohatera

SPDY

WYDAJNOŚĆ

Page 27: HTTP od zera do bohatera

SPDY

WYDAJNOŚĆ

- maksymalne wykorzystania połączenia TCP- połączenie szyfrowane- całość połączenia jest kompresowana- jednym połączeniem przesyłanych jest wiele zasobów jednocześnie- priorytety- server push- server hint

Page 28: HTTP od zera do bohatera

SPDY

WYDAJNOŚĆ

Zmniejszenie ruchu wychodzącego o 40%

Wzrost wydajności od 30% do 55%

Użycie mniejszej ilości połączeń TCP

Internet Explorer... jak zwykle...

Opera, Chrome, Firefox... też mobilne!

Page 29: HTTP od zera do bohatera

WebDAV – Web Distributed Authoring & Versioning

POZA PRZEGLĄDARKĄ

Nowe komendy:- PROPFIND- PROPPATCH- MKCOL- COPY- MOVE- LOCK- UNLOCK

Page 30: HTTP od zera do bohatera

WebDAV – Web Distributed Authoring & Versioning

POZA PRZEGLĄDARKĄ

Daje możliwości praktycznie pełnego systemu plików poprzez protokół HTTP!

W Microsoft Windows już od wersji 98 jako Web Folders.

W systemach Linux czy Mac OSX możliwe jest podmontowanie zasobów WebDAV.

Wykorzystywany przez SVN.

Page 31: HTTP od zera do bohatera

Web Services

POZA PRZEGLĄDARKĄ

Usługi świadczone poprzez sieć, zazwyczaj korzystając z protokołu HTTP.

Często zdefiniowane za pomocą języka opisu usługi (WSDL)

Najpopularniejsze metody wykorzystania:- SOAP - simple object access protocol- XML-RPC - XML Remote Procedure Call

Page 32: HTTP od zera do bohatera

LINUX

PRZYKŁADY

# wget http://www.horde-technology.pl

# curl http://www.horde-technology.pl

Page 33: HTTP od zera do bohatera

PHP

PRZYKŁADY

$request = "GET {$path} HTTP/1.1\r\nHost: {$host}\r\n\r\n";

$f = fsockopen($host, 80, $errno, $errstr, 30);

fwrite($f, $requestData);

while (!feof($f)) { echo fgets($f, 128);}

fclose($f);

Page 34: HTTP od zera do bohatera

BASH

PRZYKŁADY

#!/bin/bash

exec 5<>/dev/tcp/www.horde-technology.pl/80

cat <&5 &

printf "GET / HTTP/1.0\r\n\r\n" >&5

Page 35: HTTP od zera do bohatera

SPDY w NODE.js

PRZYKŁADY

npm install spdy

var spdy = require('spdy'), Options = {};

var server = spdy.createServer(options, app);

server.listen(443);

Page 36: HTTP od zera do bohatera

http://www.horde-technology.pl

dziękujemy