注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

phperwuhan的博客

记载一个phper的历程!phperwuhan.blog.163.com

 
 
 

日志

 
 

PHPRPC 其他话题  

2010-10-09 14:50:59|  分类: php |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

来源:http://www.phprpc.org/zh_CN/docs/#[[PHPRPC%20%E5%85%B6%E4%BB%96%E8%AF%9D%E9%A2%98]]

服务器端发布的函数列表

PHPRPC 不同于 Web Service,它没有 WSDL 这样的服务定义描述文件,也不需要这样的东西。这样既方便了服务器的部署,又方便了弱类型与强类型语言之间的互通。但是你仍然可以得到服务器端发布的函数列表,但是这个函数列表中仅包含函数名,而不包含有函数参数与结果的描述,因为这样可以更方便的支持变参传递和弱类型传递。当客户端请求中不包含发起调用或密钥交换的必要参数时,则服务器端应返回发布的函数列表,其格式为:

phprpc_functions="<functions_list>";  

其中<functions_list>为序列化并编码后的函数名数组。其编码规则取决于请求中 phprpc_encode 的值,如果请求中包含有 phprpc_callback 参数,也应按照调用时做同样处理。

版本号

PHPRPC 客户端可以通过 HTTP 头User-Agent 来标示自己的版本。但服务器不应该将其作为识别客户端版本的依据。服务器端只需依据客户端的请求的行为来做成正确的响应即可。

PHPRPC 服务器通过 HTTP 头 X-Powered-By 来设置版本号,其格式为:PHPRPC Server/3.0。

客户端可以以此作为服务器版本的判断依据,但不应作为服务器端支持特征的判断依据。客户端应以服务器响应的行为作为服务器支持特性的判断依据,例如如果客户端发起密钥交换请求时,服务器端返回上面所提到的服务器端发布的函数列表,而不是返回用于生成密钥的信息,客户端便可以以此来判断服务器端不支持加密传输。

字符集

无论是客户端还是服务器端对字符串与字节数组之间的转换(例如 Java、.NET 等双字节字符编码的语言实现的服务器)都是以服务器端的字符集设置为准。客户端的请求中可以包含字符集设置,但是应与服务器端设置相同,在与服务器端设置不同的情况下,按照服务器端设置的字符集进行处理。客户端的字符集选项仅用于第一次与服务器通讯前,在客户端未知服务器字符集的情况下,让用户去设置与服务器端相同的字符集。另外,建议统一使用 UTF-8 字符集,在这种情况下,可以保证所有服务器与客户端正常通讯,如设置其它字符集,只能保证两个相同字符集设置的服务器和客户端可以正常通讯。

字符集通过 HTTP 头 Content-Type 来设置。

跨域存取 Cookie

确切的说,这不是 PHPRPC 协议范围中的内容。但却对 PHPRPC 实现跨域访问很有必要。对于非 IE 浏览器来说,跨域存取 Cookie 是没有问题了,但是对于 IE 浏览器来说,需要服务器端发送:

P3P: CP="CAO DSP COR CUR ADM DEV TAI PSA PSD IVAi IVDi CONi TELo OTPi OUR DELi SAMi OTRi UNRi PUBi IND PHY ONL UNI PUR FIN COM NAV INT DEM CNT STA POL HEA PRE GOV"  

这样一个 HTTP 头才可以允许客户端接收跨域的 Cookie。因此,在实现 PHPRPC 服务器时,建议服务器端发送该头。

缓存

PHPRPC 是不允许缓存的,因为远程过程调用的结果是未知可变的,也就是说远程过程调用不能保证是幂等性(idempotency)操作,大多数情况下都是非幂等性操作的。

因此 PHPRPC 建议服务器在输出响应时,应该发送禁止缓存的头信息,例如:

Cache-Control: no-store, no-cache, must-revalidate, max-age=0  
  评论这张
 
阅读(529)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017