mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-26 12:27:06 +00:00 
			
		
		
		
	Backport #30796 by wxiaoguang Co-authored-by: wxiaoguang <wxiaoguang@gmail.com> Co-authored-by: silverwind <me@silverwind.io>
This commit is contained in:
		| @@ -17,11 +17,14 @@ import ( | |||||||
| 	"time" | 	"time" | ||||||
|  |  | ||||||
| 	charsetModule "code.gitea.io/gitea/modules/charset" | 	charsetModule "code.gitea.io/gitea/modules/charset" | ||||||
|  | 	"code.gitea.io/gitea/modules/container" | ||||||
| 	"code.gitea.io/gitea/modules/httpcache" | 	"code.gitea.io/gitea/modules/httpcache" | ||||||
| 	"code.gitea.io/gitea/modules/log" | 	"code.gitea.io/gitea/modules/log" | ||||||
| 	"code.gitea.io/gitea/modules/setting" | 	"code.gitea.io/gitea/modules/setting" | ||||||
| 	"code.gitea.io/gitea/modules/typesniffer" | 	"code.gitea.io/gitea/modules/typesniffer" | ||||||
| 	"code.gitea.io/gitea/modules/util" | 	"code.gitea.io/gitea/modules/util" | ||||||
|  |  | ||||||
|  | 	"github.com/klauspost/compress/gzhttp" | ||||||
| ) | ) | ||||||
|  |  | ||||||
| type ServeHeaderOptions struct { | type ServeHeaderOptions struct { | ||||||
| @@ -38,6 +41,11 @@ type ServeHeaderOptions struct { | |||||||
| func ServeSetHeaders(w http.ResponseWriter, opts *ServeHeaderOptions) { | func ServeSetHeaders(w http.ResponseWriter, opts *ServeHeaderOptions) { | ||||||
| 	header := w.Header() | 	header := w.Header() | ||||||
|  |  | ||||||
|  | 	skipCompressionExts := container.SetOf(".gz", ".bz2", ".zip", ".xz", ".zst", ".deb", ".apk", ".jar", ".png", ".jpg", ".webp") | ||||||
|  | 	if skipCompressionExts.Contains(strings.ToLower(path.Ext(opts.Filename))) { | ||||||
|  | 		w.Header().Add(gzhttp.HeaderNoCompression, "1") | ||||||
|  | 	} | ||||||
|  |  | ||||||
| 	contentType := typesniffer.ApplicationOctetStream | 	contentType := typesniffer.ApplicationOctetStream | ||||||
| 	if opts.ContentType != "" { | 	if opts.ContentType != "" { | ||||||
| 		if opts.ContentTypeCharset != "" { | 		if opts.ContentTypeCharset != "" { | ||||||
|   | |||||||
| @@ -54,7 +54,7 @@ import ( | |||||||
| 	"github.com/prometheus/client_golang/prometheus" | 	"github.com/prometheus/client_golang/prometheus" | ||||||
| ) | ) | ||||||
|  |  | ||||||
| const GzipMinSize = 1400 // min size to compress for the body size of response | var GzipMinSize = 1400 // min size to compress for the body size of response | ||||||
|  |  | ||||||
| // optionsCorsHandler return a http handler which sets CORS options if enabled by config, it blocks non-CORS OPTIONS requests. | // optionsCorsHandler return a http handler which sets CORS options if enabled by config, it blocks non-CORS OPTIONS requests. | ||||||
| func optionsCorsHandler() func(next http.Handler) http.Handler { | func optionsCorsHandler() func(next http.Handler) http.Handler { | ||||||
|   | |||||||
							
								
								
									
										33
									
								
								tests/integration/repo_archive_test.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								tests/integration/repo_archive_test.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,33 @@ | |||||||
|  | // Copyright 2024 The Gitea Authors. All rights reserved. | ||||||
|  | // SPDX-License-Identifier: MIT | ||||||
|  |  | ||||||
|  | package integration | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  | 	"io" | ||||||
|  | 	"net/http" | ||||||
|  | 	"testing" | ||||||
|  |  | ||||||
|  | 	"code.gitea.io/gitea/modules/setting" | ||||||
|  | 	"code.gitea.io/gitea/modules/test" | ||||||
|  | 	"code.gitea.io/gitea/routers" | ||||||
|  | 	"code.gitea.io/gitea/routers/web" | ||||||
|  | 	"code.gitea.io/gitea/tests" | ||||||
|  |  | ||||||
|  | 	"github.com/stretchr/testify/assert" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | func TestRepoDownloadArchive(t *testing.T) { | ||||||
|  | 	defer tests.PrepareTestEnv(t)() | ||||||
|  | 	defer test.MockVariableValue(&setting.EnableGzip, true)() | ||||||
|  | 	defer test.MockVariableValue(&web.GzipMinSize, 10)() | ||||||
|  | 	defer test.MockVariableValue(&testWebRoutes, routers.NormalRoutes())() | ||||||
|  |  | ||||||
|  | 	req := NewRequest(t, "GET", "/user2/repo1/archive/master.zip") | ||||||
|  | 	req.Header.Set("Accept-Encoding", "gzip") | ||||||
|  | 	resp := MakeRequest(t, req, http.StatusOK) | ||||||
|  | 	bs, err := io.ReadAll(resp.Body) | ||||||
|  | 	assert.NoError(t, err) | ||||||
|  | 	assert.Empty(t, resp.Header().Get("Content-Encoding")) | ||||||
|  | 	assert.Equal(t, 320, len(bs)) | ||||||
|  | } | ||||||
		Reference in New Issue
	
	Block a user
	 Giteabot
					Giteabot