leesei leesei - 5 months ago 47
AngularJS Question

$http.get() with JSON data

I'm writing a server app and wanted the client to use data in body to pararmeterize my GET method, like this:

# 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"
}


In AngularJS I tried:

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 })


Is this by design or a bug?

I cannot see why from the documentation.

Answer

I would take this as the answer:

For HTTP, it's not prohibited, but you shouldn't use it as the server may (and SHOULD) ignore the body of GET request.

Reference: HTTP GET with request body

For XHR, body of GET and HEAD will be ignored (hinted by @jacob-koshy).

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