2010-12-27 4 views
15

Qui di seguito è una demo messaggio di richiesta SOAP:Perché un messaggio SOAP devono essere inviati tramite HTTP?

HTTP/1.1 200 OK 
Content-Type: text/xml; charset="utf-8" 
Content-Length: nnnn 

    <SOAP-ENV:Envelope 
    xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" 
    SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> 
    <SOAP-ENV:Header> 
     <t:SessionOrder 
     xmlns:t="http://example.com" 
     xsi:type="xsd:int" mustUnderstand="1"> 
      5 
     </t:SessionOrder> 
    </SOAP-ENV:Header> 
    <SOAP-ENV:Body> 
     <GetStockQuote 
     xmlns="http://someexample.com"> 
      <Price>MSFT</Price> 
     </GetStockQuote> 
    </SOAP-ENV:Body> 
</SOAP-ENV:Envelope> 

e si può vedere, questo messaggio SOAP è codificato come se si tratta di una pagina web. Perché dobbiamo usare il protocollo HTTP? messaggio SOAP è solo un po 'di XML, perché non usiamo XML come protocollo di scambio di informazioni e di sbarazzarsi delle intestazioni HTTP (quindi lasciare HTTP da solo).

Molte grazie.

Aggiornamento - 1

HTTP non è un protocollo di livello di trasporto. È solo un protocollo a livello di applicazione. Non ha nulla a che fare con il trasporto. In realtà, la mia domanda è: qual è il motivo per aggiungere elementi HTTP a un messaggio SOAP?

+6

XML non è un protocollo di rete, è un insieme di regole di codifica dei dati. – jball

+0

Chi dice che SOAP funziona solo su HTTP ?? –

+4

Sembra che le tue attuali domande riguardino cos'è l'HTTP, quale scopo serve e come funziona. Una volta acquisita conoscenza, le ragioni per l'utilizzo di HTTP nelle implementazioni SOAP dovrebbero essere chiare. – jball

risposta

19

SOAP possono essere inviati su diversi tipi di trasporto. HTTP è solo uno di questi.

+0

HTTP non è un protocollo di livello di trasporto. È solo un protocollo a livello di applicazione. Non ha nulla a che fare con il trasporto. In realtà, la mia domanda è * qual è il motivo dell'aggiunta di materiale HTTP a un messaggio SOAP? * – smwikipedia

+2

In termini SOAP è un trasporto. Nel WSDL si associa il servizio Web a un trasporto. Penso di aver letto che la motivazione alla base della decisione di consentire HTTP come uno dei trasporti multipli è che la maggior parte dei firewall sono già configurati per consentire HTTP (so che è una spiegazione piuttosto stupida ma non ho visto altre spiegazioni). –

+0

Grazie, ho letto spiegazioni simili relative al firewall. Ma basandosi su cosa potrebbe un firewall * credere * che sia un pacchetto HTTP che sta passando? L'esistenza di intestazioni HTTP? Quindi aggiungiamo le intestazioni HTTP ai messaggi SOAP? Non così persuasivo. – smwikipedia

2

è possibile utilizzare il protocollo TCP troppo e che è stato chiamato .NET Remoting prima e ora parte della WCF sua ...

+0

Esiste un protocollo formale (standardizzato) o tutti devono rivolgersi a Microsoft? –

0

Spetta allo sviluppatore di scegliere il livello di trasferimento per Simple Object Access Protocol. L'XML non è un protocollo di rete, quindi i dati non possono essere trasferiti utilizzando solo XML. Deve essere confezionato in qualcosa.

5

Il motivo di utilizzare HTTP era quello di ottenere attraverso i firewall. Si vede la maggior parte delle persone di rete IT non consentono solo una porta di essere aperta, ma per qualche motivo hanno sempre permesso la porta 80 ad aprirsi per le pagine web. Poiché i server Web sono stati testati nel corso degli anni, è "più semplice" proteggerli. Usando HTTP hai un set esistente di strumenti per gestire un protocollo di comunicazione.

+0

Grazie per la risposta.In tal caso, ciò che dovremmo fare è non aggiungere intestazioni HTTP, ma far passare il messaggio SOAP attraverso la porta 80. Non è vero? – smwikipedia

+0

Questa è una soluzione, tuttavia ora ci sono switch intelligenti che possono eseguire l'ispezione dei pacchetti per vedere se si tratta di una risposta/richiesta HTTP valida. Se si trova in una intranet e si controlla l'IT, si si può semplicemente usare la porta 80 come porta normale. In caso contrario, si corre il rischio che un interruttore neghi le comunicazioni perché non è nel formato corretto. –

+0

Grazie. Stiamo chiudendo l'obiettivo. Quindi, solo l'aggiunta di intestazioni HTTP ingannare il firewall. Se è così, potrei semplicemente aggiungere un'intestazione HTTP fittizia al mio messaggio SOAP fintanto che si tratta di una richiesta/risposta HTTP ben formata. – smwikipedia

31

Panoramica

SOAP è un protocollo di messaggistica e in poche parole è solo un altro linguaggio XML.
Il suo scopo è lo scambio di dati su reti. La sua preoccupazione è l'incapsulamento di questi dati e le regole per trasmetterli e riceverli.

HTTP è un protocollo diapplicazione e messaggi SOAP sono posti come payload HTTP.
Sebbene esista un sovraccarico di HTTP, ha il vantaggio che si tratta di un protocollo aperto a firewall, ben compreso e ampiamente supportato. Pertanto, i servizi Web sono accessibili e esposti tramite la tecnologia già in uso.

I messaggi SOAP vengono generalmente scambiati tramite HTTP. Sebbene sia possibile utilizzare altri protocolli (applicativi), ad es. SMTP o FTP, i collegamenti non HTTP non sono specificati dalle specifiche SOAP e non sono supportati da WS-BP (interoperability spec).
È possibile scambiare messaggi SOAP su TCP non elaborato, ma i servizi Web non sono interoperabili (non conformi a WS-BP).

Al giorno d'oggi il dibattito è il motivo per cui l'overhead SOAP è del tutto privo di dati inviati tramite HTTP (RESTful WS).

Perché utilizzare HTTP per SOAP?

cercherò di affrontare in modo più dettagliato la questione nel PO, chiedendo perché utilizzare HTTP per SOAP:

Prima di tutto SOAP definisce un formato di dati incapsulamento e basta.
Ora la maggior parte del traffico nel web avviene tramite HTTP. HTTP è letterario OVUNQUE e supportato da un'infrastruttura consolidata di server e client (ovvero i browser). Inoltre è un protocollo molto ben compreso.

Le persone che hanno creato SOAP volevano utilizzare questa infrastruttura pronta e

  1. messaggi SOAP sono stati progettati in modo che possano essere veicolato su HTTP
  2. Nelle specifiche non si riferiscono a nessun altro non HTTP vincolante ma in particolare si riferisce a HTTP come esempio per il trasferimento.

Il tunneling su HTTP sarebbe stato utile nella sua rapida adozione. Poiché l'infrastruttura di HTTP è già presente, le aziende non dovrebbero spendere soldi extra per un altro tipo di implementazione. Invece possono esporre e accedere ai servizi Web utilizzando la tecnologia già implementata.

Specificamente in Java un servizio Web può essere distribuito come endpoint servlet o come endpoint EJB. Quindi tutti i socket di rete sottostanti, i thread, i flussi, le transazioni HTTP ecc. Vengono gestiti dal contenitore e lo sviluppatore si concentra solo sul payload XML.
Quindi un'azienda ha Tomcat o JBoss in esecuzione nella porta 80 e il servizio Web è distribuito e accessibile pure. Non c'è nessuno sforzo per programmare il livello di trasporto e il robusto contenitore gestisce tutto il resto.
Infine, il fatto che i firewall siano configurati per non limitare il traffico HTTP è una terza ragione per preferire HTTP.

Poiché il traffico HTTP è solitamente consentito, la comunicazione di client/server è molto più semplice e i servizi Web possono funzionare senza problemi di blocco della sicurezza di rete a seguito del tunneling HTTP.

SOAP è XML = testo normale in modo che i firewall possano ispezionare il contenuto del corpo HTTP e bloccare di conseguenza. Ma in questo caso potrebbero anche essere migliorati per rifiutare o accettare SOAP a seconda dei contenuti. Questa parte che sembra disturbare non è correlata ai servizi Web o ai SOAP e forse dovresti iniziare una nuova discussione su come funzionano i firewall.

Detto questo, il fatto che il traffico HTTP è senza restrizioni è spesso causa di problemi di sicurezza in quanto i firewall sono sostanzialmente by-passati, ed è per questo applicative-gateway sono disponibili in.
Ma questo non è legato a questo post.

Sommario

Quindi, per riassumere le ragioni per l'utilizzo di HTTP:

  1. HTTP è popolare e di successo.
  2. L'infrastruttura HTTP è disponibile, quindi nessun costo aggiuntivo per l'implementazione di servizi Web.
  3. Il traffico HTTP è aperto ai firewall, quindi non ci sono problemi durante il funzionamento del servizio web a causa della sicurezza della rete.
+0

Grazie per la risposta. Ma quale magia rende un messaggio SOAP in grado di passare un firewall una volta riempito come un carico utile HTTP? – smwikipedia

+1

@smwikipedia: Non è SOAP a farlo. I firewall non limitano il traffico HTTP nella porta 80, anche nelle aziende private, quindi HTTP è molto conveniente per la comunicazione tra client/server dietro il firewall. La rete è un problema MAGGIORE nel calcolo distribuito e HTTP aiuta su questo poiché è consentito il suo traffico. Di conseguenza i servizi Web (come meccanismo distribuito) possono funzionare senza tali mal di testa a causa di blocchi di sicurezza – Cratylus

+0

Su quali criteri un firewall decide che è il traffico HTTP? Il numero di porta può essere facilmente modificato. Il firewall prende la decisione in base al formato del traffico? Se è così, che ne dici di aggiungere solo alcune false intestazioni http per ingannare il firewall? – smwikipedia

-1

Tutti i browser supportano HTTP per compatibilità e sono il protocollo Internet più utilizzato. SOAP è un protocollo di comunicazione che specifica il formato per l'invio di messaggi. RPC e CORBA hanno problemi di compatibilità e sicurezza, mentre HTTP è compatibile con tutti i browser. Ora che HTTP comunica su TCP/IP. Un metodo SOAP è una richiesta HTTP/risposta HTTP che viene compilata con le regole di codifica SOAP. utilizzando SOAP, un protocollo inviato ai dati W3C può essere racchiuso in XML e trasmesso utilizzando un numero qualsiasi di protocolli Internet.

0

Un altro motivo potrebbe essere che (se non ricordo male) HTTP è anche designato come "gold standard" per come un protocollo internet dovrebbe apparire/funzionare, quindi se dovessi sviluppare un protocollo personale, dovresti fondamentalmente (almeno in un mondo ideale) si finisce con qualcosa di molto simile se si seguono tutte le RFC. Pertanto, perché non utilizzare HTTP, uno dei protocolli più comuni e ben conosciuti al mondo.

0

Fondamentalmente SOAP è lo standard dei servizi Web che contiene le descrizioni del messaggio che sotto forma di XML. La struttura del messaggio verrà trasmessa al momento del servizio web chiamato dal richiedente del servizio. Nell'architettura SOA una delle caratteristiche più importanti è l'interoperabilità, in SOA SOAP gioca un ruolo enorme che passa attraverso HTTP/HTTPS e quindi può attraversare i firewall, altre architetture come DCOM, CORBA e RPC non attraversano il firewall.

0

SOAP non deve essere inviato su HTTP. Gli sviluppatori utilizzano più frequentemente HTTP e POST il sapone come se fosse un normale POST HTTP perché probabilmente abbiamo più familiarità con HTTP di altri protocolli come SMTP, aggiungendo questo al fatto che implementiamo REST su HTTP. Ad esempio, ecco come si invia il protocollo di posta elettronica SOAP su SMTP. Sending SOAP over SMTP

E 'solo una pratica comune utilizzare HTTP