### Description

When a file is uploaded to GCS, [by default](https://cloud.google.com/storage/docs/metadata#cache-control), public files will get `Cache-Control: public, max-age=3600`.

I've tried setting `cors` for the whole bucket (didn't work) and setting `Cache-Control` on individual file (disappears on file re-upload from airflow)

Setting `metadata` for GCSHook is for different field (can't be used to set cache-control)

### Use case/motivation

Allow GCSHook to set cache control rather than overriding the `upload` function

### Related issues

_No response_

### Are you willing to submit a PR?

- [X] Yes I am willing to submit a PR!

### Code of Conduct

- [X] I agree to follow this project's [Code of Conduct](https://github.com/apache/airflow/blob/main/CODE_OF_CONDUCT.md)

from typing import IO, Callable, Generator, Sequence, TypeVar, cast, overload
from urllib.parse import urlsplit
from aiohttp import ClientSession
from gcloud.aio.storage import Storage
from google.api_core.exceptions import NotFound
from google.api_core.retry import Retry
from google.cloud import storage  
from google.cloud.exceptions import GoogleCloudError
from google.cloud.storage.retry import DEFAULT_RETRY
from requests import Session
from airflow.exceptions import AirflowException
from airflow.providers.google.cloud.utils.helpers import normalize_directory_path
from airflow.providers.google.common.consts import CLIENT_INFO
from airflow.providers.google.common.hooks.base_google import GoogleBaseAsyncHook, GoogleBaseHook
from airflow.utils import timezone
from airflow.version import version
try:
    
    from airflow.typing_compat import ParamSpec
except ImportError:
    try:
        from typing import ParamSpec  
    except ImportError:
        from typing_extensions import ParamSpec
RT = TypeVar("RT")
T = TypeVar("T", bound=Callable)
FParams = ParamSpec("FParams")
List = list
DEFAULT_TIMEOUT = 60
def _fallback_object_url_to_object_name_and_bucket_name(