我正试图在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)
再一次,没有答案。
我做错了什么?
谢谢!
几个不同的问题:
- 在设置了普通
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"""
- 但它在浏览器中仍然失败(在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 }