用 POST 模拟 GET


GET 请求用于获取资源的表述,在发送 GET 请求时需给出资源所需的参数,在请求 URI 中表现出来。不同资源不同操作需要传递的参数有很大差别,有可能出现参数过多而导致 URI 长度过大,比如在访问 distance 资源时,如果量算的点非常多,则参数中会有海量的组数据坐标对,有可能使请求 URI 长度过大而导致响应失败。

SuperMap iServer 提供了这种情况的解决方法,即提供使用 POST 请求模拟 GET 请求的机制。具体是:资源所需参数不放在 URI 中,而是放在 POST 的请求体中,在 POST 请求的 URI 后跟上参数“_method= GET”来标识该请求。

对 distance 资源执行 GET 请求可以根据给定参数量算地图上的距离,下面以 distance 资源为例说明用 POST 请求模拟 GET 请求的具体过程(以 json 格式的表述为例),完整的 HTTP 请求如下:

POST /iserver/services/components-rest/rest/maps/World Map/distance.json?_method=GET HTTP/1.1

Host: supermapiserver:8090

Content-Length: 96

 

{"point2Ds":[{"x": 23.00,"y":34.00},{"x":53.55,"y":12.66},{"x": 73.88,"y":12.6}],"unit":"METER"}

其中,请求行(Request Line)中,URI 之后的参数"_method=GET"表明该 POST 请求模拟的是 GET 请求,原 GET 请求所需的参数 point2Ds 和 unit 放在请求体中,以一个 JSON 字符串整体表示,形式为{"参数名1":参数值1,"参数名2":参数值2,……}。