Alamofire在HTTPS上运行缓慢,但在HTTP上运行良好

在我的应用中有多个Apis。我有两个differnet服务器,一个用于HTTP,一个用于HTTPS 当我在Http上运行我的应用程序时:对于每个Api,第一次运行正常,对于每个Api相同的响应时间,则运行2秒。 但是当我在https上运行App时:第一次为每个APi花费额外的时间为每个Api进行操作,那么如果我再次击中相同的Api,则速度很快。问题是为什么每个APi第一次运行缓慢还是要花费额外的时间。但是Android App不会发生任何事情。

这是“我的请求”构建器类:URLRequestBuilder.swift

import Foundation
import Alamofire

protocol URLRequestBuilder: URLRequestConvertible,APIRequestHandler {

    var mainURL: URL { get }
    var requestURL: URL { get }
    var path: String { get  }
    var parameters: Parameters? { get }
    var method: HTTPMethod { get }
    var encoding: ParameterEncoding { get }
    var urlRequest: URLRequest { get }
}

extension URLRequestBuilder {

    var encoding: ParameterEncoding {
        switch method {
        case .get:
            return URLEncoding.default

        default:
            return JSONEncoding.default
        }
    }

    var mainURL: URL  {
        return URL(string: SERVER_URL)!
    }

    var requestURL: URL {
        var fullURL  = mainURL.absoluteString + path

        if L102Language.currentAppleLanguage() == "ar" && path.contains("?") {
            fullURL = fullURL + "&blLocaleCode=ar"
        } else  if L102Language.currentAppleLanguage() == "ar" {
            fullURL = fullURL + "?blLocaleCode=ar"
        }
        let urlComponents = URLComponents(string: fullURL)!
        return urlComponents.url!
    }

    var urlRequest: URLRequest {
        var request = URLRequest(url: requestURL)
        request.httpMethod = method.rawValue

        if UserDefaults.standard.isUserLoggedIn()  {
            request.setvalue(UserDefaults.standard.getaccessToken(),forHTTPHeaderField:  NETWORK_accESS_TOKEN)
        }
        request.setvalue(NETWORK_REQUEST_TYPE,forHTTPHeaderField:  NETWORK_accEPT)
        request.setvalue(NETWORK_REQUEST_TYPE,forHTTPHeaderField:  NETWORK_CONTENT_TYPE)
        //request.cachePolicy = .useProtocolCachePolicy
        return request
    }

    func asURLRequest() throws -> URLRequest {
        return try encoding.encode(urlRequest,with: parameters)
    }
}


final class NetworkClient {

    let evaluators = [
        "somehttpsURL.com": ServerTrustPolicy.pinCertificates(
            certificates:  [Certificates.stackExchange],validateCertificateChain: true,validateHost: true)
    ]
    let session: Sessionmanager

    // 2
    private init() {

        session = Sessionmanager(
        serverTrustPolicyManager: ServerTrustPolicyManager(policies: evaluators))
    }

    // MARK: - Static Definitions

    private static let shared = NetworkClient()

    static func request(_ convertible: URLRequestConvertible) -> DataRequest {
        return shared.session.request(convertible)
    }
}

struct Certificates {
    static let stackExchange =
    Certificates.certificate(filename: "certificate") 

    private static func certificate(filename: String) -> SecCertificate {
        let filePath = Bundle.main.path(forResource: filename,ofType: "der")!
        let data = try? Data(contentsof: URL(fileURLWithPath: filePath))
        let certificate = SecCertificateCreateWithData(nil,data! as cfdata)!
        return certificate
    }
}

我的请求处理程序类是:

extension APIRequestHandler where Self : URLRequestBuilder {
   // For Response Object
   func send<T: AnyObject>(modelType: T.Type,data: [UIImage]? = nil,success: @escaping ( _ servicResponse: AnyObject) -> Void,fail: @escaping ( _ error: NSError) -> Void,showHUD: Bool)  where T: Mappable {
        if let data = data {
            uploadToServerWith(modelType: modelType,images: data,request: self,parameters: self.parameters,success: success,fail: fail)
        } else {
            //print(requestURL.absoluteString)
            // NetworkClient.
          request(self).authenticate(user: Apiauthencationusername,password: ApiauthencationPassword).validate().responseObject { (response: DataResponse<T>) in
               switch response.result {
               case .success(let objectData):
                  success(objectData)
                  break
               case .failure(let error):
                  print(error.localizedDescription)
                  if error.localizedDescription == RefreshTokenFailed {
                      self.getaccessTokenAPI(completion: { (value) in
                          if value == TOKEN_SAVED {
                               self.send(modelType: modelType,fail: fail,showHUD: showHUD)
                              return
                          }else {
                              fail(error as NSError)
                          }
                      })
                  } else {
                      fail(error as NSError)
                  }
              }
          }
      }
  }
}
canjiahuiyi 回答:Alamofire在HTTPS上运行缓慢,但在HTTP上运行良好

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3082781.html

大家都在问