server/rest: compress api calls
Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
This commit is contained in:
		
				
					committed by
					
						 Thomas Lamprecht
						Thomas Lamprecht
					
				
			
			
				
	
			
			
			
						parent
						
							4d84e869bf
						
					
				
				
					commit
					2f29f1c765
				
			| @ -39,7 +39,7 @@ use crate::api2::types::{Authid, Userid}; | |||||||
| use crate::auth_helpers::*; | use crate::auth_helpers::*; | ||||||
| use crate::config::cached_user_info::CachedUserInfo; | use crate::config::cached_user_info::CachedUserInfo; | ||||||
| use crate::tools; | use crate::tools; | ||||||
| use crate::tools::compression::CompressionMethod; | use crate::tools::compression::{CompressionMethod, DeflateEncoder, Level}; | ||||||
| use crate::tools::FileLogger; | use crate::tools::FileLogger; | ||||||
|  |  | ||||||
| extern "C" { | extern "C" { | ||||||
| @ -397,6 +397,7 @@ pub async fn handle_api_request<Env: RpcEnvironment, S: 'static + BuildHasher + | |||||||
|     uri_param: HashMap<String, String, S>, |     uri_param: HashMap<String, String, S>, | ||||||
| ) -> Result<Response<Body>, Error> { | ) -> Result<Response<Body>, Error> { | ||||||
|     let delay_unauth_time = std::time::Instant::now() + std::time::Duration::from_millis(3000); |     let delay_unauth_time = std::time::Instant::now() + std::time::Duration::from_millis(3000); | ||||||
|  |     let compression = extract_compression_method(&parts.headers); | ||||||
|  |  | ||||||
|     let result = match info.handler { |     let result = match info.handler { | ||||||
|         ApiHandler::AsyncHttp(handler) => { |         ApiHandler::AsyncHttp(handler) => { | ||||||
| @ -417,7 +418,7 @@ pub async fn handle_api_request<Env: RpcEnvironment, S: 'static + BuildHasher + | |||||||
|         } |         } | ||||||
|     }; |     }; | ||||||
|  |  | ||||||
|     let resp = match result { |     let mut resp = match result { | ||||||
|         Ok(resp) => resp, |         Ok(resp) => resp, | ||||||
|         Err(err) => { |         Err(err) => { | ||||||
|             if let Some(httperr) = err.downcast_ref::<HttpError>() { |             if let Some(httperr) = err.downcast_ref::<HttpError>() { | ||||||
| @ -429,6 +430,24 @@ pub async fn handle_api_request<Env: RpcEnvironment, S: 'static + BuildHasher + | |||||||
|         } |         } | ||||||
|     }; |     }; | ||||||
|  |  | ||||||
|  |     let resp = match compression { | ||||||
|  |         Some(CompressionMethod::Deflate) => { | ||||||
|  |             resp.headers_mut().insert( | ||||||
|  |                 header::CONTENT_ENCODING, | ||||||
|  |                 CompressionMethod::Deflate.content_encoding(), | ||||||
|  |             ); | ||||||
|  |             resp.map(|body| { | ||||||
|  |                 Body::wrap_stream(DeflateEncoder::with_quality( | ||||||
|  |                     body.map_err(|err| { | ||||||
|  |                         proxmox::io_format_err!("error during compression: {}", err) | ||||||
|  |                     }), | ||||||
|  |                     Level::Fastest, | ||||||
|  |                 )) | ||||||
|  |             }) | ||||||
|  |         } | ||||||
|  |         None => resp, | ||||||
|  |     }; | ||||||
|  |  | ||||||
|     if info.reload_timezone { |     if info.reload_timezone { | ||||||
|         unsafe { |         unsafe { | ||||||
|             tzset(); |             tzset(); | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user