SOAP规范(完).doc
文本预览下载声明
SOAP规范(完)
作者:bdsc
email: bdscca@yahoo.ca
日期:2001-7-13 17:08:10
6. 在HTTP中使用SOAP
这一节讲述了如何在HTTP中使用SOAP。把SOAP绑定到HTTP,无论使用或不用HTTP扩展框架,都有很大的好处:在利用SOAP的形式化和灵活性的同时,使用HTTP种种丰富的特性。在HTTP中携带SOAP消息,并不意味着SOAP改写了HTTP已有的语义,而是将构建在HTTP之上SOAP语义自然地对应到HTTP语义。
SOAP自然地遵循HTTP的请求/应答消息模型使得SOAP的请求和应答参数可以包含在HTTP请求和应答中。注意,SOAP的中间节点与HTTP的中间节点并不等同,即,不要期望一个根据HTTP连接头中的域寻址到的HTTP中间节点能够检查或处理HTTP请求中的SOAP消息。
在HTTP消息中包含SOAP实体时,按照RFC2376[3] HTTP应用程序必须使用媒体类型 text/xml。
6.1 SOAP HTTP请求
虽然SOAP可能与各种HTTP请求方式相结合,但是绑定仅定义了在HTTP POST请求中包含SOAP消息。(第7节中描述了如何在RPC中使用SOAP,第6.3节描述了如何使用HTTP扩展框架)
6.1.1 HTTP头中SOAPAction域
一个HTTP请求头中的SOAPAction域用来指出这是一个SOAP HTTP请求,它的值是所要的URI。在格式、URI的特性和可解析性上没有任何限制。当HTTP客户发出SOAP HTTP请求时必须使用在HTTP头中使用这个域。
soapaction = SOAPAction : [ URI-reference ]
URI-reference = as defined in RFC 2396 [4]
HTTP头中SOAPAction域使服务器(如防火墙)能正确的过滤HTTP中SOAP请求消息。如果这个域的值是空字符串(),表示SOAP消息的目标就是HTTP请求的URI。这个域没有值表示没有SOAP消息的目标的信息。
例子:
SOAPAction: /abc#MyMessage
SOAPAction: myapp.sdl
SOAPAction:
SOAPAction:
6.2 SOAP HTTP应答
SOAP HTTP遵循HTTP 中表示通信状态信息的HTTP状态码的语义。例如,2xx状态码表示这个包含了SOAP组件的客户请求已经被成功的收到,理解和接受。
在处理请求时如果发生错误,SOAP HTTP服务器必须发出应答HTTP 500 Internal Server Error,并在这个应答中包含一个SOAP Fault元素(见4.4节)表示这个SOAP处理错误。
6.3 HTTP扩展框架
一个SOAP消息可以与HTTP扩展框架 [6]一起使用以区分是否有SOAP HTTP请求和它的目标。
是使用扩展框架或是普通的HTTP关系到通信各方的策略和能力。通过使用一个必需的扩展声明和M-HTTP方法名前缀,客户可以强制使用HTTP扩展框架。服务器可以使用HTTP状态码510 Not Extended强制使用HTTP扩展框架。也就是说,使用一个额外的来回,任何一方都可以发现另一方的策略并依照执行。
用来表示SOAP使用了扩展框架的扩展标志符是:
/soap/envelope/
6.4 SOAP HTTP举例
例3 使用POST的SOAP HTTP
POST /StockQuote HTTP/1.1
Content-Type: text/xml; charset=utf-8
Content-Length: nnnn
SOAPAction: /abc#MyMessage
SOAP-ENV:Envelope...
HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Content-Length: nnnn
SOAP-ENV:Envelope...
例4 使用扩展框架的SOAP HTTP
M-POST /StockQuote HTTP/1.1
Man: /soap/envelope/; ns=NNNN
Content-Type: text/xml; charset=utf-8
Content-Length: nnnn
NNNN-SOAPAction: /abc#MyMessage
SOAP-ENV:Envelope...
HTTP/1.1 200 OK
Ext:
Content-Type: text/xml; charset=utf-8
Content-Length: nnnn
SOAP-ENV:Envelope...
7. 在RPC中使用SOAP
设计SOAP
显示全部