Browse Source

chore(cors): more explanation for flush in ServeHTTP

Yicheng Qin 11 years ago
parent
commit
fb17ccf5ee
1 changed files with 4 additions and 3 deletions
  1. 4 3
      http/cors.go

+ 4 - 3
http/cors.go

@@ -59,6 +59,10 @@ func (h *CORSHandler) addHeader(w http.ResponseWriter, origin string) {
 // ServeHTTP adds the correct CORS headers based on the origin and returns immediately
 // with a 200 OK if the method is OPTIONS.
 func (h *CORSHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) {
+	// It is important to flush before leaving the goroutine.
+	// Or it may miss the latest info written.
+	defer w.(http.Flusher).Flush()
+
 	// Write CORS header.
 	if h.Info.OriginAllowed("*") {
 		h.addHeader(w, "*")
@@ -72,7 +76,4 @@ func (h *CORSHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) {
 	}
 
 	h.Handler.ServeHTTP(w, req)
-
-	// Flush before leaving to send out all data.
-	w.(http.Flusher).Flush()
 }