Making an HTTPS request more readable
to answer your questions first:


you don't need begin/end if it covers whole method, you can rescue directly from method,
Net::HTTP already handles timeout, no need to build custom wrapper around it,


now there are few other things that should be addressed: 


inline things when possible
don't use @@ ever, use constants if you need to
don't rescue from Exception, rescue from StandardError instead (or nothing as ruby defaults to StandardError anyways)
try to be consistent with returned result, i.e. header should always return hash, never nil. Otherwise you will need to add conditions in places where you handle code
OpenSSL::SSL::VERIFY_NONE this is bad, you want to verify certificate.
do not use Net::HTTP, there are much more rubout gems available, i.e. Typhoeus


Finally it could be rewritten to something like this:

def https_request(server_url, header, content)
  hack_ssl_options
  uri = URI.parse(server_url)

  connection = Net::HTTP.new(uri.host, uri.port)
  connection.use_ssl = true
  connection.ssl_options = OpenSSL::SSL::OP_NO_SSLv2 + OpenSSL::SSL::OP_NO_SSLv3 + OpenSSL::SSL::OP_NO_COMPRESSION
  connection.verify_mode = OpenSSL::SSL::VERIFY_NONE
  connection.read_timeout = TIMEOUT_PERIOD

  request = Net::HTTP::Post.new(uri.path, initheader = header)
  request.body = content

  response = connection.request(req)

  { code: response.code, header: response.to_hash, body: response.body }
rescue Net::ReadTimeout =&gt; e  
  { code: CODE_TIMEOUT, header: {}, body: e.message }
rescue =&gt; e
  { code: CODE_UNKNOWN, header: {}, body: e.message }
end


This code works slightly different from your original version, you may need to adjust it.