知识库

Neo4j 特定的 HTTP 请求用户代理字符串

对于那些使用 APOC 命令通过 HTTP/HTTPS 检索数据,和/或运行 Cypher LOAD CSV 时,请求将发送带有 Neo4j 特定的用户代理/浏览器标识符。

以下是来自 Apache Web 服务器访问日志 /var/log/apache2/access.log 的示例,包括以下发出的 4 个请求:

192.168.2.38 - - [26/Mar/2018:19:16:52 -0400] "GET / HTTP/1.1" 200 3477 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36"
192.168.2.38 - - [26/Mar/2018:19:17:23 -0400] "GET / HTTP/1.1" 404 3477 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:57.0) Gecko/20100101 Firefox/57.0"
192.168.2.40 - - [26/Mar/2018:19:21:11 -0400] "GET /test.json HTTP/1.1" 200 989 "-" "curl/7.55.1"
192.168.2.40 - - [26/Mar/2018:19:26:37 -0400] "GET /test.json HTTP/1.1" 200 989 "-" "APOC Procedures for Neo4j"
192.168.2.40 - - [26/Mar/2018:19:46:01 -0400] "GET /test.csv HTTP/1.1" 200 502 "-" "NeoLoadCSV_Java/1.8.0_151"

从上面我们可以看到,apoc.load.json 发送的用户代理是 APOC Procedures for Neo4j,而 LOAD CSV 发送的用户代理是 NeoLoadCSV_Java/1.8.0_151。此外,对于任何启用 Bolt 的应用程序,例如 Neo4j Browser 和 cypher-shell,由于工作实际上是在服务器本身上完成的,因此用户代理将是相同的。

因此,如果您的网络防火墙仅允许典型已知用户代理/浏览器标识符的 HTTP(s) 请求流量,并拒绝所有其他流量,您可能会遇到以下情况:通过典型浏览器发出的请求可以报告数据,但使用 APOC 或 LOAD CSV 时却无法返回数据。