Avatar
1
bmsg Beginner
bmsg Beginner
Xử lý cors ở Golang
Cho mình hỏi mọi người thưởng xử lý cors ở Golang như thế nào, mình đang xử dụng nginx  và  viết service  để chạy go trên server
  • Add các header cần thiết ( failed )
  • Dùng package cors  ( failed )

Rất cảm ơn mọi người

  • Answer
go cors
Remain: 5
2 Answers
Avatar
tvd12 Beginner
tvd12 Beginner
Như mình đang làm là tất cả cấu hình cors sẽ nằm ở trên nginx hết, vì nó rất tiện, có 10 con server go thì cũng chỉ cần cấu hình 1 con nginx là xong, update rổi restart cũng rất dễ
  • 0
  • Reply
bác có thể share mình cấu hình nginx của bác đc ko

mình cảm ơn bác trước

 –  bmsg 1632480994000
mình hay tham khảo ở đây bạn ạ: https://michielkalkman.com/snippets/nginx-cors-open-configuration/

Cấu hình của mình là:

location / {
     if ($request_method = 'OPTIONS') {
        add_header 'Access-Control-Allow-Origin' 'youngmonkeys.org';
        #
        # Om nom nom cookies
        #
        add_header 'Access-Control-Allow-Credentials' 'true';
        add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';

        #
        # Custom headers and headers various browsers *should* be OK with but aren't
        #
        add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';

        #
        # Tell client that this pre-flight info is valid for 20 days
        #
        add_header 'Access-Control-Max-Age' 1728000;
        add_header 'Content-Type' 'text/plain charset=UTF-8';
        add_header 'Content-Length' 0;
        return 204;
     }
     if ($request_method = 'POST') {
        add_header 'Access-Control-Allow-Origin' 'youngmonkeys.org';
        add_header 'Access-Control-Allow-Credentials' 'true';
        add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
        add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
     }
     if ($request_method = 'GET') {
        add_header 'Access-Control-Allow-Origin' 'youngmonkeys.org';
        add_header 'Access-Control-Allow-Credentials' 'true';
        add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
        add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
     }
}
</pre>
                             – 
                            
                                tvd12
                            
                            
                                1632507731000
                            
                            
                        
cho mình hỏi thêm bác config như vầy ở local call có bị dính cors ko  –  bmsg 1632522952000
Ở local thì không có nginx bạn ạ, mình connect thẳng đến go luôn  –  tvd12 1632525436000
Avatar
ducnt114 Beginner
ducnt114 Beginner
Nếu bạn muốn config CORS trong code, thì có thể tham khảo middleware này cho Gin nhé, các framework khác thì cũng gần tương tự:

// FilterCorsRequest enable cors
func FilterCorsRequest() gin.HandlerFunc {
	return func(c *gin.Context) {
		c.Header("Access-Control-Allow-Origin", "*")
		c.Header("Access-Control-Allow-Methods", "POST, GET, OPTIONS, PUT, PATCH, DELETE")
		c.Header("Access-Control-Allow-Headers", "*")
		if c.Request.Method == "OPTIONS" && len(c.GetHeader("X-Request-Method")) == 0 {
			c.AbortWithStatus(http.StatusOK)
			return
		}
		c.Next()
	}
}
  • 1
  • Reply
mình cũng có config như vậy nhưng o local mình call vẫn bị dính cors á bác , bác có gặp trường hợp ở local ko  –  bmsg 1632523036000