为什么本地主机上的Julia服务器挂起



我正试图在Julia中启动一个简单的服务器。(Julia 1.7,HTTP v0.9.16,Windows 10(。

通过复制HTTP文档中的片段,我编写了

using HTTP
using Sockets
HTTP.serve(Sockets.localhost, 8000) do request::HTTP.Request 
@show HTTP.header(request, "Content-Type")
@show HTTP.payload(request)
return HTTP.Response("Helllllo")
end

在julia终端。

当我在Chrome中导航到http://localhost:8000/时,它确实显示了一个带有单词"的页面;Hellllo";。

但是,当我尝试向它发送GET请求时,它没有响应。我尝试过的东西:

  • 打开一个新的julia终端并编写

    using HTTP
    r = HTTP.request("GET", "https://127.0.0.1:8000");
    

发生的情况是该命令挂起,而不是生成r

  • 进入Chrome控制台并编写

    fetch("https://127.0.0.1:8000")
    .then(res => res.json())
    .then(console.log)
    

再一次,没有答案。

我做错了什么?

谢谢!

几个不同的问题:

  1. 在设置了普通http服务器之后,您正试图从https地址进行读取。一旦你解决了这个问题,Julia就可以得到一个请求响应:

julia> r = HTTP.request("GET", "http://127.0.0.1:8000")
HTTP.Messages.Response:
"""
HTTP/1.1 200 OK
Transfer-Encoding: chunked
Helllllo"""
  1. 但它在浏览器中仍然失败(在Firefox中-我想在Chrome中也是如此(

阻止跨来源请求:同源策略不允许读取位于的远程资源http://127.0.0.1:8000/.(原因:CORS请求未成功(。

这只是因为127.0.0.1!=localhost用于浏览器,出于安全目的(因此当您在localhost上时,它不允许您从127.0.0.1的"不同"主机读取(。如果你改为:

>> fetch("http://localhost:8000")
.then(console.log)
Promise { <state>: "pending" }
Response { type: "basic", url: "http://localhost:8000/", redirected: false, status: 200, ok: true, statusText: "OK", headers: Headers, body: ReadableStream, bodyUsed: false }

最新更新