12

私はサーバーアプリを書いていて、クライアントが本文のデータを使用して、次のように GET メソッドをパラメーター化することを望んでいました。

# http -v GET http://localhost:3000/url text=123 foo=bar
GET /url HTTP/1.1
Accept: application/json
Accept-Encoding: gzip, deflate, compress
Content-Length: 29
Content-Type: application/json; charset=utf-8
Host: localhost:3000
User-Agent: HTTPie/0.4.0

{
    "foo": "bar", 
    "text": "123"
}

AngularJSで試しました:

var params = {
    "foo": "bar", 
    "text": "123"
}

// no body
$http({
  method: 'GET',
  url: '/url',
  data: params })

// ugly url
// also has its limitation: http://stackoverflow.com/questions/978061/http-get-with-request-body
$http({
  method: 'GET',
  url: '/url',
  params: params })

// params in body, but I wanted GET
$http({
  method: 'POST',
  url: '/url',
  data: params })

これは仕様によるものですか、それともバグですか?

ドキュメントから理由がわかりません。

4

1 に答える 1

15

私はこれを答えとします:

HTTP の場合、禁止されていませんが、サーバーがリクエストの本文を無視する可能性がある (また、無視すべきである)ため、使用しないでください。GET

参考:リクエストボディ付きHTTP GET

XHR の場合、GETandの本体はHEAD無視されます (@jacob-koshy によるヒント)。

参照: https://xhr.spec.whatwg.org/#the-send()-method

于 2013-06-02T18:50:21.837 に答える