2021年6月11日更新
header请求头这种最好是不通过服务器,比如如果通过服务器NGINX配置,会出现很多问题,包括请求头丢失,请求头拦截,最好的方式通过直接跟web直接交互,比如WebViewJavascriptBridge或者原生自带的方式做交互,更方便,如果有更好的方案留言给我,阿里嘎多
最近在项目中遇到与H5交互,当时方案是在请求头中加入header,但是后面遇到了比如浏览器缓存header不更新,可以设置请求头中加入Cache-Control nocache 等字段或者在链接中加入时间戳防止缓存,后者方案可能相对来说不是很好。
在WKwebview因为加载请求是个异步操作,所以在初次webview loadrequest时候不需要加入header ,而是拦截webview的请求 ,在请求头中加入header,并且重复请求,但是还有一定问题 ,有时会有header丢失问题,所以我觉得最优解决方案是通过交互传参数可以解决这个问题,如果有更好方案请告诉我。
- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction*)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler {
NSURLRequest * request = navigationAction.request;
NSMutableURLRequest * mutRequest = [request mutableCopy];
NSString * urlString = request.URL.absoluteString;
NSDictionary * dictHader = request.allHTTPHeaderFields;
if (![dictHader objectForKey:@"token"]) {
[mutRequest setValue:@"123" forHTTPHeaderField:@"token"];
[webView loadRequest:mutRequest];
decisionHandler(WKNavigationActionPolicyAllow);
}else{
decisionHandler(WKNavigationActionPolicyAllow);
}
NSLog(@"====== >>>>url----- %@ request %@",urlString,[request allHTTPHeaderFields]);
}