長沙網(wǎng)站搭建百度引流推廣費用多少
我前端使用ant design vue pro框架,后端使用kratos框架開發(fā)。因為之前也解決過跨域問題,正常是在后端的http請求中加入中間件,設置跨域需要通過的字段即可,代碼如下所示:
func NewHTTPServer(c *conf.Server, s *conf.Secret, rolesm *service.RolesManageService, tracer trace.TracerProvider, logger log.Logger) *http.Server {var opts = []http.ServerOption{http.Middleware(recovery.Recovery(),tracing.Server(tracing.WithTracerProvider(tracer)),logging.Server(logger),validate.Validator(),metadata.Server(),LocalHttpRequestMiddleware(),selector.Server(jwt.Server(func(token *jwtv5.Token) (interface{}, error) {return []byte(s.Bigantauthen), nil}, jwt.WithSigningMethod(jwtv5.SigningMethodHS256)),).Match(NewWhiteListMatcher()).Build(),),
// 下面需要解決跨域問題的字段http.Filter(handlers.CORS(handlers.AllowedHeaders([]string{"X-Requested-With", "Content-Type", "Authorization"}),handlers.AllowedMethods([]string{"GET", "POST", "HEAD", "OPTIONS", "PUT", "DELETE"}),handlers.AllowedOrigins([]string{"*"}),handlers.AllowCredentials(), // 允許攜帶憑證(如 cookies))
之前可以正常運行,但是我在前端設計時,在登錄請求后的請求中,在頭部信息加入了一個自定義字段,為了后端獲取后檢索緩存信息,這樣就不用反復從數(shù)據(jù)庫查詢了。想法是這個樣子但是測試中就開始報錯了,報的是跨域錯誤,代碼如下。
Access to XMLHttpRequest at 'http://localhost:8002/user/info' from origin 'http://localhost:8000' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.
但奇怪的是前面login的請求可以正常通過,后面的userinfo請求就拒絕了。我就在想,要是跨域問題,就應該所有請求都拒絕呀,不應該選擇性拒絕呀,而且我后端也沒做相關的請求過濾的語句,報錯的有點蹊蹺。
我于是開始問DeepSeek。它給我的回答和之前設置的內(nèi)容一樣。要不就在前端做代理,如下代碼所示,對vue.config.js做相關修改。
module.exports = {devServer: {proxy: {'/api': {target: 'http://localhost:8002', // 后端地址changeOrigin: true,pathRewrite: {'^/api': ''}}}}
}
但是,我這里不想修改前端,因為要是實際部署,如果跨域問題是出在后端,部署之后bug還會存在。于是我把網(wǎng)頁控制臺的報錯信息截圖發(fā)給DeepSeek,讓它幫忙給分析以下,并且把我的疑問也一同發(fā)給它。后來,在它給的答案中無意中發(fā)現(xiàn)了一條內(nèi)容,引起了我的注意。就是如下圖所示的內(nèi)容:
handlers.AllowedHeaders([]string{"X-Requested-With", "Content-Type", "Authorization", "Your-Custom-Header"}),
這里有一個"Your-Custom-Header"你自定義的頭。哦!我恍然大悟,可能是我在userinfo中在頭部自定義的頭部信息的原因。為了驗證我的猜測,我把頭部自定義的頭部信息刪除后,再去測試,發(fā)現(xiàn)可以通過了,跨域報錯沒有了,這證明了我的猜測是正確的。于是在服務端做了如下調(diào)整:
http.Filter(handlers.CORS(handlers.AllowedHeaders([]string{"X-Requested-With", "Content-Type", "Authorization", "Kt"}), //這里需要添加自定義的頭部信息如Kthandlers.AllowedMethods([]string{"GET", "POST", "HEAD", "OPTIONS", "PUT", "DELETE"}),handlers.AllowedOrigins([]string{"*"}),handlers.AllowCredentials(), // 允許攜帶憑證(如 cookies))
將前端自定義的頭部鍵字段:Kt? 添加在了cors請求里,再去測試,可以正常運行了。
總結,DeepSeek真的很強大,你完全可以將它作為你的一個老師,有問有答,按照思維邏輯循序遞進,它不但可以讀懂你的問題,代碼,它還能讀懂截圖。對于程序員學習和工作都有極大的幫助,用好了真可謂事半功倍。當然,網(wǎng)上也有很多直接用DeepSeek寫代碼的,這個雖然效率更高,但對于新手來說,我個人建議起初不要那么使用。因為DeepSeek直接寫代碼,也會和人類一樣,會出錯,有各種bug,并且人機交流過程中,它做的未必真的就是你想要的。你要看懂它寫的程序,并且把bug找出來,告訴它如何修改,這需要你自身有一定功底,在內(nèi)功沒練好之前,你很難駕馭有DeepSeek自動生成一整個正確的項目。不如從簡單問題著手,分單一模塊功能交給DeepSeek編寫,然后自己完成單元測試,然后逐步的組合,直至完成整個項目。這樣,從中你也得到了學習和鍛煉,也明白了整個過程和細節(jié)。不是由AI支配你,而是你使用了AI。我認為這才是好的使用AI的方式。