问题标签 [http-kit]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
129 浏览

clojure - 在 Localhost for HTTP-Kit 上托管时进行 AJAX 调用

我正在尝试制作一个前端和 HTTP-Kit 后端网站。我在从 Web 浏览器中获取 HTTP-Kit 响应时遇到了很多麻烦。当我使用 HTTP-Kit 网络服务器从我的浏览器访问“ http://localhost:8080 ”时,它运行良好并显示“hello HTTP!”。

但是,当我尝试使用 Post 或 Get 对同一服务器进行 AJAX 调用时,它不再起作用,而是显示状态 0。

我读到它可能与 CORS 兼容性有关,但我真的不知道如何配置它才能工作。

干杯,

0 投票
1 回答
237 浏览

clojure - 如何使用 GET 请求传递数据?

我想通过 GET 请求传递表单数据。

我在这个卷曲上取得了成功: curl http://sample.com -d 'action=login_request&user_name=balvan'

但我需要从-d. 使用此函数调用:

如何在请求正文中添加那些“-d”参数?

我有[org.httpkit.client :as http-client]ns 声明和[cheshire "5.8.1"]项目的依赖项。

0 投票
0 回答
48 浏览

clojure - 更新 sente-boot 时的 http-kit 依赖问题

我更新的 build.boot 文件可能有问题:https ://github.com/laforge49/sente-boot/blob/master/build.boot (在后端太久了!)

我试过改变 clojure 和 clojurescript 的版本。以前我没有找到RT类,所以我至少取得了一些进展。

这是我的依赖项:

我收到此错误:

0 投票
1 回答
86 浏览

clojure - 环形防伪中间件可以有条件地应用吗?

我们有一个使用 HttpKit 服务请求的 Web 应用程序和一个用 Ring 中间件包装的处理程序。

处理程序类似于:

在 site-defaults 中可以找到:

该应用程序过去只处理来自浏览器的请求,但现在一些端点响应 API 请求,包括 POST 操作。

在我可以阅读的文档中:

此中间件将阻止除 GET 和 HEAD 之外的所有 HTTP 方法在没有有效防伪令牌的情况下访问您的处理程序。

因此,您应该只将此中间件应用于旨在通过 Web 浏览器访问的应用程序部分。此中间件不应应用于定义 Web 服务的处理程序。

有没有办法有条件地应用防伪设置,或者site-defaults根据请求提供不同版本的防伪设置?

0 投票
1 回答
314 浏览

clojure - 在 Clojure / Ring / HttpKit 应用程序中获取 POSTed 数据

我正在编写一个简单的 HttpKit / Ring 应用程序,并试图将一些数据从表单发布到它。

这是我的服务器代码的相关部分:

这是发布到它的客户端代码。

现在,我可以从浏览器的开发人员工具中看到,我正在使用包含页面和数据值的表单数据发布一些内容。

但是在我的服务器端代码中,请求的 :form-params 是空的。

我错过了什么或做错了什么?

0 投票
1 回答
41 浏览

clojure - 如何直接在 http-kit 中编写响应?

如何直接在 http-kit 中编写响应?我正在构建一个隧道代理,需要第一个响应是准确的"HTTP/1.1 200 Connection established\r\n\r\n",,但似乎 http-kit 将它呈现为一个body,即使我做了类似的事情{:status "HTTP/1.1 200 Connection established"}

0 投票
1 回答
583 浏览

docker - 没有 Docker 的 Nginx 连接到 docker 容器(clojure)

我特别是 webapps 和 nginx 的新手。我的 default.conf 看起来像这样

我让 nginx 在数字海洋 ubuntu 实例中运行。我还有一个运行 mye clojure http-kit webapp 的 docker 容器。它正在侦听端口 8080。它具有 /api/chsk /api/login /api/signup 等路由。

我用这个脚本运行图像

这曾经可以工作,但是现在运行 systemctl start nginx 时出现以下错误:

需要明确的是,我没有在 docker 中运行 nginx。我同时提供静态内容。

0 投票
0 回答
611 浏览

clojure - Clojure 中究竟是如何处理 POST 请求主体的?(http-kit,组合)

我有一个带有登录表单的页面,以及一个接受 POST 请求的服务器。这是服务器:

当我发出登录请求时,会打印出来:

[:remote-addr "0:0:0:0:0:0:0:1"][:params {"username" "asdf", "password" "ghkj"}][:route-params {}] [:headers {"origin" " http://localhost:3449 ", "host" "localhost:8000", "user-agent" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, 像 Gecko ) Chrome/74.0.3729.172 Safari/537.36 Vivaldi/2.5.1525.46", "content-type" "application/x-www-form-urlencoded", "content-length" "27", "referer" " http:// localhost:3449/ ", "连接" "keep-alive", "升级不安全请求" "1", "accept" "text/html,application/xhtml+xml,application/xml;q=0.9,image/ webp,图像/apng,/;q=0.8,application/signed-exchange;v=b3", "accept-language" "en-US,en;q=0.9", "accept-encoding" "gzip, deflate, br", "cache-control " "max-age=0"}][:async-channel #object[org.httpkit.server.AsyncChannel 0x2212125a "/0:0:0:0:0:0:0:1:8000<->/0 :0:0:0:0:0:0:1:50592"]][:server-port 8000][:content-length 27][:form-params {"username" "asdf", "password" " ghkj"}][:compojure/route [:post "/login"]][:websocket?false][:query-params {}][:content-type "application/x-www-form-urlencoded"][ :character-encoding "utf8"][:uri "/login"][:server-name "localhost"][:query-string nil][:body #object[org.httpkit.BytesInputStream 0x4e67c6c0 "BytesInputStream[len=27 ]"]][:方案:http][:请求方法:post]

所以我想知道,它是什么样的数据结构?它看起来不像散列图,但是当我打印出来(:params request)而不是 时request,我得到

[“用户名”“asdf”][“密码”“ghkj”]

它是向量列表的哈希图吗?我不明白我在这里处理什么样的数据结构。

另外,当我只要求参数而不是整个请求时,为什么会{"username" "asdf", "password" "ghkj"}被转换为?["username" "asdf"]["password" "ghkj"]

然后我尝试打印出来(get (:params request) "username"),我得到了“asdf”。这是有道理的,但它如何允许我get在多个向量的集合上使用?

最后,我将如何处理我的 post 请求中的 JSON?它只是同一件事,还是我必须以不同的方式处理它?

0 投票
1 回答
339 浏览

clojure - X秒后如何让响铃请求超时?

有没有办法让我的服务器在 X 秒后自动超时(在服务器上)?

我想这样做是因为 heroku requests在 30 seconds 后超时,并且我不想在这些情况下将服务器资源浪费在计算响应上。我还想杀死任何打开的数据库事务,所以我不会在用户没有得到体面响应的情况下更改数据库。

我正在使用 HTTP-kit 2.3.0 和 compojure 1.6.1。

(我知道让请求花费这么长时间并不是最佳实践,但这是针对后台项目的,例如当数据库无法访问时会发生这些事情)

0 投票
2 回答
328 浏览

proxy - 如何将部分请求转发到 Clojure 中的另一台服务器?

概括

我正在开发一个类似于 Clojure 中的代理的服务器,以基座服务 + lein 为基础:

  • 接收请求
  • 将请求转发到外部服务器
  • 发出多个服务器到服务器的请求以提供更大的 json 并作为单个请求返回给客户端

它很容易编码,并且有很多关于如何提供路由的资源,
但是我找不到任何简单的方法,如何将 Clojure 基座
服务与转发路由一起使用

例子

  • 客户端调用 [GET] /billing => proxy-clojure-server
  • proxy-clojure-server使用客户端凭据验证请求 => auth-server
  • proxy-clojure-server用计费数据填充 json => billing-server
  • proxy-clojure-server用客户数据填充 json => customer-server
  • proxy-clojure-server返回 200 并解析完整的 JSON

设置

  • 我有一个结构类似的项目: lein new pedestal-service my-app

我一直在尝试的

例子:

我只是无法将基座的路由系统与此代理解决方案混合,路由不同,似乎,也许我需要用不同的方法来做

免责声明

  1. 我知道基本转发也可以由 nginx、varnish 和任何其他负载均衡器完成。但我的想法是填充来自不同服务器的数据,使其为客户端简化
  2. 正如您可能已经注意到的,我是 Clojure 的新手。而且我没有选择,因为谷歌关于那个也很复杂,有时没用