Ошибка HTTP 505 при запросе приложений Heroku через сотовый модуль

Я пытаюсь использовать сотовый модуль Telit GE910 для выполнения HTTP-запросов по сотовой сети. Я подключил его через плату FTDI к USB-порту моего компьютера и отправляю ему AT-команды через терминал. Я использую AT-команды, чтобы успешно открыть сокет в командном режиме и отправить HTTP-запрос.

AT#SD=1,0,80,"google.com",0,0,1
OK
�AT#SSEND=1
> HE�AD� /� HTT�P/1.1


OK

SRING: 1

Я не понимаю, почему они появляются. При выполнении запросов для google.com это нормально, но все, что размещено на Heroku, дает мне ошибку 505.

HTTP/1.1 505 HTTP Version Not Supported
Connection: close
Server: Cowboy
Date: Tue, 26 Apr 2016 20:39:34 GMT
Content-Length: 0

Я читал на одном или двух форумах, что этот ответ 505 специфичен для Heroku и связан с неправильным интервалом в HTTP-запросе. Я подозреваю, что незнакомые символы создают проблему. Что здесь происходит? Они постоянно появляются перед «А», «пробелом» и «П»; могут быть и другие буквы, но это те, которые я видел.


person oregano    schedule 26.04.2016    source источник
comment
Кстати, я могу успешно отправлять HTTP-запросы на свой веб-сервер Heroku, используя cURL, клиенты WiFi, созданные на модуле Wi-Fi ESP8266, и клиент TCP, созданный для платы разработки LinkIt ONE IoT.   -  person oregano    schedule 27.04.2016


Ответы (1)


Хорошо, я понял (я думаю), почему я получил ответ 505. Потом я начал получать 400, но я понял и это!

В примечаниях по применению для сокетов от Nimbelink (это поставщик, который использует сотовые модули Telit — у меня есть один из их модулей, на котором установлен Telit GE910) говорится, что после того, как вы введете свой HTTP-запрос (например, GET / HTTP/1.1), вы предназначены для двойного нажатия ctrl+j, чтобы сигнализировать об окончании запроса.

Что ж, я начал делать всю свою последовательную связь в CoolTerm, чтобы я мог видеть HEX, который я отправлял. (Я надеялся, что смогу уловить символы � — я этого не сделал, на самом деле они не отображаются в CoolTerm.) ctrl+j приводит к переводу одной строки (HEX: 0A) . Согласно документации HTTP, для обозначения конца строки вы должны использовать перевод строки возврата каретки (HEX: 0D 0A). (Heroku также говорит он должен быть отформатирован следующим образом.) Это то, что я отправляю, когда нажимаю ввод. Так что, если я закончу GET / HTTP/1.1 дважды enter, запрос будет получен. Хотя даже запрос HEAD / HTTP/1.1 к heroku.com возвращается как 400. Но это дальше:

Согласно RFC (о котором я узнал здесь), для HTTP 1.1 требуется хост . Итак, если я сделаю все это с правильными окончаниями строк

GET / HTTP/1.1
Host: heroku.com 

оно работает! Он также работает для публикации на моем сервере.

person oregano    schedule 27.04.2016