2020-04-07

問題:

1、 SpringBoot異常的設(shè)計的原理

2、 前后端分離開發(fā),日志應(yīng)該如何進(jìn)行記錄,在出現(xiàn)問題的時候,方便定位問題?

3、 跨域的含義


回答:

3、

跨域的含義:跨域是指一個域下的文檔或腳本試圖去請求另一個域下的資源,這里跨域是廣義的。其實我們通常所說的跨域是狹義的,是由瀏覽器同源策略限制的一類請求場景。瀏覽器從一個域名的網(wǎng)頁去請求另一個域名的資源時,域名、端口、協(xié)議任一不同,都是跨域。

跨域的訪問會帶來許多安全性的問題,比如,cookie 一般用于狀態(tài)控制,常用于存儲登錄的信息,如果允許跨域訪問,那么別的網(wǎng)站只需要一段腳本就可以獲取你的 cookie,從而冒充你的身份去登錄網(wǎng)站,造成非常大的安全問題,因此,現(xiàn)代瀏覽器均推行同源策略。

跨域解決方案:

通過 jsonp 跨域

document.domain + iframe 跨域

location.hash + iframe

window.name + iframe 跨域

postMessage 跨域

跨域資源共享(CORS)

nginx 代理跨域

nodejs 中間件代理跨域

WebSocket 協(xié)議跨域

什么是同源策略?

同源策略/SOP(Same origin policy)是一種約定,由 Netscape 公司 1995 年引入瀏覽器,它是瀏覽器最核心也最基本的安全功能,如果缺少了同源策略,瀏覽器很容易受到 XSS、CSFR 等攻擊。所謂同源是指”協(xié)議+域名+端口”三者相同,即便兩個不同的域名指向同一個 ip 地址,也非同源。

原文地址:https://www.leiue.com/what-is-cross-domain

2、

前端如何定位線上BUG:使用前端監(jiān)控系統(tǒng)來記錄日志。

一.統(tǒng)計前端錯誤:我們可以通過重寫window.onerror 方法來進(jìn)行jsError的監(jiān)聽。它能夠為我們記錄下線上的很多錯誤,以及一些額外的信息。

二.分析錯誤詳情:線上的錯誤日志統(tǒng)計出來了,我們可以解析這些錯誤日志來知道用戶的機型,版本,系統(tǒng)平臺,影響范圍,以及具體的錯誤位置,從而提高我們解決問題的效率。

三.如果我們無法復(fù)現(xiàn)用戶錯誤的時候,那么我們就很難解決問題。我們需要用戶的行為記錄。記錄下用戶的跳轉(zhuǎn)日志,就能夠復(fù)現(xiàn)出用戶的行為,從而復(fù)現(xiàn)BUG。記錄下用戶的請求時間,參數(shù),響應(yīng)時間,響應(yīng)狀態(tài)等等,可以具體分析出來接口對頁面的影響。記錄用戶的點擊行為。

后端如何定位線上BUG:

一.記錄日志:以Spring Boot項目為例。默認(rèn)使用LogBack日志系統(tǒng),默認(rèn)將日志打印到控制臺上,默認(rèn)的日志級別為INFO。將日志信息保存到日志文件中在application.properties配置文件中加上logging.file和logging.path即可。配置日志級別在application.properties配置文件中添加logging.level即可,日志級別總共有TRACE < DEBUG < INFO < WARN < ERROR < FATAL ,且級別是逐漸提供,如果日志級別設(shè)置為INFO,則意味TRACE和DEBUG級別的日志都看不到。

原文地址:https://www.cnblogs.com/warm-stranger/p/10430346.html

http://www.webfunny.cn/demo/overview.html

https://www.cnblogs.com/bigdataZJ/p/springboot-log.html


1、

一:BasicErrorController,這個類是默認(rèn)處理/error請求的。


源碼

其中有這樣一段代碼來處理錯誤請求:

@Controller

@RequestMapping("${server.error.path:${error.path:/error}}")

public class BasicErrorController extends AbstractErrorController {

? ? @RequestMapping(produces = "text/html")//產(chǎn)生html類型的數(shù)據(jù);瀏覽器發(fā)送的請求來到這個方法處理

? ? public ModelAndView errorHtml(HttpServletRequest request,

? ? ? ? HttpServletResponse response) {

? ? ? ? HttpStatus status = getStatus(request);

? ? ? ? Map<String, Object> model = Collections.unmodifiableMap(getErrorAttributes(

? ? ? ? request, isIncludeStackTrace(request, MediaType.TEXT_HTML)));

? ? ? ? response.setStatus(status.value());

? ? ? ? //去哪個頁面作為錯誤頁面;包含頁面地址和頁面內(nèi)容

? ? ? ? ModelAndView modelAndView = resolveErrorView(request, response, status, model);

? ? }

@RequestMapping

@ResponseBody //產(chǎn)生json數(shù)據(jù),其他客戶端來到這個方法處理;

public ResponseEntity<Map<String, Object>> error(HttpServletRequest request) {

? ? Map<String, Object> body = getErrorAttributes(request,

? ? isIncludeStackTrace(request, MediaType.ALL));

? ? HttpStatus status = getStatus(request);

? ? return new ResponseEntity<Map<String, Object>>(body, status);

}

二:DefaultErrorViewResolver


處理步驟:

一但系統(tǒng)出現(xiàn)4xx或者5xx之類的錯誤;ErrorPageCustomizer就會生效(定制錯誤的響應(yīng)規(guī)則);就會來到/error請求;就會被BasicErrorController處理。

原文地址:https://blog.csdn.net/sihai12345/article/details/81220781

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • (11)重寫和重載的區(qū)別 重載(overload)同一個類方法名相同,參數(shù)的類型、個數(shù)和“順序”至少有一個不同 重...
    peiyuchn閱讀 295評論 0 0
  • 1.服務(wù)器的訪問流程:問題:如何實現(xiàn)HTML、CSS和JS等靜態(tài)資源放入Tomcat中被訪問?步驟如下:1、在we...
    棉花糖bao閱讀 136評論 0 0
  • 22課 第三節(jié) 前面學(xué)習(xí)到nginx的做負(fù)載均衡的一些策略: 1.輪訓(xùn),2.權(quán)重,3.ip hash算法,能夠解決...
    奇妙林林閱讀 153評論 0 0
  • nginx服務(wù)器間歇性無法訪問解決辦法今天服務(wù)器出現(xiàn)了這個問題,域名訪問顯示網(wǎng)絡(luò)錯誤,重啟nginx服務(wù)器,馬上又...
    一位先生_閱讀 3,104評論 0 0
  • 本地存儲 cookie 用戶端保存請求信息的機制 分號分隔的多個key-value字段 存儲在本地的加密文件中,只...
    RyuukoGYC閱讀 58評論 0 0

友情鏈接更多精彩內(nèi)容