http协议定义了很多与服务器交互的方法,最基本的有4种,分别是GET,POST,PUT,DELETE. 一个URL地址用于描述一个网络上的资源,而HTTP中的GET, POST, PUT, DELETE就对应着对这个资源的查,改,增,删4个操作。 我们最常见的就是GET和POST了。GET一般用于获取/查询资源信息,而POST一般用于更新资源信息.

AS3常用的http请求方式也是post和get。当对URLRequest对象设置method方式为get或post以外的方式,就会报错。
ArgumentError: Error #2008: 参数 method 必须是某个可接受的值。


官方文档的解释是:
对于在 Flash Player 中(在浏览器中)运行的 SWF 内容,此属性限制为 GET 或 POST 操作,有效值为 URLRequestMethod.GET 或 URLRequestMethod.POST。

对于在 Adobe AIR 中运行的内容,如果该内容位于应用程序安全沙箱内,则可以使用任何字符串值。否则,与在 Flash Player 中运行的内容一样,仅能使用 GET 或 POST 操作。

对于在 Adobe AIR 中运行的内容,当使用 navigateToURL() 函数时,运行时将使用 POST 方法的 URLRequest(其 method 属性设置为 URLRequestMethod.POST)视为使用 GET 方法。

注意:如果在 Flash Player 中运行并且引用的表单没有正文,则即使将方法设置为 URLRequestMethod.POST,Flash Player 也会自动使用 GET 操作。因此,建议始终包括“虚拟”正文以确保使用正确的 method。

有这样一个场景。PHP代码服务端接口已经写好了。给移动端(ios,android)也已经正在线上使用,网页端flash也准备使用该接口。可是该接口第一句就是判断http的请求方式。如果不是put请求方式,就直接exit。那该怎么处理呢。

本来,以put和以post方式提交的数据。在php服务端解的方法是一样的。为了不影响其他端。有这样一种解决方案,请看此文 https://cambiatablog.wordpress.com/2010/08/10/287/通过自定义请求标头的方式来达到一个折中的效果。由于浏览器的限制,flash只允许当以post方式提交数据时,才能自定义标头。

urlRequest.method= URLRequestMethod.POST;
urlRequest.requestHeaders = [new URLRequestHeader(“X-HTTP-Method-Override”, “PUT”)];

然后在php端,获取自定义表头来达到兼容的目的。
$method = (isset($_SERVER[‘HTTP_X_HTTP_METHOD_OVERRIDE’])) ? $_SERVER[‘HTTP_X_HTTP_METHOD_OVERRIDE’] : $_SERVER[‘REQUEST_METHOD’];

flash遇到这个问题的帖子有:
http://stackoverflow.com/questions/3641148/how-to-send-put-http-request-in-flex

http://stackoverflow.com/questions/10294205/http-post-body-in-flex/10303386#10303386