昨天,我在使用我的應用時發現了一個錯誤,當我嘗試下載AGPS文件並更新我的自行車電腦以便更快地定位時。 AGPS cound不能下載。iOS10 http請求成爲https請求,但有一些不是
- AGPS文件網址是:http://alp.u-blox.com/current_14d.alp
- 的iOS系統版本:iOS版10.3.2
- 網絡:WIFI和移動網絡的4G以下
步驟是我做檢查的bug。
- 檢查Safari上的AGPS文件(在我的Macbook Pro上),它可以成功下載。
- 在Chrome中打開的AGPS文件的URL,但不能下載,它讓我看到:
您的連線不是私人
攻擊者可能會試圖從alp.u-竊取你的信息blox.com(例如,密碼,消息或信用卡)。 NET :: ERR_CERT_DATE_INVALID
自動將一些系統信息和頁面內容發送給Google,以幫助檢測危險的應用程序和網站。隱私政策
- 在我的Android手機瀏覽器上打開AGPS URL,下載文件成功。
- 在我的iPhone Safari上打開AGPS URL,無法打開網頁。
然後我捕捉使用查爾斯的應用要求,它讓我看到真正的URL請求變更爲:
https://alp.u-blox.com/current_14d.alp
-- http changed to https
有人說這個問題是因爲iOS10的強制使用HTTPS所有HTTP請求。所以我在Info.plist上添加了一些設置。
<key>NSAllowsArbitraryLoads</key>
<true/>
<key>NSExceptionDomains</key>
<key>sina.com.cn</key>
<dict>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSExceptionMinimumTLSVersion</key>
<string>TLSv1.0</string>
<key>NSExceptionRequiresForwardSecrecy</key>
<false/>
<key>NSIncludesSubdomains</key>
<true/>
</dict>
或類似這樣的
<key>NSAllowsArbitraryLoads</key>
<true/>
<key>NSExceptionDomains</key>
<key>twitter.com</key>
<dict>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSExceptionRequiresForwardSecrecy</key>
<false/>
<key>NSIncludesSubdomains</key>
<true/>
</dict>
然後再捕捉要求,既沒有工作。
網絡要求如下代碼:
@property (nonatomic, strong) AFHTTPSessionManager *sessionManager;
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:urlString]];
NSURLSessionDownloadTask *downloadTask = [self.sessionManager
downloadTaskWithRequest:request
progress:^(NSProgress *_Nonnull downloadProgress) {
if (progressBlock) {
progressBlock((int64_t)downloadProgress.completedUnitCount, downloadProgress.totalUnitCount);
}
}
destination:^NSURL *_Nonnull (NSURL *_Nonnull targetPath, NSURLResponse *_Nonnull response) {
NSString *otaFilePath = [NSString stringWithFormat:@"%@/%@", kOTA_FIRMWARE_DOWNLOAD_DIR, [response suggestedFilename]];
return [NSURL fileURLWithPath:otaFilePath];
}
completionHandler:^(NSURLResponse *_Nonnull response, NSURL *_Nullable filePath, NSError *_Nullable error) {
if (error) {
xLog_error(@"[Error] 下載固件失敗, Error Message: %@", error.localizedDescription);
completeHandler(NO, nil);
} else {
completeHandler(YES, filePath.path);
}
}];
[downloadTask resume];
請求由NSURLSession也不能正常工作。
#import <Foundation/Foundation.h>
NSDictionary *headers = @{ @"cache-control": @"no-cache",
@"postman-token": @"aa15f00a-bc58-082a-c8e3-e636537b7fa7" };
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL
URLWithString:@"http://alp.u-blox.com/current_14d.alp"]
cachePolicy:NSURLRequestUseProtocolCachePolicy
timeoutInterval:10.0];
[request setHTTPMethod:@"GET"];
[request setAllHTTPHeaderFields:headers];
NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request
completionHandler:^(NSData *data,
NSURLResponse *response, NSError *error) {
if (error) {
NSLog(@"%@", error);
} else {
NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *) response;
NSLog(@"%@", httpResponse);
}
}];
[dataTask resume];
我的問題
- 不iOS10改變從http網址爲https?或由網絡服務器更改?
- 爲什麼url可以通過Safari(在PC上)打開,並且無法在Safari上打開(在iPhone上)?
- 爲什麼可以在Android上打開?
更多我做什麼
我從服務器獲取的文件,並將其上傳到一個文件中主機服務器:
http://okzqhpqwj.bkt.clouddn.com/current_14d.alp
將網址放入代碼中,一切都很好,請求不會更改爲https。爲什麼??!!
任何幫助感謝,提前感謝。
首先,如何使用iOS10發送http請求... –
HTTP到HTTPS的轉發由Web服務器完成,與應用程序本身無關。另外,爲什麼要標籤Android?最後,請向我們展示您編寫的下載代碼。 – Raptor
謝謝你,猛禽。我也測試Android版本的應用程序,請求相同的網址,並正常工作。 Android版本7.0。這也是一個我不能理解的問題,如果同一個網址,爲什麼Android可以訪問,但iOS10.0不能。 Android安全級別不同? –