MM-48924 Don't cache remote_entry.js files (#21817)
* MM-48924 Don't cache remote_entry.js files * Change caching of remote_entry.js to match root.html
Этот коммит содержится в:
коммит произвёл
GitHub
родитель
242d7a4466
Коммит
29f29b1e5e
@@ -81,7 +81,11 @@ func staticFilesHandler(handler http.Handler) http.Handler {
|
|||||||
//wrap our ResponseWriter with our no-cache 404-handler
|
//wrap our ResponseWriter with our no-cache 404-handler
|
||||||
w = ¬FoundNoCacheResponseWriter{ResponseWriter: w}
|
w = ¬FoundNoCacheResponseWriter{ResponseWriter: w}
|
||||||
|
|
||||||
w.Header().Set("Cache-Control", "max-age=31556926, public")
|
if path.Base(r.URL.Path) == "remote_entry.js" {
|
||||||
|
w.Header().Set("Cache-Control", "no-cache, max-age=31556926, public")
|
||||||
|
} else {
|
||||||
|
w.Header().Set("Cache-Control", "max-age=31556926, public")
|
||||||
|
}
|
||||||
|
|
||||||
if strings.HasSuffix(r.URL.Path, "/") {
|
if strings.HasSuffix(r.URL.Path, "/") {
|
||||||
http.NotFound(w, r)
|
http.NotFound(w, r)
|
||||||
|
|||||||
@@ -8,6 +8,8 @@ import (
|
|||||||
"net/http"
|
"net/http"
|
||||||
"net/http/httptest"
|
"net/http/httptest"
|
||||||
"os"
|
"os"
|
||||||
|
"os/exec"
|
||||||
|
"path"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
@@ -359,6 +361,65 @@ func TestStatic(t *testing.T) {
|
|||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
func TestStaticFilesCaching(t *testing.T) {
|
||||||
|
th := Setup(t).InitPlugins()
|
||||||
|
defer th.TearDown()
|
||||||
|
|
||||||
|
wd, _ := os.Getwd()
|
||||||
|
cmd := exec.Command("ls", path.Join(wd, "client", "plugins"))
|
||||||
|
cmd.Stdout = os.Stdout
|
||||||
|
cmd.Run()
|
||||||
|
|
||||||
|
fakeMainBundleName := "main.1234ab.js"
|
||||||
|
fakeRootHTML := `<html>
|
||||||
|
<head>
|
||||||
|
<title>Mattermost</title>
|
||||||
|
</head>
|
||||||
|
</html>`
|
||||||
|
fakeMainBundle := `module.exports = 'main';`
|
||||||
|
fakeRemoteEntry := `module.exports = 'remote';`
|
||||||
|
|
||||||
|
err := os.WriteFile("./client/root.html", []byte(fakeRootHTML), 0600)
|
||||||
|
require.NoError(t, err)
|
||||||
|
err = os.WriteFile("./client/"+fakeMainBundleName, []byte(fakeMainBundle), 0600)
|
||||||
|
require.NoError(t, err)
|
||||||
|
err = os.WriteFile("./client/remote_entry.js", []byte(fakeRemoteEntry), 0600)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
err = os.MkdirAll("./client/products/boards", 0777)
|
||||||
|
require.NoError(t, err)
|
||||||
|
err = os.WriteFile("./client/products/boards/remote_entry.js", []byte(fakeRemoteEntry), 0600)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
req, _ := http.NewRequest("GET", "/", nil)
|
||||||
|
res := httptest.NewRecorder()
|
||||||
|
th.Web.MainRouter.ServeHTTP(res, req)
|
||||||
|
require.Equal(t, http.StatusOK, res.Code)
|
||||||
|
require.Equal(t, fakeRootHTML, res.Body.String())
|
||||||
|
require.Equal(t, []string{"no-cache, max-age=31556926, public"}, res.Result().Header[http.CanonicalHeaderKey("Cache-Control")])
|
||||||
|
|
||||||
|
req, _ = http.NewRequest("GET", "/static/"+fakeMainBundleName, nil)
|
||||||
|
res = httptest.NewRecorder()
|
||||||
|
th.Web.MainRouter.ServeHTTP(res, req)
|
||||||
|
require.Equal(t, http.StatusOK, res.Code)
|
||||||
|
require.Equal(t, fakeMainBundle, res.Body.String())
|
||||||
|
require.Equal(t, []string{"max-age=31556926, public"}, res.Result().Header[http.CanonicalHeaderKey("Cache-Control")])
|
||||||
|
|
||||||
|
req, _ = http.NewRequest("GET", "/static/remote_entry.js", nil)
|
||||||
|
res = httptest.NewRecorder()
|
||||||
|
th.Web.MainRouter.ServeHTTP(res, req)
|
||||||
|
require.Equal(t, http.StatusOK, res.Code)
|
||||||
|
require.Equal(t, fakeRemoteEntry, res.Body.String())
|
||||||
|
require.Equal(t, []string{"no-cache, max-age=31556926, public"}, res.Result().Header[http.CanonicalHeaderKey("Cache-Control")])
|
||||||
|
|
||||||
|
req, _ = http.NewRequest("GET", "/static/products/boards/remote_entry.js", nil)
|
||||||
|
res = httptest.NewRecorder()
|
||||||
|
th.Web.MainRouter.ServeHTTP(res, req)
|
||||||
|
require.Equal(t, http.StatusOK, res.Code)
|
||||||
|
require.Equal(t, fakeRemoteEntry, res.Body.String())
|
||||||
|
require.Equal(t, []string{"no-cache, max-age=31556926, public"}, res.Result().Header[http.CanonicalHeaderKey("Cache-Control")])
|
||||||
|
}
|
||||||
|
|
||||||
func TestCheckClientCompatability(t *testing.T) {
|
func TestCheckClientCompatability(t *testing.T) {
|
||||||
//Browser Name, UA String, expected result (if the browser should fail the test false and if it should pass the true)
|
//Browser Name, UA String, expected result (if the browser should fail the test false and if it should pass the true)
|
||||||
type uaTest struct {
|
type uaTest struct {
|
||||||
|
|||||||
Ссылка в новой задаче
Block a user