You need to enable JavaScript to run this app.
导航

概述

最近更新时间2023.07.21 15:26:49

首次发布时间2022.05.20 17:46:16

您的 app 可能使用了网络库或 WKWebView。在网络库中,您可能使用了原生 NSURLProtocol 或自定义 NSURLProtocol。火山引擎推荐您使用不同的方案在 app 端集成火山引擎移动解析(HTTPDNS)。

网络库或 WKWebView推荐集成方案方案限制参考文档
网络库(原生 NSURLProtocol使用 MNet Protocol 拦截请求。然后,您可以使用网络库发送被拦截的请求。原生 NSURLProtocol
网络库(自定义 NSURLProtocol使用自定义方法拦截请求。然后,您需要在自定义 NSURLProtocol 中手动将请求改写成 IP 直连请求。接下来,您需要使用
  • App 开启代理时,如果代理无法读取 Host header,您无法将请求改写成 IP 直连请求。
  • 火山引擎推荐您使用 NSURLSessionDelegate 拦截非 SNI 请求。
  • 您需要使用 CFNetwork 改写 SNI 请求。CFNetwork 的 API 大部分已经废弃,扩展成本高。
  • 使用 CFNetwork 改写 POST 请求时,请求中的 body 会为空。您需要通过 InputStream 或把 body 传入 header 的方式确保 body 不为空。
  • 仅支持 HTTP 1.1。如果您的 app 向不支持 HTTP 1.1 的服务器发送请求,服务器会返回 505 错误码。
自定义 NSURLProtocol
WKWebView
  1. WKBrowsingContextController 中通过 registerSchemeForCustomProtocol 注册 scheme。然后,您需要使用 performSelector 匹配 NSURLProtocol
  2. 根据网络库使用的 Protocol 类型创建请求。
  3. 使用 WKWebView.loadRequest 拦截请求。
  • 如果您的网络库使用了原生 NSURLProtocol,方案限制和 网络库(原生 NSURLProtocol) 相同。
  • 如果您的网络库使用了自定义 NSURLProtocol,方案限制和 网络库(自定义 NSURLProtocol) 相同。
WKWebView