Получение ошибки 405 http в клиенте для вызова gRPC Web - PullRequest
2 голосов
/ 15 мая 2019

Я получаю http код ошибки 405 при вызове службы gRPC из остальных клиентов.

Я попытался вызвать метод удаления с помощью клиента gRPC, он работает нормально (т.е. получает 200).

REST CLIENT

req, err = http.NewRequest("DELETE", fmt.Sprintf("%s%s", *address, "/v1/todo"), nil)
    resp, err = http.DefaultClient.Do(req)
    if err != nil {
        log.Fatalf("failed to call DeleteAll method: %v", err)
    }
    bodyBytes, err = ioutil.ReadAll(resp.Body)
    resp.Body.Close()
    if err != nil {
        body = fmt.Sprintf("failed read Delete response body: %v", err)
    } else {
        body = string(bodyBytes)
    }
    log.Printf("Delete response: Code=%d, Body=%s\n\n", resp.StatusCode, body)

Клиент gRPC

req6 := v1.DeleteAllRequest{
        Api: apiVersion,
    }
    res6, err := c.DeleteAll(ctx, &req6)
    if err != nil {
        log.Fatalf("Delete failed: %v", err)
    }
    log.Printf("Delete all result: <%+v>\n\n", res6)

Ожидается, что функция удаления будет выполнена правильно и получит HTTP-ответ 200.

1 Ответ

0 голосов
/ 16 мая 2019

Текущие браузеры не поддерживают grpc изначально. Поэтому я пытаюсь использовать прокси-сервер sidecar от envoy (envoy by lyft), который служит интерфейсом для моего бэкэнда grpc.

...
static_resources:
cluster:
- name: local_service
    connect_timeout: 0.25s
    type: strict_dns
    lb_policy: round_robin
    load_assignment:
      cluster_name: local_service
      endpoints:
      - lb_endpoints:
        - endpoint:
            address:
              socket_address:
                address: 127.0.0.1
                port_value: 8080
...

Вот как я пишу сервис в моем конфиге посланника, и более подробную информацию об этом можно найти в Envoy's Github Repository , у них есть несколько примеров для лучшего понимания процесса.

...