Прямое подключение кабеля действия (ожидаемый ответ HTTP 101, но было «404 Not Found» + Не удалось обновить до WebSocket) - PullRequest
0 голосов
/ 07 февраля 2019

Я пытаюсь открыть прямое соединение через веб-сокет с маршрутом моего кабеля действия.К сожалению, это не работает.Я получаю эту ошибку только при керлинге или просто нажимаю http://localhost:3000/cable напрямую ..

Started GET "/cable" for 127.0.0.1 at 2019-02-06 20:04:08 -0600
Started GET "/cable/"[non-WebSocket] for 127.0.0.1 at 2019-02-06 20:04:08 -0600
Failed to upgrade to WebSocket (REQUEST_METHOD: GET, HTTP_CONNECTION: keep-alive, HTTP_UPGRADE: )
Finished "/cable/"[non-WebSocket] for 127.0.0.1 at 2019-02-06 20:04:08 -0600

Это исключение в моем клиенте:

java.net.ProtocolException: Expected HTTP 101 response but was ‘404 Not Found’

Но если я нажму http://localhost:3000/page/index с помощью браузера я вижу следующий вывод:

Started GET "/page/index" for 127.0.0.1 at 2019-02-06 20:05:30 -0600
Processing by PageController#index as HTML
  Rendering page/index.html.erb within layouts/application
  Rendered page/index.html.erb within layouts/application (0.3ms)
Completed 200 OK in 28ms (Views: 25.5ms | ActiveRecord: 0.0ms)


Started GET "/cable" for 127.0.0.1 at 2019-02-06 20:05:30 -0600
Started GET "/cable/" [WebSocket] for 127.0.0.1 at 2019-02-06 20:05:30 -0600
Successfully upgraded to WebSocket (REQUEST_METHOD: GET, HTTP_CONNECTION: Upgrade, HTTP_UPGRADE: websocket)
  User Load (0.7ms)  SELECT  "users".* FROM "users" ORDER BY "users"."id" DESC LIMIT $1  [["LIMIT", 1]]
  ↳ app/channels/application_cable/connection.rb:12
Registered connection (Z2lkOi8vd2hvcy1yZWFkeS1hcGkvVXNlci8z)
RoomChannel is transmitting the subscription confirmation
RoomChannel is streaming from room_channel
RoomChannel is transmitting the subscription confirmation
RoomChannel is streaming from room_channel

Вот соответствующие файлы, дайте мне знать, если мне нужно поделиться еще:

#routes.rb
Rails.application.routes.draw do
  mount API::Base, at: '/'

  mount ActionCable.server => '/cable/chat'

  get 'page/index'
  root 'page#index'
end

#page_controller.rb
class PageController < ApplicationController
  def index
  end
end

Я пытаюсь подключиться к веб-сокету, просто свернув на маршрут к серверу ActionCable.Это возможно?

1 Ответ

0 голосов
/ 07 февраля 2019

Проблема заключалась в том, что я не отправлял заголовок Origin в запросе http, поэтому allowed_request_origins не смог ничего найти.Из-за этого он выдавал это очень непонятное сообщение об ошибке о невозможности преобразования http-соединения в веб-сокет.

...