nimrod httpsserver не будет работать в сафари

Я немного поиграл с Nimrod и попробовал модуль HTTPServer. Сначала я подумал, что это не работает, так как когда я попытался перейти на веб-страницу в Safari, моем стандартном браузере, он выдал ошибку. Ошибка была примерно такой: (извините, если не совсем так, это перевод с голландского)

Safari не может открыть эту страницу Safari не может открыть страницу localhost:5000, так как сетевое подключение было неожиданно потеряно

Но когда я пытаюсь открыть страницу в Chrome или Firefox, все работает нормально.

Мой код Нимрода:

import strutils, sockets, httpserver

var counter = 0
proc handleRequest(client: TSocket, path, query: string): bool {.procvar.} =
  inc(counter)
  client.send("Hello for the $#th time." % $counter & wwwNL)
  return false # do not stop processing

run(handleRequest, TPort(5000))

person Dirk    schedule 21.10.2014    source источник


Ответы (1)


Похоже, что client.send пишет напрямую в провод — без добавления строки состояния HTTP или каких-либо заголовков. Вы можете заставить его работать, добавив хотя бы строку состояния:

import strutils, sockets, httpserver

var counter = 0
proc handleRequest(client: TSocket, path, query: string): bool {.procvar.} =
  inc(counter)
  client.send("HTTP/1.0 200 OK\r\n\r\nHello for the $#th time." % $counter & wwwNL)
  return false # do not stop processing

run(handleRequest, TPort(5000))
person Joel Richard    schedule 02.11.2014
comment
Этот ответ правильный, но если вы хотите избежать обработки таких низкоуровневых деталей, рассмотрите возможность использования фреймворка более высокого уровня для написания веб-приложений, такого как jester: github.com/dom96/jester - person zah; 11.11.2014