### 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)

versions=versions,
                        max_results=max_results,
                        prefix=prefix_item,
                        delimiter=delimiter,
                    )
                )
        else:
            objects.extend(
                self._list(
                    bucket_name=bucket_name,
                    versions=versions,
                    max_results=max_results,
                    prefix=prefix,
                    delimiter=delimiter,
                )
            )
        return objects
    def _list(
        self,
        bucket_name: str,
        versions: bool | None = None,
        max_results: int | None = None,
        prefix: str | None = None,
        delimiter: str | None = None,
    ) -> List:
        """
        List all objects from the bucket with the give string prefix in name.
        :param bucket_name: bucket name
        :param versions: if true, list all versions of the objects
        :param max_results: max count of items to return in a single page of responses