mime - vilniaus universitetasklevas.mif.vu.lt/~liutauras/data/webservices/... · smtp (1980): ascii...

Post on 20-Jan-2020

2 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

SOAP Transport

Web servisų komunikacijos

Web servisas

WSDL interfeisas

SOAP pranešimai

Duomenų siuntimo protokolas (HTTP, SMTP,...)

TCP/IP

Web servisas

WSDL interfeisas

Tran

spor

tas

HTTP

HTTP

Dokumentų apsikeitimo protokolas

[METODAS] [UŽKL-URI] HTTP/[VER][Laukas1]: [reikšmė1][Laukas2]: [reikšmė2]

[užklausos duomenys, jei yra]

HTTP/[VER] [CODAS] [TEKSTAS][LaukasA]: [ReikšmėA][LaukasB]: [ReikšmėB]

...Dokumento turinys...Tuščiaeilutė

HTTP užklausa (klientas→serveris) HTTP atsakymas (serveris→klientas)

HTTP Metodai● Nusako kliento siunčiamo pranešimo pobūdį

● Atitinka resursų gavimo ir „keitimo“ operacijas● Metodai:

– GET: gauti URL nurodomą resursą– HEAD: gauti informaciją apie URL nurodomą resursą– POST: siųsti duomenis (URL nurodo duomenų

„apdorotoją“)– PUT: siųsti duomenis (URL nurodo resursą, kurio

duomenys siunčiami)– DELETE: pašalinti resursą (identifikuojamą URL)– Kiti: OPTIONS, TRACE, CONNECT

MIME● SMTP (1980): ASCII teksto žinutės● Multipurpose Internet Mail Extensions (MIME)

● Internet standartas platesniam e-mail panaudojimui● Žinutės su ne-ASCII koduotės turiniu● Pridedamus ne „teksto“ dokumentus● Žinutes iš daugelio dalių● Antraštės su ne ASCII koduotės tekstu

● IETF standartas (1991-1996)

MIME tipai● Nurodo žinutės dalies (pridedamo dokumento)

tipą● Leidžia parinkti atitinkama apdorojančią programą

image/jpeg - .jpg, .jpeg, .jpetext/html - .html, .htmtext/plain - .txt, .c, .htext/css - .cssvideo/x-msvideo .aviapplication/x-javascript .jsapplication/vnd.ms-powerpoint .ppt, .pps, .potapplication/pdf .pdf

application/octet-stream .exe, .bin, .class, *

Nežinomo tipo baitų srautas

HTTP užklausa ir atsakymas

HTTP/1.1 200 OKDate: Tue, 16 Mar 2010 08:35:54 GMTServer: Microsoft-IIS/6.0Content-Length: 18955Content-Type: text/htmlExpires: Tue, 16 Mar 2010 08:34:54 GMT

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"...><html lang="en-US" xml:lang="en-US" xmlns="http://www.w3.org/1999/xhtml"><head><title>W3C Tutorial</title>....

GET http://www.w3schools.com/w3c/home.html HTTP/1.1Host: www.w3schools.comUser-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1.8)...Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8Accept-Language: lt,en-us;q=0.7,en;q=0.3Accept-Encoding: gzip,deflateAccept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7Keep-Alive: 300Cookie: __utma=119627022.2995073920389789700.1251401017....

Užklausa (naršyklė)

Atsakymas (serveris)

URL

scheme://username:password@domain:port/path/to/resource?query_string#anchor

„Protokolas“:http, ftp, mailto,file,...

Vartotojo vardasIr slaptažodis(jei resursasapsaugotas)

Domenas (adresas):www.gaspadine.lt,...

Porto numeris(prisijungimoprie serverio)

Resurso keliasserveryje

Užklausos parametrai(jei tokia vykdoma)

Pozicijagautameatsakyme

http://www.gaspadine.lt/patiekalas/tarkuotu_bulviu_cepelinai.html

Serverio atsakymų kodai

● 2xx (200): užklausa apdorota sėkmingai● 3xx (302): peradresavimas, (ne)pasikeitęs

resursas,...● 4xx (404): kliento užklausos klaida (klaidingas URL,

neleidžiamas pasiekimas, resursas nerastas,...)● 5xx (500): serverio klaida (klaida apdorojant

užklausa, neveikiantis servisas,...)

HTTP/1.1 200 OKDate: Tue, 16 Mar 2010 08:35:54 GMT...

HTTP/1.1 200 OKDate: Tue, 16 Mar 2010 08:35:54 GMT...

HTTP/1.1 404 Not FoundDate: Tue, 16 Mar 2010 10:00:30 GMT...

HTTP/1.1 404 Not FoundDate: Tue, 16 Mar 2010 10:00:30 GMT...

Email (SMTP)Received: from aira2.vu.lt (AirA2.vu.lt [193.219.80.6])

by voruta.vu.lt (VU/2006/08/16) with ESMTP id o2GABG8c013724for <john.doe@mif.vu.lt>; Tue, 16 Mar 2010 12:11:16 +0200 (EET)

Received: by fxm7 with SMTP id 7so1133114fxm.23 for <john.doe@mif.vu.lt>; Tue, 16 Mar 2010 03:11:14 -0700 (PDT)Received: by 10.223.63.203 with SMTP id c11mr2235964fai.94.1268734274631; Tue, 16 Mar 2010 03:11:14 -0700 (PDT)Received: from [79.133.242.216] (cable-242-216.cgates.lt [79.133.242.216]) by mx.google.com with ESMTPS id 15sm3754437fxm.0.2010.03.16.03.11.11 (version=TLSv1/SSLv3 cipher=RC4-MD5); Tue, 16 Mar 2010 03:11:12 -0700 (PDT)Message-ID: <4B9F5938.1070504@gmail.com>Date: Tue, 16 Mar 2010 12:11:04 +0200From: John Doe <john.doe@gmail.com>User-Agent: Mozilla/5.0 ... Gecko/20100227 Thunderbird/3.0.3MIME-Version: 1.0To: john.doe@mif.vu.ltSubject: =?UTF-8?B?SsWrc8WzIMW+aW5pYWk=?=Content-Type: text/plain; charset=UTF-8; format=flowedContent-Transfer-Encoding: 7bit

Gerb.,

Informuojame, jog paskaitos sestadieni bus.Administracija

Antraštė

Prane-šimas

Tuščiaeiutė

MIME žinutėReceived: from localhost (webmail.vu.lt [193.219.80.4] by voruta.vu.lt ......From: vardenis.pavardenis@mif.stud.vu.ltTo: john.doe@mif.vu.ltSubject: Requested documentsMIME-Version: 1.0Content-Type: multipart/mixed; boundary="=_55b7ziaifd44"Content-Transfer-Encoding: 7bit

This message is in MIME format.

--=_55b7ziaifd44Content-Type: text/plain; charset=utf-8; DelSp="Yes";

format="flowed"Content-Disposition: inlineContent-Transfer-Encoding: quoted-printable

Hello,Here is your documentV.P.--=_55b7ziaifd44Content-Type: application/x-zip-compressed; name="Document1.zip"Content-Disposition: attachment; filename="Document1.zip"Content-Transfer-Encoding: base64

UEsDBBQAAAAIAHxyZTz9VQhBowgAAEEdAAAJAAAAaW5kZXgucGhw7RlbT9tI9zn+FdMoqh2axtQsS5sbCpdStLDQJhXql0XRYE8SL47HjMeEqOK/75mLbyGwgPrwPWwq6vGZc7/5jN3ZjWaRYW8YaKPi....

--=_55b7ziaifd44--

MIME„multipart“pranešimas

Pranešimodalys susavoantraštėmis

SOAP over HTTP

SOAP HTTP POST naudojimas

Siųsti HTTP POSTsu SOAP pranešimu

Gautiužklausą

Dekoduotiužklausospranešimą Iškviesti operaciją

Atlikti veiksmusGrąžinti rezultatąUžkoduoti

atsakymopranešimą

Siųstiatsakymą

Gauti HTTP atsakymąsu SOAP pranešimu

KlientasServeris

Serviso„klausytojas“

Serviso„proxy“

Taikomojiprograma

HTTP: (POST) užklausa

POST /WebService/PasswordGeneratorService.asmx HTTP/1.1Content-Type: application/soap+xml; charset="utf-8"SOAPAction: "http://www.mellbourn.com/WebServices/set_Length"User-Agent: Axis2Host: www.mellbourn.comContent-Length: 274

<?xml version='1.0' encoding='UTF-8'?><env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"> <env:Body> <set_Length xmlns="http://www.mellbourn.com/WebServices/"> <value>20</value> </set_Length> </env:Body></env:Envelope>

Serviso „programos“nuoroda serveryje(endpoint)

HTTP protokoloversija

HTTP užklausosturinio koduotė

Užklausos „paskirtis“

Užklausos turiniodydis baitais

Tuščiaeilutė

SOAP pranešimas

HTTP: atsakymas

HTTP/1.1 200 OKDate: Wed, 03 Mar 2010 21:47:56 GMTServer: Microsoft-IIS/6.0MicrosoftOfficeWebServer: 5.0_PubX-Powered-By: ASP.NETX-AspNet-Version: 1.1.4322Set-Cookie: ASP.NET_SessionId=lv4hvv2rgjj3wwvxshllwe55; path=/Cache-Control: private, max-age=0Content-Type: application/soap+xml; charset=utf-8Content-Length: 235

<?xml version="1.0" encoding="utf-8"?><env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"> <env:Body> <set_LengthResponse xmlns="http://www.mellbourn.com/WebServices/" /> </env:Body></env:Envelope>

Atsakymo kodas 2xx (OK)arba ne 2xx (klaida)

Kiti atsakymo antraštės parametrai

Sesijos ID(čia valdoma serverio)

HTTP atsakymoturinio koduotė

SOAP pranešimo ilgis baitais

Tuščiaeilutė

Web serviso atsakymas

HTTP: klaida

HTTP/1.1 500 Internal Server Error.Date: Wed, 03 Mar 2010 22:19:26 GMTServer: Microsoft-IIS/6.0MicrosoftOfficeWebServer: 5.0_PubX-Powered-By: ASP.NETX-AspNet-Version: 1.1.4322Cache-Control: privateContent-Type: application/soap+xml; charset=utf-8Content-Length: 1894

<?xml version="1.0" encoding="utf-8"?><env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"> <env:Body> <env:Fault> <env:Code>env:Sender</env:Code> ... </env:Fault> </env:Body></env:Envelope>

HTTP klaidos kodas (serverio programos klaida)

SOAP klaidos aprašas

SOAP HTTP Binding● Pranešimų MIME tipai● Leistini HTTP metodai● HTTP antraščių laukai● HTTP klaidų kodų naudojimas

SOAP HTTP: résumé

Blokai: tranzakcijos, ID,...

Parametrai, rezultatai,klaida,...

SOAP Body

SOAP Header

SOAP Envelope

HTTP POST

SOAP over SMTP/JMS/...

SMTP: „request“From: john.public@mycompany.example.comTo: reservations@travelcompany.example.orgSubject: Travel to LADate: Thu, 29 Nov 2001 13:20:00 ESTMessage-Id: <EE492E16A0B8D311AC490090276D208424960C0C@mycompany.example.com>

<?xml version='1.0' ?><env:Envelope xmlns:env="http://www.w3.org/2001/12/soap-envelope"> <env:Body> <p:itinerary xmlns:p="http://travelcompany.example.org/reservation/travel"> <p:departure> <p:departing>New York</p:departing> <p:arriving>Los Angeles</p:arriving> <p:departureDate>2001-12-14</p:departureDate> <p:departureTime>late afternoon</p:departureTime> <p:seatPreference>aisle</p:seatPreference> </p:departure> <p:return> <p:departing>Los Angeles</p:departing> <p:arriving>New York</p:arriving> <p:departureDate>2001-12-20</p:departureDate> <p:departureTime>mid morning</p:departureTime> <p:seatPreference/> </p:return> </p:itinerary> <q:lodging xmlns:q="http://travelcompany.example.org/reservation/hotels"> <q:preference>none</q:preference> </q:lodging> </env:Body></env:Envelope>

SMTP: „response“From: reservations@travelcompany.example.orgTo: john.public@mycompany.example.comSubject: Which NY airport?Date: Thu, 29 Nov 2001 13:35:11 ESTMessage-Id: <200109251753.NAA10655@travelcompany.example.org>In-reply-to:<EE492E16A0B8D311AC490090276D208424960C0C@mycompany.example.com>

<?xml version='1.0' ?><env:Envelope xmlns:env="http://www.w3.org/2001/12/soap-envelope"> <env:Header> <m:reservation xmlns:m="http://travelcompany.example.org/reservation" env:actor="http://www.w3.org/2001/12/soap-envelope/actor/next" env:mustUnderstand="true"> <m:reference>uuid:093a2da1-q345-739r-ba5d-pqff98fe8j7d</reference> <m:dateAndTime>2001-11-29T13:35:00.000-05:00</m:dateAndTime> </m:reservation> <n:passenger xmlns:n="http://mycompany.example.com/employees" env:actor="http://www.w3.org/2001/12/soap-envelope/actor/next" env:mustUnderstand="true"> <n:name>John Q. Public</n:name> </n:passenger> </env:Header> <env:Body> <p:itinerary xmlns:p="http://travelcompany.example.org/reservation/travel"> <p:airportChoices> ...... </p:airportChoices> </p:itinerary> </env:Body></env:Envelope>

JMS

import java.naming.Context;import javax.jms.*;...

class ... { public void someMethod(Context ctx, MessageProducer producer, Message jmsMessage, String replyToName, int priority, long timeToLive, String targetService) { Destination replyDestination = ctx.lookup(replyToName); jmsMessage.setJMSReplyTo(replyDestination); jmsMessage.setStringProperty("SOAPJMS_targetService", targetService); jmsMessage.setStringProperty("SOAPJMS_bindingVersion", "1.0");

producer.setDeliveryMode( DeliveryMode.PERSISTENT ); producer.setPriority(priority); producer.setTimeToLive(timeToLive); producer.send(jmsMessage); } }

● SOAP over JMS 1.0 (W3C recomandation, 2012)● Standartizuotas JMS panaudojimas: JMS API,

WSDL, URI

SOAP ir binariniai duomenys

base64Binary / hexBinary

● XML Schema „binarinių“ duomenų tipai● (-) Efektyvumas: duomenų kiekis + skaičiavimai

(kodavimas/dekodavimas)

... <xs:element name="author" type="xs:string"/> <xs:element name="photo" type="xs:base64Binary"/>...

<?xml version="1.0" encoding="UTF-8"?><env:Envelope xmlns:env="..."> <env:Body> <d:duomenys xmlns:d="http://pavyzdziai.lt/Binarinis"...><d:autorius>Joe</d:autorius><d:photo>/9j/4AAQSkZJRgABAQEASABIAAD/4QBuRXhp...</d:photo> </d:duomenys> </env:Body></env:Envelope>

URL

● URL nuoroda į duomenų failą● Duomenys nėra pranešimo dalis● Nuoroda interpretuojama vartotojo programos

... <xs:element name="author" type="xs:string"/> <xs:element name="photo" type="xs:anyURI"/>...

<?xml version="1.0" encoding="UTF-8"?><env:Envelope xmlns:env="..."> <env:Body> <d:duomenys xmlns:d="http://pavyzdziai.lt/Binarinis"...> <d:autorius>Joe</d:autorius> <d:photo>http://photos.com/photoData?id=34761GH00</d:photo> </d:duomenys> </env:Body></env:Envelope>

HTTP „multipart“● Skirtingų tipų dalys sudedamos į vieną

pranešimą● Pranešimo turinys turi kelias dalis: „body part“

● Apibrėžimas● Nurodomas „Content-Type“: „multipart/xxx“

multipart/form-datamultipart/mixedmultipart/alternative

● Nurodomas dalių „skirtukas“: „boundary● Kiekviena dalis turi savo antraštę

Pavyzdys: Multipart POSTPOST /cgi-bin/qtest HTTP/1.1Host: aramUser-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8Accept-Language: en-us,en;q=0.5Accept-Encoding: gzip,deflateAccept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7Content-Type: multipart/form-data; boundary=---------------------------287032381131322Content-Length: 582

-----------------------------287032381131322Content-Disposition: form-data; name="datafile1"; filename="r.gif"Content-Type: image/gif

GIF87a.............,...........D..;-----------------------------287032381131322Content-Disposition: form-data; name="datafile2"; filename="g.gif"Content-Type: image/gif

GIF87a.............,...........D..;-----------------------------287032381131322Content-Disposition: form-data; name="datafile3"; filename="b.pdf"Content-Type: application/pdf

%PDF-1.4.............,...........;-----------------------------287032381131322--

„Soap with Attachments“● SOAP pranešimas siunčiamas kaip sudėtinis

„multipart“ pranešimas● Pagrindinio SOAP pranešimo dalis● Antrinės dalys – pridedami duomenys

SOAP Message

Image.png

URI

Compound SOAP structure

Movie.mpg

SOAPMessage

SecondaryPartBag

SwA: antrinės dalys● Dalys identifikuojamos naudojant MIME

atributus Content-Location arba Contend-ID● Kiekviena dalis koduojama atskirai● Turinys gali būti binarinis● Dalys nėra SOAP pranešimo dalis

● Iš SOAP dokumento nurodomos href atributo pagalba (anyURI tipo)

SwA pvz.: naudojant „location“MIME-Version: 1.0Content-Type: Multipart/Related; boundary=MIME_boundary; type=text/xml; start="<http://claiming-it.com/claim061400a.xml>"Content-Description: This is the optional message description.

--MIME_boundaryContent-Type: text/xml; charset=UTF-8Content-Transfer-Encoding: 8bitContent-ID: <http://claiming-it.com/claim061400a.xml>Content-Location: http://claiming-it.com/claim061400a.xml

<?xml version='1.0' ?><env:Envelopexmlns:env="http://www.w3.org/2003/05/soap-envelope"> <env:Body> .. <photo href="http://example.com/claim061400a.tiff"/> .. </env:Body></env:Envelope>

--MIME_boundaryContent-Type: image/tiffContent-Transfer-Encoding: binaryContent-ID: <http://example.com/claim061400a.tiff>Content-Location: http://example.com/claim061400a.tiff

...binary TIFF image...--MIME_boundary--

SwA pvz.: naudojant „ID“ + HTTPPOST /insuranceClaims HTTP/1.1Host: www.risky-stuff.comContent-Type: Multipart/Related; boundary=MIME_boundary; type=text/xml; start="<b6f4ccrt@15.4.9.92/s445>"Content-Length: XXXXSOAPAction: http://schemas.risky-stuff.com/Auto-ClaimContent-Description: This is the optional message description.

--MIME_boundaryContent-Type: text/xml; charset=UTF-8Content-Transfer-Encoding: 8bitContent-ID: <b6f4ccrt@15.4.9.92/s445>Content-Location: claim061400a.xml

<?xml version='1.0' ?><env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"> <env:Body> .. <theSignedForm href="cid:a34ccrt@15.4.9.92/s445"/> .. </env:Body></env:Envelope>

--MIME_boundaryContent-Type: image/tiffContent-Transfer-Encoding: binaryContent-ID: <a34ccrt@15.4.9.92/s445>

...binary TIFF image...--MIME_boundary-

HTTPbinding

MTOM● SOAP Message Transmission Optimization

Mechanism● Remiasi XOP: XML-binary Optimized Packaging● Optimizuotas didelių apimčių binariniam turiniui

– Turi būti taikomas xs:base64Binary tipo turiniui● Naudoja specialų Include elementą (operatorių)

– Duomenys interpretuojami kaip XML dokumento dalis

● W3C Recommendation, 2005

MTOM pvz.Content-Type: multipart/related; boundary=MIMEBoundary4A7AE55984E7438034; type="application/xop+xml"; start="<0.09BC7F4BE2E4D3EF1B@example.org>"; start-info="text/xml; charset=utf-8"

--MIMEBoundary4A7AE55984E7438034Content-Type: application/xop+xml; charset=UTF-8; type="application/soap+xml; action=\"ProcessData\""Content-Transfer-Encoding: 8bitContent-ID: <0.09BC7F4BE2E4D3EF1B@example.org>

<env:Envelope xmlns:env='http://www.w3.org/2003/05/soap-envelope' xmlns:xmlmime='http://www.w3.org/2004/11/xmlmime'> <env:Body> <m:data xmlns:m='http://example.org/stuff'> <m:photo xmlmime:contentType='image/png'> <xop:Include xmlns:xop='http://www.w3.org/2004/08/xop/include' href='cid:http://example.org/me.png'/> </m:photo> </m:data> </env:Body></env:Envelope>

--MIMEBoundary4A7AE55984E7438034Content-Type: image/pngContent-Transfer-Encoding: binaryContent-ID: <http://example.org/me.png>

...binary octets for png...

--MIMEBoundary4A7AE55984E7438034--

top related