2020-04-07

问题:

1、 SpringBoot异常的设计的原理

2、 前后端分离开发,日志应该如何进行记录,在出现问题的时候,方便定位问题?

3、 跨域的含义


回答:

3、

跨域的含义:跨域是指一个域下的文档或脚本试图去请求另一个域下的资源,这里跨域是广义的。其实我们通常所说的跨域是狭义的,是由浏览器同源策略限制的一类请求场景。浏览器从一个域名的网页去请求另一个域名的资源时,域名、端口、协议任一不同,都是跨域。

跨域的访问会带来许多安全性的问题,比如,cookie 一般用于状态控制,常用于存储登录的信息,如果允许跨域访问,那么别的网站只需要一段脚本就可以获取你的 cookie,从而冒充你的身份去登录网站,造成非常大的安全问题,因此,现代浏览器均推行同源策略。

跨域解决方案:

通过 jsonp 跨域

document.domain + iframe 跨域

location.hash + iframe

window.name + iframe 跨域

postMessage 跨域

跨域资源共享(CORS)

nginx 代理跨域

nodejs 中间件代理跨域

WebSocket 协议跨域

什么是同源策略?

同源策略/SOP(Same origin policy)是一种约定,由 Netscape 公司 1995 年引入浏览器,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,浏览器很容易受到 XSS、CSFR 等攻击。所谓同源是指”协议+域名+端口”三者相同,即便两个不同的域名指向同一个 ip 地址,也非同源。

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

2、

前端如何定位线上BUG:使用前端监控系统来记录日志。

一.统计前端错误:我们可以通过重写window.onerror 方法来进行jsError的监听。它能够为我们记录下线上的很多错误,以及一些额外的信息。

二.分析错误详情:线上的错误日志统计出来了,我们可以解析这些错误日志来知道用户的机型,版本,系统平台,影响范围,以及具体的错误位置,从而提高我们解决问题的效率。

三.如果我们无法复现用户错误的时候,那么我们就很难解决问题。我们需要用户的行为记录。记录下用户的跳转日志,就能够复现出用户的行为,从而复现BUG。记录下用户的请求时间,参数,响应时间,响应状态等等,可以具体分析出来接口对页面的影响。记录用户的点击行为。

后端如何定位线上BUG:

一.记录日志:以Spring Boot项目为例。默认使用LogBack日志系统,默认将日志打印到控制台上,默认的日志级别为INFO。将日志信息保存到日志文件中在application.properties配置文件中加上logging.file和logging.path即可。配置日志级别在application.properties配置文件中添加logging.level即可,日志级别总共有TRACE < DEBUG < INFO < WARN < ERROR < FATAL ,且级别是逐渐提供,如果日志级别设置为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,这个类是默认处理/error请求的。


源码

其中有这样一段代码来处理错误请求:

@Controller

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

public class BasicErrorController extends AbstractErrorController {

    @RequestMapping(produces = "text/html")//产生html类型的数据;浏览器发送的请求来到这个方法处理

    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());

        //去哪个页面作为错误页面;包含页面地址和页面内容

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

    }

@RequestMapping

@ResponseBody //产生json数据,其他客户端来到这个方法处理;

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


处理步骤:

一但系统出现4xx或者5xx之类的错误;ErrorPageCustomizer就会生效(定制错误的响应规则);就会来到/error请求;就会被BasicErrorController处理。

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • (11)重写和重载的区别 重载(overload)同一个类方法名相同,参数的类型、个数和“顺序”至少有一个不同 重...
    peiyuchn阅读 273评论 0 0
  • 1.服务器的访问流程:问题:如何实现HTML、CSS和JS等静态资源放入Tomcat中被访问?步骤如下:1、在we...
    棉花糖bao阅读 127评论 0 0
  • 22课 第三节 前面学习到nginx的做负载均衡的一些策略: 1.轮训,2.权重,3.ip hash算法,能够解决...
    奇妙林林阅读 145评论 0 0
  • nginx服务器间歇性无法访问解决办法今天服务器出现了这个问题,域名访问显示网络错误,重启nginx服务器,马上又...
    一位先生_阅读 3,023评论 0 0
  • 本地存储 cookie 用户端保存请求信息的机制 分号分隔的多个key-value字段 存储在本地的加密文件中,只...
    RyuukoGYC阅读 39评论 0 0