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

destination_object = destination_object or source_object
        if source_bucket == destination_bucket and source_object == destination_object:
            raise ValueError(
                f"Either source/destination bucket or source/destination object must be different, "
                f"not both the same: bucket={source_bucket}, object={source_object}"
            )
        if not source_bucket or not source_object:
            raise ValueError("source_bucket and source_object cannot be empty.")
        client = self.get_conn()
        source_bucket = client.bucket(source_bucket)
        source_object = source_bucket.blob(blob_name=source_object)  
        destination_bucket = client.bucket(destination_bucket)
        token, bytes_rewritten, total_bytes = destination_bucket.blob(  
            blob_name=destination_object
        ).rewrite(source=source_object)
        self.log.info("Total Bytes: %s | Bytes Written: %s", total_bytes, bytes_rewritten)
        while token is not None:
            token, bytes_rewritten, total_bytes = destination_bucket.blob(  
                blob_name=destination_object
            ).rewrite(source=source_object, token=token)
            self.log.info("Total Bytes: %s | Bytes Written: %s", total_bytes, bytes_rewritten)
        self.log.info(
            "Object %s in bucket %s rewritten to object %s in bucket %s",
            source_object.name,  
            source_bucket.name,  
            destination_object,
            destination_bucket.name,  
        )
    @overload
    def download(