2013-04-25 6 views
11

Я пишу приложение сервера и хотел клиент, чтобы использовать данные в теле, чтобы pararmeterize мой метод 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 }) 

Это по дизайну или ошибка?

Не могу понять, почему с documentation.

+3

Вы уверены, что принимающая сторона поддерживает его? [Запросы GET с телами не запрещены, но не ожидаются) (http://stackoverflow.com/questions/978061/http-get-with-request-body). – bzlm

+2

Забудьте о документах, идите исследовать, что означает GET в http. – 7stud

+0

Метод GET не поддерживает тело запроса –

ответ

11

я бы это как ответ:

Для HTTP, это не запрещено, но вы не должны использовать его в качестве сервера может (и ДОЛЖНА) игнорировать тело GET запроса.

Ссылка: HTTP GET with request body

Для XHR, тело GET и HEAD будут игнорироваться (намекают @ JACOB-Koshy).

Код: https://xhr.spec.whatwg.org/#the-send()-method

Смежные вопросы