 					guard let errorResponse = errorResponse else {
 						let requestData = dataCacheProvider.getData()
 						
-						if urlRequest.httpMethod == HttpMethod.get.rawValue, requestCacheMode.cacheResponse, let url = urlRequest.url  {
+						if requestCacheMode.shouldCache(urlRequest), requestCacheMode.cacheResponse, let url = urlRequest.url  {
 							// sache response
 							self?.urlRequestCacheProvider?.save(resourceUrl: url, data: requestData)
 						}

	public let returnCachedResponse: Bool
	/// If true, HttpClient will invoke request
	public let invokeRequest: Bool
	
	public init(cacheResponse: Bool = true, returnCachedResponse: Bool = true, invokeRequest: Bool = true) {
		self.cacheResponse = cacheResponse
		self.returnCachedResponse = returnCachedResponse
		self.invokeRequest = invokeRequest
	}
	
	/// Only cached response will be returned

	public static let `default` = CacheMode(cacheResponse: true, returnCachedResponse: true, invokeRequest: true)
}

extension CacheMode {
    func shouldCache(_ request: URLRequest) -> Bool {
        guard let raw = request.httpMethod else { return false }
        guard let method = HttpMethod(rawValue: raw) else { return false }
        return cacheHttpMethods.contains(method)
    }
}

public extension HttpClientType {
	/**
	Creates StreamDataTask
