Alamofire:错误域= NSPOSIXErrorDomain代码= 100" iOS 11中的协议错误

时间:2017-09-26 17:17:23

标签: swift alamofire nsurlsession

运行AlamoFire 4.5 Swift 4(我的项目)

我只在iOS 11中遇到此错误。

所以我最近开始为一个正在运行的api端点停止此错误:

Error Domain=NSPOSIXErrorDomain Code=100 "Protocol error" UserInfo={NSErrorPeerAddressKey=<CFData 0x1c40913f0 [0x1b2c04240]>{length = 16, capacity = 16, bytes = 0x100201bb36aec68a0000000000000000}, _kCFStreamErrorCodeKey=100, _kCFStreamErrorDomainKey=1}

这是我如何提出请求的主旨:

let urlPath = "SOME_PATH"
var params = [String:Any]()
params["app_version"] = version
params["apnsEnabled"] = apnsEnabled
params["ios_version"] = DeviceInfo.getIOSVersion()
params["model_name"] = UIDevice.current.modelName

let request = AFSessionManager.shared.manager.request(urlPath, method: HTTPMethod.get,  parameters: params as Parameters, headers: ["requested-domain":ServerDomain.get()!] as HTTPHeaders)

request.responseJSON{ response in
            if response.result.error == nil{
                 //DO STUFF               
            }else{
                 //HANDLE ERROR
            }
}

编辑:

我最后只用URLSession尝试了这个:

func ping(){

    let session = URLSession(configuration: URLSessionConfiguration.default)

    let request = URLRequest(url: URL(string: "MY_PING_URL_STRING")!)

    let task: URLSessionDataTask = session.dataTask(with: request) { (data, response, error) -> Void in

        guard error == nil else {
            //Handle Error
            return
        }

        //DO STUFF
    }
    task.resume()
}

仅使用URLSession仍然出现协议错误。

此外,在MacOS High Sierra上的Safari中收到此错误。

1 个答案:

答案 0 :(得分:1)

我经过苹果并得到了一些帮助。以下是他们的回复:

  

服务器在响应中发送“upgrade”标头。这是http请求中使用的标头,我们的内部实现不允许将其作为响应标头。删除或使用标题的其他名称(如果仍需要将此信息传递给客户端)将解决问题。

事实证明,Apache在标题中以upgrade响应,告诉客户端升级到http / 2。但是,使用SSL / TLS时会中断。以下是关于Apache bugzilla的讨论。即使客户端使用http / 2,它看起来也总是被发送upgrade标题。

您可以通过将其放入主机配置中删除Apache中的标头:

Header unset Upgrade