Узлы J звонят на http-сервер фляги Python - PullRequest
0 голосов
/ 05 ноября 2018

У меня есть модель машинного обучения, я сделал из нее API и установил флеш-сервер, чтобы сделать его доступным как ssuch

server = '192.168.71.53'
port = 5000

app = Flask(__name__)
app.config['CORS_HEADERS'] = 'Content-Type'

cors = CORS(app, resources={r"/get_faces":{"origins":"http://"+server+":"+str(port)}})

@app.route('/call_method', methods=["POST"])
@cross_origin(origin=server, headers=['Content- Type','Authorization'])
def call_model():
    return response

if __name__ == "__main__":
        app.run(host=server, port=port )

Затем я создал интерфейс в Node JS, который отправляет запрос этому методу через сервер и IP, используя этот

axios.post('http://192.168.71.53:5000/call_method', dataJson)
            .then(response => {
                # process data }  }  })

Программа работает на локальном хосте, я столкнулся с проблемой при запуске веб-сайта на ip, Chrome не позволяет мне получить доступ к камере в Node Js, если у меня нет HTTPS-соединения, поэтому я развернул веб-сайт по ссылке, и попытался получить к нему доступ, теперь камера работает, но она не отправляет запрос на мой флеш-сервер, я посмотрел на него и прочитал, что HTTPS не может сделать вызов HTTP, поэтому я настроил флешку на HTTPS с помощью этого

context = ('certificate.pem', 'key.pem')
app.run(host=server, port=port , ssl_context=context)

Теперь, когда я отправляю запрос, Chrome выдает net::ERR_CERT_AUTHORITY_INVALID ошибку

поэтому я решил опубликовать http-запрос, а не https-запрос, для этого мне пришлось добавить это в мой html-файл

<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests"> 

это дает мне ошибку net::ERR_SSL_PROTOCOL_ERROR в Chrome и ошибку code 400, message Bad HTTP/0.9 request type HTTPStatus.BAD_REQUEST - в колбе

Я пробовал несколько других вещей, но ничего не работает, может кто-нибудь помочь мне с этим? Я боролся с этим уже более 2 недель

1 Ответ

0 голосов
/ 05 ноября 2018

Здесь происходит несколько разных вещей. Давайте попробуем сломать их.

  1. Во-первых, ваше приложение должно безопасно работать по HTTPS, чтобы быть разрешенным разрешения камеры, как вы обнаружили. При разработке вашего приложение, если вы размещаете его на локальном хосте и получаете к нему доступ через http://localhost:port URL, тогда вы все еще можете получить доступ к камере разрешения без HTTPS. Это уступка, сделанная только для localhost, чтобы сделать разработку проще.
  2. Переход к следующей части с колбой и HTTPS. Судя по всему, вы сгенерировал сертификат и передал его на колбу для обслуживания HTTPS движение. Это не сработало, потому что вы использовали самоподписанный сертификат. Самозаверяющий сертификат, как следует из названия, подписано физическим лицом (вами) и не может быть использовано для проверки сети личность сервера. Вот почему ты получил net::ERR_CERT_AUTHORITY_INVALID ошибка. Chrome говорит вам, что он не признает центр сертификации (вы), который подписал сертификат.

    Исправление снова заключается в том, чтобы просто запустить все на локальном хосте для разработки. Вам не нужно беспокоиться о HTTPS, прежде чем вы будете готовы развернуть свой код.

  3. Почему вы должны были добавить это: <meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests"> сделать запрос http сообщения? Это говорит браузеру обновить HTTP-соединение до HTTPS-соединения. Поэтому, когда ваш js-код отправил HTTP-запрос POST, этот метатег обновил это соединение до HTTPS, что затем не удалось с помощью net: ERR_SSL_PROTOCOL_ERROR, поскольку фляга больше не прослушивала с включенным HTTPS. Flask выдал ошибку протокола 400, потому что chrome попытался обновить свое HTTP-соединение до HTTPS-соединения, которое не удалось понять с помощью колбы.

Суммируя, запустите все на локальном хосте, и вам не нужно будет возиться с HTTPS, пока вам действительно не понадобится.

...