关于OkHttp3中publicsuffixes.gz的使用

关于OkHttp3中publicsuffixes.gz的使用

publicsuffixes.gz中是一个压缩的文本文件,里面包含了目前公开的“公共后缀列表”。
关于“公共后缀列表”的解释如下:、

“公共后缀”是指互联网用户可以(或历史上可以)直接注册名称的公共后缀。一些公共后缀的例子是.COM, .co.uk 和 pvt.k12.ma.us。公共后缀列表是所有已知公共后缀的列表。

公共后缀列表是Mozilla的一项举措,但作为社区资源进行维护。它可用于任何软件,但最初是为满足浏览器制造商的需求而创建的。它允许浏览器,例如:

避免为高级域名后缀设置破坏隐私的“supercookies”
突出显示用户界面中域名最重要的部分
按站点准确排序历史记录条目
我们保留了一份更全面(尽管并非详尽无遗)的人员名单。如果您将其用于其他目的,我们鼓励您告诉我们,因为它有助于我们评估变更的潜在影响。为此,您可以使用psl-discuss邮件列表,我们在其中考虑与列表的维护,格式和语义相关的问题。注意:请不要使用此邮件列表来 请求修改 PSL的数据。

部分数据示例如下:

*.alces.network
*.alwaysdata.net
在线
埼玉.jp
大众汽车
大分.jp
大拿
大阪.jp
天主教

为了互联网注册管理机构的利益,可以看到列表中的部分是最新的。如果不是,他们的客户可能无法设置Cookie,或者有关其网站的数据可能显示不佳。所以我们鼓励他们通过提交修正案来维护他们的部分。

在OkHttp3中主要用到Cookie解析时,判断Domain的值,是否是url host的后缀以及是否是公共后缀。

//okhttp3

static @Nullable Cookie parse(long currentTimeMillis, HttpUrl url, String setCookie) {
    ...
        // If the domain is a suffix of the url host, it must not be a public suffix.
    if (urlHost.length() != domain.length()
        && PublicSuffixDatabase.get().getEffectiveTldPlusOne(domain) == null) {
      return null;
    }
    ...
}

该步骤就是验证了Set-Cookie中返回的Domain域名的合法性,如果和url host长度不一致(Domain:abc.com ; url host:o.abc.com),并且不在公共的域名列表中,则返回null,也就是认为该Cookie不合法,不会返回给客户端。

在 Android 开发中,如果想使用 OkHttp 的 SSE(Server-Sent Events,服务器发送事件)功能,可以借助 `okhttp-sse` 提供的 `EventSource` 类。以下是具体的依赖配置和使用介绍。 --- ### 添加依赖 要在项目中使用 `okhttp3.sse.EventSource`,需要先将 OkHttp 和其 SSE 扩展模块添加到 `build.gradle` 中: ```gradle dependencies { implementation &#39;com.squareup.okhttp3:okhttp:4.10.0&#39; // 核心OkHttp库 implementation &#39;com.squareup.okhttp3:okhttp-sse:4.10.0&#39; // SSE支持库 } ``` 注意版本号需保持一致,并且建议始终选择最新稳定版。 --- ### 使用示例 以下是一个简单的例子,展示如何通过 `EventSource` 监听 SSE 数据流: ```java import okhttp3.HttpUrl; import okhttp3.OkHttpClient; import okhttp3.sse.EventSource; import okhttp3.sse.EventSourceListener; public class SseExample { public static void main(String[] args) throws InterruptedException { OkHttpClient client = new OkHttpClient(); // 创建OkHttpClient实例 HttpUrl url = HttpUrl.parse("https://example.com/sse-endpoint").newBuilder().build(); EventSource eventSource = new EventSource.Builder(new EventSourceListener() { @Override public void onOpen(okhttp3.Response response) { System.out.println("连接已建立:" + response.message()); } @Override public void onClosed() { System.out.println("连接已关闭!"); } @Override public void onFailure(Throwable t, okhttp3.Response response) { t.printStackTrace(); } @Override public void onMessage(String id, String type, String data) { System.out.printf("[id=%s][type=%s] %s%n", id, type, data); } }, url).build(); eventSource.connect(); // 连接到SSE服务端点 Thread.sleep(60_000); // 示例运行时间设为60秒 eventSource.cancel(); // 关闭连接 } } ``` **说明:** - `onOpen`: 当客户端成功打开 SSE 流时触发回调。 - `onMessage`: 接收到新的消息时会调用此方法,包含数据、ID 和类型字段。 - `onFailure`: 如果发生错误则会被调用。 - `onClosed`: 客户端断开与服务器之间的链接后触发。 --- ### 注意事项 1. **权限声明**: 确保已在 Manifest 文件中加入网络访问权限: ```xml <uses-permission android:name="android.permission.INTERNET" /> ``` 2. **线程管理**: 因为大多数安卓应用程序都需要异步加载内容而不是阻塞主线程,在实际部署过程中应该考虑把上述逻辑放入单独的工作线程内执行。 3. **生命周期控制**: 需要小心地结合 Activity 或 Service 生命周期管理 `EventSource` 实例状态,防止内存泄漏等问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值