Java JSOUP 如何在标头中发送 Origin



im 尝试使用 JSOUP 测试我的服务,但我使用的是 CORS,我需要发送 原点仅用于测试海豚,但是当我发送此消息时,我不会在服务器端接收,始终接收 null。

Connection con = Jsoup.connect("http://localhost:8080/myservice");
con.userAgent("Mozilla");
/* the origin is replaced to null automatically*/
con.header("Origin", origin);
con.ignoreHttpErrors(true);
con.followRedirects(true);
con.ignoreContentType(true);
con.post();

我会做一些与此不同的事情吗?

解决:

使用 ApacheHTTP 代替 JSOUP,导致 JSOUP 默认删除 Origin 标头。 :)

在幕后,JSoup 正在使用java.net.HttpURLConnection进行连接。HttpURLConnection有一组受限制的标头,包括"Origin"。 这些似乎没有很好的记录,但可以在来源中清楚地看到。

正如您提到的,使用HttpClient将回避问题。

或者,若要继续从 JSoup 进行直接连接,根据环境中发生的其他情况,可以选择设置sun.net.http.allowRestrictedHeaders系统属性。 这可以在上面链接的来源中进一步看到。

这将绕过HttpURLConnection中的标头检查,但令人讨厌的是,它被编码为共享静态值。 这意味着在 JVM 中的任何位置建立第一个连接之前,需要设置系统属性 - 例如作为-D命令行选项。

这里有更多关于这个主题的信息。

稍微题外话,HttpURLConnection源中的评论,将那里的受限标头与XMLHttpRequest2进行比较很有趣 - 好像这期望在浏览器中运行。 这种限制可能可以追溯到Java小程序的时代? 现在对于服务器端应用程序来说,它可能不太有用。

最新更新