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]);
}