Stateful web, developments, trends 1 Webtechnologie Lennart Herlaar.

Slides:



Advertisements
Verwante presentaties
SharePoint denk in blokken Ton Stegeman.
Advertisements

Stateful web, developments, trends 1 Webtechnologie Lennart Herlaar.
Databases via internet
JQuery en ASP.NET Bart De Meyer.
ASP.NET AJAX Extensions Richard Soeteman
Internetapplicaties - II Gegevensinvoer 1 Internetapplicaties Deel 2: Gegevensinvoer: HTML-forms, JavaScript en JSP.
EEN PRESENTATIE Hoe ziet er een presentatie (niet) uit? Wat zijn de hulpmiddelen? H v BreugelA vdr Coelen ZWIJSEN COLLEGE VEGHEL Wat zijn de soorten?
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - -
Webapplicaties: de serverkant
The web programming environment 1 Webtechnologie Lennart Herlaar.
11 Infrastructuur Optimalisatie: Waarom een op voorzieningen gebaseerd platform de betere keuze is.
SQL injections en meer... PERU. web application vulnerabilities Cross Site Scripting (21.5%) SQL Injection (14%) PHP includes (9.5%) Buffer overflows.
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - -
The KB en Web 2.0 Verlaag de drempel om services te integreren. Theo van Veen, 7 november 2006.
Webmaster Training: CSS CSS2 & XHTML By Frederik Van Outryve.
1 OMI Technisch ontwerp. 2 Technisch ontwerp ‘content’ Veel breder dan business portals (Carlson) Verschillende aspecten / aandachtspunten:
Webapplicaties: de clientkant in het universitaire onderwijs Sylvia Stuurman – Herman Koppelman Faculteit Informatica.
Wolter Kaper - Ruby on Rails Webtoepassing ontwerpen Webprogrammeren, week 1.
Introductie in: PHP. Groei in webapplicaties Groei in webapplicaties Het ontstaan van PHP Het ontstaan van PHP De client-serverarchitectuur De client-serverarchitectuur.
Joost van Dijk Web Technology
Hoofdstuk 16 en 19 PHP en MYSQL
AJAX een korte introductie Koen Willems & Edwin Vlieg PHPFreakz,
Deel XXI 1 Internetapplicaties Internetprogrammeren Capita Selecta.
Web Applicaties Bouwen met Visual Studio .NET
Windows Applicaties Bouwen met Visual Studio.NET Sijmen Koffeman Development Consultant Microsoft.
Client-side scripting. 1.Scripting in webpagina’s 1. Verschillende talen VB: toepassingen in Windowsomgeving VBA: toepassingen in MS-Office VBScript internet.
Technische Architectuur
PHP & MYSQL LES 02 PHP & FORMULIEREN. PHP & MYSQL 01 PHP BASICS 02 PHP & FORMULIEREN 03 PHP & DATABASES 04 CMS: BEST PRACTICE.
PHP & MYSQL LES 01 PHP BASICS. PHP & MYSQL 01 PHP BASICS 02 PHP & FORMULIEREN 03 PHP & DATABASES 04 CMS: BEST PRACTICE.
Farmaceut domein (Client) Innospense domein (Server) Browser Webserver
De evolutie van JavaScript
Web 1.0 HTMLAfbeeldingen FlashHyperlinks CSS Participation AJAX Usability Design Ruby on Rails.
MVC in de praktijk Jeroen Swart.NET architect, Quintor
TypeScript Orde in de chaos!. Over mij Patrick Schmidt (Microsoft Certified Trainer) Trainer bij 4DotNet Mede-oprichter en architect BesteProduct.nl.
Webapplicaties: de clientkant Herman Koppelman Sylvia Stuurman 13 november 2010.
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - -
Prototyping Week 7 // Tweenlite & API. TweenMax Snel mooie en effectieve animatie.
Client side vs Server side Server side code Code wordt op de webserver uitgevoerd Bewerkt de html die naar de gebruiker gestuurd wordt voordat die verzonden.
Kennisnet – Copacabana Van Dienst naar Service.
Hoorcollege 4 Bespreking casus 2 (supermarkt).
INFITT01 - Internettechnologie WEEK 3. Programma Sessies JSP.
Java & het Web Programma: 3rd party libraries Standard actions (E)xpression (L)anguage.
1 KPN Mobiel – Introductie Repository Object Browser & Designer 10 Designer 10g & Repository Object Browser Maandag 28 februari 2005 Lucas Jellema (AMIS)
Java & het Web Programma: Sessies JSP. Stateless vs. Stateful(1) HTTP is stateless WAT IS STATELESS?
Node.js en NPM. Node.js Open source, crossplatform runtime omgeving voor server-side javascript applicaties, primair bedoel snelle, schaalbare netwerk.
Les 3 - Operators Workshop Php Basic. ICT Academy Php Basic Content Operators Wiskundig Toewijzing Vergelijking.
Over de fabels en feiten van applicatiebouw en de invoering van het Spring Framework 16 december 2014 Ferdy du Chatenier / Gilbert van den.
wordPress  Het meest flexibele CMS CMS= Content Management System.
Peter Roozendaal TestNet Voorjaarsevenement 11 mei 2016.
Netwerken 6 Enigma Netwerken paragraaf 9. Applicatielaag End-to-end principe De infrastructuur (het internet) staat los van de toepassingen Makkelijk.
Hoeveel aandacht besteed jij aan security testing? 1 Security is always excessive until it's not enough.
Windows applicatieontwikkeling
Software Development fundamentals
Javascript.
Frontend Oss
Javascript.
Tempoquiz rekenen Als de sommen verschijnen heb je 1 minuut(tijd kun je zelf bepalen) om de antwoorden op te schrijven. Na de minuut verstreken is gaan.
Javascript.
OGH APEX dag 2012 Toeters en bellen met APEX
ASP.NET MVC Web Development
Praegus B.V.. .
Software Development fundamentals
SQL Les February 2019.
ASP.NET MVC Web Development
ASP.NET MVC Views.
– Software development fundamentals
Flow Approvals op verschillende manieren
– Software development fundamentals
Windows applicatieontwikkeling
Transcript van de presentatie:

Stateful web, developments, trends 1 Webtechnologie Lennart Herlaar

Inhoud Stateful web AJAX, JSON (HTML5) developments Trends

Stateful web HTTP revisited HTTP is stateless HTTP kent page based requests Geen draaiende applicatie, persistency gewenst Kunnen we niet beide problemen oplossen door State in de client onder te brengen? In de client een applicatie te laten draaien?...die event driven is en binnen één pagina werkt?...op de achtergrond met de server communiceert?...waarbij zowel content als state uitgewisseld wordt?

Stateful web en AJAX Stateful web Sluit aan bij het gebruikelijke C/S paradigma Desktop applicaties, Principle Of Least Surprise Past ook goed bij de trend: client side state! Asynchronous JavaScript and XML (AJAX) maakt precies dit mogelijk Kleine hoeveelheden gegevens uitwisselen, achter de schermen, terwijl je op de pagina blijft Geen noodzaak om telkens de pagina te verversen bij een actie van de gebruiker (die data vergt) Applicaties worden interactiever, snappier

AJAX AJAX is een combinatie van (X)HTML(5) en CSS voor structuur en presentatie DOM en JavaScript voor dynamische interactie met de gepresenteerde gegevens Het XMLHttpRequest object om asynchroon gegevens met de webserver uit te wisselen XML als formaat voor het uitwisselen van gegevens Niet beperkt tot XML; ook JSON, HTML, tekst Gegevens kunnen twee kanten op gaan GET, POST; geïnitieerd door client! (C/S model)

AJAX is niets nieuws... AJAX is geen zelfstandige technologie Net als DHTML en LAMP een combinatie (stack) van bestaande technologieën die samen gebruikt worden De belangrijkste faciliterende component zit al sinds 1999 in sommige browsers XMLHttpRequest (XHR) object Populariteit te danken aan Google (Gmail, Maps) en het feit dat er een naam aan gegeven werd Hèt alternatief voor Rich Internet Applications

AJAX filosofie Webpages "loosely coupled" met data sources Rendering in HTML, one resource at a time AJAX herstelt deze band AJAX is de volwassen versie van DHTML DHTML + asynchrone gegevensuitwisseling Vergelijk: old skool Java Applets? Je applicatie wordt nu een JavaScript applicatie die praat met een (PHP) back-end en database AJAX zelf werkt volledig client side Onafhankelijk van server; "uniforme" browser support

Hardcore AJAX voorbeeld a

a Select a User: Peter Griffin Lois Griffin Glenn Quagmire User info will be listed here. function showUser(myVal) { xmlHttp = new XMLHttpRequest(); xmlHttp.onreadystatechange = function() { if (xmlHttp.readyState == 4 && xmlHttp.status == 200) { document.getElementById("txtHint").innerHTML = xmlHttp.responseText; } xmlHttp.open("GET", "getuser.php?q=" + myVal, true); xmlHttp.send(null); } xmlHttp.addEventListener("readystatechange", myFunc, false);

Hardcore AJAX voorbeeld a <?php // Let op: insecure en geen error handling! $q = $_GET["q"]; $dbh = new PDO('sqlite:mydbfile.sqlite'); $sth = $dbh->query("SELECT * FROM user WHERE id = $q"); echo " Firstname... "; foreach ($sth as $row) { echo " "; echo " ". $row['FirstName']. " "; echo " ". $row['LastName']. " ";... } echo " "; $dbh = NULL; ?>

AJAX voor- en nadelen Interactiviteit, responsiveness, "vloeibaarheid" Portability AJAX vult het gat dat achtergelaten is door Applets Usability Back button, bookmarks; toegankelijkheid Denk na over wanneer je wel een page refresh doet Responstijd, ook t.g.v. de veelheid aan requests Noodzaak van JavaScript; toegankelijkheid Security

AJAX odds & ends State kan verdeeld worden over client en server Positie binnen de applicatie (de flow) in de client Sessie data en tijdelijke data in de client Persistent data op de server Je zou input validation via AJAX kunnen regelen Volledig server side Merk het belang op van goede cross-browser support van de volledige stack (X)HTML(5), JavaScript, DOM, CSS, XHR Let op: caching van (AJAX) calls

AJAX odds & ends Andere technologieën dan JavaScript, XHR en XML zijn mogelijk Andere client side scripting talen (maar welke dan?) Communicatie met de server via een iframe in plaats van het XHR object... Communicatie met de server door dynamisch script tags toe te voegen aan de pagina... Gebruik van JSON, HTML of plain text i.p.v. XML Het belangrijkste concept is de asynchrone communicatie tussen client en server

XML? XML als uitwisselingsformaat heeft nadelen Nogal "verbose" Omzetting naar JavaScript vergt het nodige werk Diverse opties in PHP om XML te manipuleren SimpleXML en DOM gebaseerde toegang tot XML XML Parser, XMLReader, XMLWriter, XSL Ook voor parsen en transformeren XML documents Veelal afhankelijk van externe libraries (libxml/xslt) In JavaScript is XML vooral als content prettig Maar niet voor uitwisselen van variabelen / objecten

JSON! JavaScript Object Notation Lichtgewicht tekstgebaseerd human-readable dataformat voor gegevensuitwisseling Vooral voor gestructureerde data via een netwerk Bijvoorbeeld in de context van AJAX Een prima alternatief voor XML, HTML of tekst JSON is een subset van JavaScript Maar JSON vindt ook toepassing buiten JavaScript Een object bestaat uit property-value paren "Zelfbeschrijvend", in JavaScript direct instantieerbaar

JSON { "firstName": "John", "lastName" : "Smith", "age" : 25, "address" : { "streetAddress": "21 2nd Street", "city" : "New York", "state" : "NY", "postalCode" : "10021" }, "phoneNumber": [ { "type" : "home", "number": " " }, { "type" : "fax", "number": " " } ] } var person = eval("(" + myJSON + ")"); myElement.innerHTML = person.phoneNumber[0].number; // eval() evalueert een string als JavaScript code en voert deze uit Extra "(" en ")" om {} als object literal te evalueren, i.p.v. als code block

Gebruik van AJAX AJAX kun je op twee manieren gebruiken Custom JavaScript code die direct gebruik maakt van het XHR object JavaScript library / framework; vaak generieke functionaliteit waar AJAX een onderdeel van is Bij gebruik van AJAX is de inzet van een library / framework al snel aan te raden Ext JS, Prototype, MooTools jQuery xajax

jQuery revisited jQuery biedt AJAX ondersteuning Op maarliefst 6 verschillende manieren... Varianten van één basismethode load() – Laad een stukje HTML in een element $.getJSON() – Laad JSON via GET $.getScript() – Laad JavaScript en voer dit uit $.get() – Voer een generieke GET AJAX call uit $.post() – Voer een generieke POST AJAX call uit $.ajax() – Voer een generieke AJAX call uit

jQuery revisited $(function(){ $("button").click(function(){ $("div").load('test.php'); });... Let AJAX change this text Change Content var ajaxload = " "; $(function(){ $("button").click(function(){ $("div").html(ajaxload).load('test.php'); });

jQuery revisited $(function(){ $("button").click(function(){ $("div").html(ajaxload); $.post("test.php", {user: "willie", id: 5}, function(responseText){ $("div").html(responseText);}, "html" ); }); $(function(){ $("button").click(function(){ $("div").html(ajaxload); $.ajax({url : "test.php", type : "GET", dataType : "html", success : function(responseText){ $("div").html(responseText);} });

xajax xajax is een PHP library implementatie van AJAX Huh? AJAX was toch client side? xajax applicaties roepen asynchroon server side PHP functies aan zonder page refresh Vanuit JavaScript, zoals gebruikelijk bij AJAX Alle voor de AJAX call benodigde JavaScript wordt vanuit PHP gegenereerd! xajax vereist geen kennis van JavaScript Verwerking van de call specificeer je dus server side xajax vereist het gebruik van XML "The xajax PHP object generates JavaScript wrapper functions for the PHP functions you want to be able to call asynchronously from your application. When called, these wrapper functions use JavaScript's XMLHttpRequest object to asynchronously communicate with the xajax object on the server which calls the corresponding PHP functions. Upon completion, an xajax XML response is returned from the PHP functions, which xajax passes back to the application. The XML response contains instructions and data that are parsed by xajax's JavaScript message pump and used to update the content of your application."

AJAX / JSON Security eval() evalueert JSON direct als JavaScript code Potentieel gevaarlijk: actieve code binnen JSON! Controle van JSON voor instantiatie is wenselijk JavaScript RegExp JavaScript parser, bijvoorbeeld JSON-js (2,5 Kb) JSON.parse() ingebouwd in browsers (ECMAScript 5) Weigeren van alle actieve JavaScript code Maar: DOM-based client side XSS blijft een issue Afhankelijk van context en gebruik content JSON Schema

AJAX / JSON Security var person = eval("(" + myJSON + ")"); var person = JSON.parse(myJSON); { "firstName": "John", "lastName" : "Smith", "age" : 25 } function(){alert("Gotcha!");}() { "firstName": function(){alert("Gotcha!");}(), "lastName" : "Smith", "age" : 25 } alert("Gotcha!"), alert("Gotcha again!") { "firstName": "John", "lastName" : "Smith", "age" : 25}); (function(){alert("Gotcha!");})();// } alert("Gotcha!") jQuery gebruikt JSON.parse { "firstName": " alert(\"Gotcha!\") ", "lastName" : "Smith", "age" : 25 } var person = JSON.parse(myJSON); myElement.innerHTML = person.firstName;

JSON Schema { "name" : "Product", "properties" : { "id" : { "type" : "number", "description" : "Product identifier", "required" : true }, "name" : { "type" : "string", "description" : "Name of the product", "required" : true }, "price" : { "type" : "number", "minimum" : 0, "required" : true } { "id" : 1, "name" : "Foo", "price" : 123 } Maakt expliciete controle van JSON mogelijk Heeft wel wat weg van XML Schema

Same Origin Policy Browsers hanteren een Same Origin Policy (SOP) Logische scheiding tussen sites en hun gegevens Alleen uitwisseling met site van herkomst Bijvoorbeeld bij cookies......maar ook bij AJAX calls Veel aanvallen zijn gericht op doorbreken SOP Immers alleen een logische scheiding, geen fysieke XSS, CSRF, cross-site cooking,... JSON security prangender met loslaten SOP Expliciete wens van developers, met name bij AJAX

JSONP SOP van oudsher nooit volledig afgedwongen img tag, form post data, script tag JSONP gebruikt de script tag omissie Script tag dynamisch gegenereerd vanuit JavaScript Parameters aan script doorgegeven via script URL Script geeft JSON terug met een functie eromheen die de JSON parst en instantieert Nogal hackerig en gevoelig voor misbruik Cross-origin resource sharing (CORS) is de nieuwere, nettere manier <script type="text/javascript" src=" parseResp({"Name": "Foo", "Id" : 1234, "Rank": 7})

Cross-origin resource sharing Browser geeft bij AJAX call origin door Doorgegeven aan server in HTTP header Server bepaalt welke origins geaccepteerd worden Alleen eigen domein, alle domeinen,... Eveneens doorgegeven aan browser in HTTP header Bedoeld om de goedwillende gebruiker met een reguliere browser te beschermen tegen CSRF Niet bedoeld om de server te beschermen Immers: rogue browsers kunnen headers faken Origin: Access-Control-Allow-Origin: Access-Control-Allow-Origin: *

Stateful web, developments, trends 28 Webtechnologie Lennart Herlaar

HTML5 landschap

Cross-document messaging Ook wel web messaging genoemd HTML5 standaard om berichten met andere documenten uit te wisselen......zonder dat de SOP afgedwongen wordt Berichten, geen resources (CORS); client side! Bericht genereert een event bij de ontvanger Uit security oogpunt altijd de origin controleren en de inhoud van de berichten parsen var myIframe = document.getElementsByTagName("iframe")[0]; myIframe.contentWindow.postMessage("How are you, B?", " function receiver(event) { if (event.origin == " if (event.data == "How are you, B?") { event.source.postMessage("Fine, and you A?", event.origin); } else { alert(event.data); } window.addEventListener("message", receiver, false);

Server-sent events Wens voor server initiated 2-weg communicatie Ajax Push, Reverse Ajax, Two-way-web, HTTP Streaming, HTTP server push, Comet Geïmplementeerd als "persistent" HTTP request Streaming (b.v. iframe) of (long-)polling (b.v. AJAX) SSE vormt een non-polling alternatief HTML5 standaard voor push notifications van server naar browser op basis van DOM events; event stream Let op: maximale execution time van script En uiteraard: security aspecten! var evtSource = new EventSource("sse.php"); evtSource.addEventListener("message", function(e) { var newElement = document.createElement("li"); newElement.innerHTML = "message: " + e.data; eventList.appendChild(newElement); }, false); var evtSource = new EventSource("sse.php"); evtSource.addEventListener("ping", function(e) { var newElement = document.createElement("li"); var obj = JSON.parse(e.data); newElement.innerHTML = "ping at " + obj.time; eventList.appendChild(newElement); }, false ); <?php header("Content-Type: text/event-stream\n\n"); while (1) { echo "event: ping\n"; $curDate = date(DATE_ISO8601); echo 'data: {"time": "'. $curDate. '"}'; echo "\n\n"; ob_flush(); flush(); sleep(1); } ?>