如何强制iOS在标准HTTP资源加载请求中添加Origin与X-Requested-With头?
iOS的WebView(包括UIWebView和WKWebView)在通过<img>这类标准标签加载图片时,确实会自动省略Origin和X-Requested-With头,而且没有系统级的开关能强制让这类请求带上这两个头。给你几个可行的替代思路:
自定义加载图片后注入页面:放弃直接用
<img src="xxx">的原生加载方式,改用原生代码通过URLSession发起请求,手动带上Origin和X-Requested-With头,拿到图片数据后转成base64格式的Data URI,再通过JS把这个URI设置给页面里的<img>标签。示例代码:// 构建带请求头的图片请求 var request = URLRequest(url: URL(string: "https://mydomain.com/file/img1.png")!) request.setValue("你的Origin值", forHTTPHeaderField: "Origin") request.setValue("XMLHttpRequest", forHTTPHeaderField: "X-Requested-With") // 发起请求并处理结果 let task = URLSession.shared.dataTask(with: request) { data, response, error in guard let data = data else { return } let base64 = data.base64EncodedString() let mimeType = response?.mimeType ?? "image/png" let dataURI = "data:\(mimeType);base64,\(base64)" // 在WebView中执行JS替换图片地址 self.webView?.evaluateJavaScript("document.querySelector('img[src=\"https://mydomain.com/file/img1.png\"]').src = '\(dataURI)'", completionHandler: nil) } task.resume()拦截WebView请求并替换:利用WKWebView的
WKURLSchemeHandler功能,注册一个自定义Scheme(比如myapp://),页面里的<img>写成<img src="myapp://mydomain.com/file/img1.png">。在自定义的Scheme Handler中,将自定义Scheme的请求转换成标准HTTPS请求,带上需要的头,拿到数据后返回给WebView。这种方式能批量处理所有图片请求,无需逐个修改页面元素。调整服务器校验逻辑:如果前面的方案实现成本太高,可以考虑对静态资源(如图片)放宽校验规则——毕竟图片这类资源的风险相对API接口更低。比如服务器仅校验
/api/路径下的请求头,对/file/这类静态资源路径跳过Origin和X-Requested-With的校验,或者改用Cookie、自定义URL参数来做身份验证,替代这两个头的作用。
内容的提问来源于stack exchange,提问作者rolinger

