티스토리 뷰
출처
NSURLSession
개념
URL 스키마 (앱의 비공개 용)를 추가할 수 있다.
Session
sharedSession
defaultSessionConfiguration:
ephemeralSessionConfiguration:
backgroundSessionConfiguration:
Session 객체는 app 종료나 명시적인 session invalidates 를 호출하기 전까지 delegate 에 대한 strong reference 를 가진다. session 을 invalidate 를 시키지 않으면 메모리 leak 이 발생할 수 있다. |
Tasks
NSURLDataTask
NSURLUploadTask
NSURLDownloadTask
URLSession Class Hierarchy
NSURLSession
NSURLSessionTask
NSURLSessionTask- 세션 내 작업의 기본 클래스
NSURLSessionDataTask - URL의 내용을 NSData 객체로 가져 오는task
NSURLSessionUploadTask - 파일을 업로드 한 다음 URL의 내용을 NSData 객체로 가져 오는 task
NSURLSessionDownloadTask - 디스크의 임시 파일로 URL의 내용을 검색하는 task
NSURLSessionStreamTask - TCP / IP 연결을 설정하는 task
NSURLSessionDelegate
NSURLSessionDelegate- 세션 수준 이벤트를 처리하는 delegate
NSURLSessionTaskDelegate- 모든 작업 유형에 공통된 작업 수준 이벤트를 처리하는 delegate
NSURLSessionDataDelegate- 데이터 및 업로드 작업과 관련된 작업 수준 이벤트를 처리하는 delegate
NSURLSessionDownloadDelegate- 다운로드 작업과 관련된 작업 수준 이벤트를 처리하는 delegate
NSURLSessionStreamDelegate- 스트림 작업과 관련된 작업 수준 이벤트를 처리하는 delegate
마지막으로 NSURLSession API는 NSURLConnection 및 NSURLDownload와 같은
다른 API와 공통으로 사용되는 많은 클래스를 사용한다.
아래는 공유되는 클래스 중 일부이다.
NSURL- URL이 포함된 Object
NSURLRequest - URL, 요청 메소드 등 URL 요청과 관련된 메타 데이터를 캡슐화한다.
NSURLResponse- 콘텐츠 MIME 유형 및 길이와 같은 요청에 대한 서버의 응답과 관련된 메타 데이터를 캡슐화한다.
NSHTTPURLResponse- 응답 헤더와 같은 HTTP 요청에 특정한 추가 메타 데이터를 추가한다.
NSCachedURLResponse - 캐싱 목적으로 서버 응답의 실제 본문 데이터와 함께 NSURLResponse 개체를 캡슐화한다.
Authentication and TLS Customization
서버가 TLS 협상 중에 인증을 요청하거나 자격 증명을 제공하면
URL 세션은 delegate 를 호출하여 사용자 지정 방식으로 인증 또는 인증서 유효성 검사를 처리한다.
호출 방법은 task 관련 challenge 인지 session 전체 challenge 에 따라 달라진다.
Task-specific challenges |
Session-wide challenges |
NSURLAuthenticationMethodDefault |
NSURLAuthenticationMethodNTLM |
NSURLAuthenticationMethodHTTPBasic |
NSURLAuthenticationMethodNegotiate |
NSURLAuthenticationMethodHTTPDigest |
NSURLAuthenticationMethodClientCertificate |
NSURLAuthenticationMethodServerTrust |
Task-specific challenges 의 경우 session 에서
URLSession : task : didReceiveChallenge : completionHandler : delegate method 를 호출한다.
Session-wide challenges 에서는 session 에서
URLSession : didReceiveChallenge : completionHandler : delegate method 를 호출한다.
위 메소드가 구현 되어있지 않으면
URLSession : task : didReceiveChallenge : completionHandler : delegate method 를 호출한다.
위 메소드들이 모두 구현되어있지 않으면 request 에 클라이언트 인증이 필요한 경우
URL session 은 다음과 같이 인증을 시도한다.
1. 요청된 URL 의 일부로 제공된 인증정보 사용
2. 앱의 키 체인에서 인터넷 비밀번호와 인증서를 검색하여 사용
위 자격 증명을 사용할 수 없거나 서버가 자격 증명을 거부하면
연결이 인증없이 계속된다.
HTTP 및 HTTPS 요청의 경우 연결 시도가 적절한 HTTP 상태 코드와 함께 실패하고
대체 콘텐츠를 제공할 수 있다.
다른 URL 의 경우 (ex. FTP) 연결이 실패하면 실패처리된다.
App Transport Security (ATS)
iOS 9부터 도입된 개념으로 새로운 보안 기능이다.
ATS 는 HTTP 연결이 HTTPS (RFC 2818) 을 사용해야함을 요구한다.
더 자세한 내용은 아래 링크를 참고한다.
- NSApptransportSecurity
https://developer.apple.com/library/content/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html#//apple_ref/doc/uid/TP40009251-SW33 - Information Property List Key Reference
https://developer.apple.com/library/content/documentation/General/Reference/InfoPlistKeyReference/Introduction/Introduction.html#//apple_ref/doc/uid/TP40009247 - http://beankhan.tistory.com/23
'iOS 개발 > iOS' 카테고리의 다른 글
[iOS] KeyChain 의 Key (SecKeyRef) 를 NSData 형식으로 변경하기 (0) | 2017.06.22 |
---|---|
[iOS] iCloud Backup 이 되지 않도록 막는 방법 (0) | 2017.06.21 |
[iOS] dispatch_group_notify 의 사용법 (0) | 2017.04.28 |
dispatch_queue 의 sync, async 와 Thread 의 관계 (1) | 2017.02.23 |
[iOS] Carthage 의 장점 및 사용법 (0) | 2017.02.01 |
- Total
- Today
- Yesterday
- NSManagedObjectContext
- ios
- Block
- Swift3
- Swift 3
- Swift 3.0
- applicationWillResignActive
- coredata
- CIImage
- 읽기 좋은 코드가 좋은 코드다
- Swfit
- dictionary
- Swift
- NSManagedObject
- AWS
- EffectiveObjectiveC
- UIView
- workerThread
- string
- NSManagedObjectModel
- optional
- RunLoop
- set
- Arc
- CGImage
- thread
- HTTP
- 꺼내먹어요
- docker
- delegate
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |