github.com/insionng/yougam@v0.0.0-20170714101924-2bc18d833463/libraries/igm/sockjs-go.v2/sockjs/iframe.go (about) 1 package sockjs 2 3 import ( 4 "crypto/md5" 5 "fmt" 6 "net/http" 7 "text/template" 8 ) 9 10 var tmpl = template.Must(template.New("iframe").Parse(iframeBody)) 11 12 func (h *handler) iframe(rw http.ResponseWriter, req *http.Request) { 13 etagReq := req.Header.Get("If-None-Match") 14 hash := md5.New() 15 hash.Write([]byte(iframeBody)) 16 etag := fmt.Sprintf("%x", hash.Sum(nil)) 17 if etag == etagReq { 18 rw.WriteHeader(http.StatusNotModified) 19 return 20 } 21 22 rw.Header().Set("Content-Type", "text/html; charset=UTF-8") 23 rw.Header().Add("ETag", etag) 24 tmpl.Execute(rw, h.options.SockJSURL) 25 } 26 27 var iframeBody = `<!DOCTYPE html> 28 <html> 29 <head> 30 <meta http-equiv="X-UA-Compatible" content="IE=edge" /> 31 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 32 <script> 33 document.domain = document.domain; 34 _sockjs_onload = function(){SockJS.bootstrap_iframe();}; 35 </script> 36 <script src="{{.}}"></script> 37 </head> 38 <body> 39 <h2>Don't panic!</h2> 40 <p>This is a SockJS hidden iframe. It's used for cross domain magic.</p> 41 </body> 42 </html>`