Strange JQuery Error "код 501, сообщение Unsupported method OPTIONS"

Я изучаю метод JQuery Get. Я запускаю HTTP-сервер Python:

(просто введите команду « Python -m SimpleHTTPServer »).

  • Как передать информацию о контексте шаблона при использовании HttpResponseRedirect в Django?
  • Модуль бутылки Python вызывает «Ошибка: 413 Request Entity Too Large»
  • Python - поиск в потоке ответов HTTP
  • Python `urllib2`: Почему я получаю ошибку 403, когда я` urlopen` на странице Википедии?
  • Получение URL-адреса с сервера Jenkins, защищенного базой данных, с помощью urllib2
  • Как добавить заголовок в urllib2?
  • Хорошо проверить этот веб-сервер, просто посещая «http: // localhost: 80» в моем веб-браузере. Однако, когда я пишу этот очень простой javascript для посещения моего веб-сервера. Я получаю сообщение об ошибке:

    "код 501, сообщение Неподдерживаемый метод (" ОПЦИИ ")"

    Я использую библиотеку jquery.xdomainajax.js, которая предполагает запрос перекрестного домена JQuery.

    Вот мой код javascript:

    <html> <head> <script src="jquery.min.js"></script> <script src="jquery.xdomainajax.js"></script> <script type="text/javascript"> $(document).ready(function(){ u = 'http://localhost:80'; jQuery.get(u, function(res){ $("#data").html(res.responseText) }); }); </script> </head> <body> <p id="data"></p> </body> </html> 

    На самом деле, если я изменю u на любой другой URL-адрес, например «http://www.google.ca». Это работает очень хорошо. Но я понятия не имею, почему он не работает для базового HTTP-сервера Python. Может кто-нибудь мне помочь?

  • Как я могу выполнить запрос HEAD в библиотеке механизации?
  • Доступ к общедоступным страницам LinkedIn с использованием Python
  • Как избежать ошибки HTTP 429 (слишком много запросов) python
  • Представление даты RFC 1123 в Python?
  • Как написать индикатор прогресса загрузки в Python?
  • Python urllib2, базовая HTTP-аутентификация и tr.im
  • 4 Solutions collect form web for “Strange JQuery Error "код 501, сообщение Unsupported method OPTIONS"”

    Я пишу настраиваемый HTTPRequestHandler . Я добавляю метод do-OPTIONS внутри MyHandler, чтобы сообщить браузеру о поддержке моего сервера CORS. Это делается путем отправки заголовков Access-Control-Allow-Origin, Access-Control-Allow-Methods и Access-Control-Allow-Headers . Кроме того, я добавляю оператор self.send_header ('Access-Control-Allow-Origin', '*') "в do_GET .

     class MyHandler(BaseHTTPRequestHandler): def do_OPTIONS(self): self.send_response(200, "ok") self.send_header('Access-Control-Allow-Origin', '*') self.send_header('Access-Control-Allow-Methods', 'GET, POST, OPTIONS') self.send_header("Access-Control-Allow-Headers", "X-Requested-With") def do_GET(self): self.send_response(200) self.send_header('Access-Control-Allow-Origin', '*') self.send_header('Content-type', 'text/html') self.end_headers() self.wfile.write("<html><body>Hello world!</body></html>") self.connection.shutdown(1) 

    Вам также может потребоваться добавить такие поля, как «Content-Type», в разрешенные заголовки.

     self.send_header("Access-Control-Allow-Headers", "X-Requested-With, Content-Type") 

    Похож на запрос предварительной проверки CORS (https://developer.mozilla.org/En/HTTP_access_control)

    Я думаю, вы пытаетесь получить доступ к другому домену / порту. В зависимости от запроса браузер отправляет запрос предварительной проверки (запрос OPTION), чтобы узнать, принимает ли сервер набор заголовков или метод HTTP, который вы хотели отправить в первую очередь. Если сервер отвечает ОК, браузер отправит реальный запрос.

    Похоже, что на сервере Python не выполняются запросы OPTIONS, следовательно, ошибка.

    Совет. Инструменты сетевого контроля (tcpdump, wireshark, ngrep …) очень помогают при работе с HTTP-запросами и / или сетевыми ошибками.

    Это похоже на запрос предпросмотра ресурса Cross-Origin (CORS).

    Поскольку CORS является спецификацией, которая сильно связана с конфигурацией сервера, я рекомендую прочитать http://enable-cors.org/

    Там вы увидите больше о внедрении CORS для вашей конкретной платформы.

    Python - лучший язык программирования в мире.