Сервер отправляет 400 по действительному запросу от клиента - PullRequest
0 голосов
/ 06 августа 2020

Я использую сторонний удаленный агент, который отправляет POST-запрос о каком-то событии. Запрос POST может быть отправлен на любой сервер, который принимает POST, поэтому я создал быстрый экземпляр flask.

# main.py

from flask import Flask, request
app = Flask(__name__)

@app.route('/', methods=['POST'])
def hello():
    # Logging request data to console
  return request.get_data()

Этот простой сервер хорошо работает и протестирован с Postman. Теперь, когда происходит событие и удаленный агент пытается отправить данные на мой сервер, я попадаю в журналы ниже.

* Detected change in '/Users/my/path/main.py', reloading
 * Restarting with stat
 * Debugger is active!
 * Debugger PIN: 000-000-000
192.168.1.2 - - [06/Aug/2020 12:06:39] code 400, message Bad HTTP/0.9 request type ('POST')
192.168.1.2 - - [06/Aug/2020 12:06:39] "POST HTTP/1.1" HTTPStatus.BAD_REQUEST -

Вот что я записал на wirehark:

POST HTTP/1.1
Host:192.168.1.1
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64; rv:47.0) Gecko/20100101 Firefox/47.0
Content-length: 6937
Content-type: text/xml
Connection: Keep-Alive

AgentID=ABCD
DataPoint=111
MoreDataPoint=222
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
        "http://www.w3.org/TR/html4/strict.dtd">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
        <title>Error response</title>
    </head>
    <body>
        <h1>Error response</h1>
        <p>Error code: 400</p>
        <p>Message: Bad HTTP/0.9 request type ('POST').</p>
        <p>Error code explanation: HTTPStatus.BAD_REQUEST - Bad request syntax or unsupported method.</p>
    </body>
</html>

Я не могу понять, почему мой сервер отклоняет запрос с 400.

1 Ответ

1 голос
/ 06 августа 2020

HTTP / 0.9 - однострочный протокол

Исходная версия HTTP не имела номера версии; Позже он был назван 0.9, чтобы отличить его от более поздних версий. HTTP / 0.9 чрезвычайно прост: запросы состоят из одной строки и начинаются с единственного возможного метода GET, за которым следует путь к ресурсу (а не URL-адрес, поскольку и протокол, и сервер, и порт не нужны после подключения к серверу).

0.9 не имеет метода «POST», поэтому они отправляют только «GET».

...