求问一下手机怎么解决用抓包软件 抓包软件出现307 Temporary Redirect这个问题?

F12中的XHR全部是接口

5.get请求的缺点?(以及与post的真正的区别)

1.请求信息暴露在url中,不利于信息的安全 ,post抓包工具就能抓到,其实也不是很安全的

2.url很长,不是很美观

3.但是传输速度大于post请求

4.post的传参个数较大,get传参个数相对较少

5.对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);

而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)

因为文章太长,所以将它分为三部分,本文是第三部分。

前面TCP连接已经建立好了,意味着桥已经搭好了,下一步就该传输HTTP消息了。因为HTTP我们都很熟悉,很常见,也不是那么底层,理解起来轻松不少。

还是抓包来分析,不过这次不用Wireshark来抓,因为不太直观,这次直接用Chrome自带的Developer Tools。

HTTP问题简单,那就直接列举几个问题,有些问题我给出详细答案。

有一点需要特别注意,有的浏览器是不支持的,所以在使用和实现时需要仔细评估好自己客户端的能力。

那么OPTIONS一般用在哪里呢?是的,CORS。如果您开发过SPA,或者您的前端的逻辑和交互完全用JavaScript来实现的,肯定会碰到此问题。所谓JavaScript实现,目前比交流行的有VueJS,AngularJS,React等流行框架。如何解决这个问题?最常用的方法是是前端和后端在同一个域名下。如果不在同一个域名下,需要在后端实现支持CORS的功能,目前Spring/Spring Boot已经有类似功能支持CORS,实现起来蛮简单的,具体可以参看 ,不在赘述。

关于CORS,最难的不是这里,在我遇到的Case里,比这个更复杂,如果前端是SPA,而且在某种情况下,访问任何前端页面都会进行跳转,这是需求。但是因为是SPA的架构,会出现OPTIONS(这是浏览器关于CORS支持的流程),这会使整个HTTP 流程变得紊乱,也是一个很棘手的问题。

不管怎么说,CORS属于安全性这一块,后面在软件安全(包括Web)方面专门写吧。在过去几年里,因为公司和客户在产品安全和数据安全放在了一个很高的位置,而我又是去负责这一块,所以自己在安全方面积累了大量的实战经验,非常宝贵。

server的值是squid/3.5.24,不合适之处在哪里?也许部分人是不清楚的。其实很简单,不应该把squid的版本信息放在这里。为什么?

如果web server软件是自己公司开发的,私有的,不开源的,这也罢了,没人知道你的web server是怎么实现的,但这并不代表web  server没有漏洞,不代表别人发现不了漏洞。

但如果用的是开源的,例如Apache HTTPd,Apache Tomcat,Ngnix等,就需要注意了,每个版本都有安全漏洞,而且这些安全漏洞都有专门的记录,看看隔三差五报告的CVE,就知道漏洞多少了。所以,如果使用开源软件,很容易将自己的web server处于一个具有潜在风险的位置,所以不要加上版本号。

腾讯作为全球顶级的大公司,这方面不注意,实在是有点说不过去。如果有腾讯的朋友看到这里,还是改过来吧。

和上面一样,这也是属于安全性问题,有时间我再写吧。

都属于跳转,但是区别在哪里呢?

我们看看307在协议里是怎么定义的?参看rfc2616第10章节

在 GET、HEAD 这些幂等的请求方式上,302、307 没区别,但对于 POST 就不同了,大部分浏览器 都会 302 会将 POST 请求转为 GET,而 307则不一样,规范要求浏览器继续向 Location 的地址 POST 内容。

举个例子解释一下,假设正在POST一个消息,里面的Body有1M内容,在307的情况下,这1M的内容会继续发过去,但在302的情况下,则不会。

不解释过多,keep-alive,closed用法不一样,根据实际情况而定,在优化网络时经常用到。

需要注意的是,Connection在通信领域会一些场景下会造成一些麻烦,尤其是在监控某个HTTP Session的flow时。

HSTS一般大公司都会用,在我实际的项目涉及到HTTPS,为了实现某个功能,HSTS成了一个跨不过去的坎,遇到过很大问题。大家自己多看看吧。

8. 可以抓HTTPS的包了解HTTP请求和响应吗?有什么方法?

9. 为什么对性能要求高的场景下不使用HTTP作为协议?例如在商用里,RPC开源项目一般不使用HTTP作为传输协议?而在5G下使用HTTP协议呢?

有一点是需要注意的,HTTP的消息头太多了,会造成消息体特别大,影响性能,而且有些场景下这些消息头大部分都是无用的。

不多解释,但是HTTP/2.0还是需要了解一下,优势和缺点。

现在浏览器接收到了server的返回内容,接下来浏览器该把内容呈现给用户了。

Server返回的内容有哪些呢?这里只以HTML页面为例(API返回的JSON数据或XML数据不在讨论范围内)。

一个页面一般包含HTML、CSS、 JS、 图片等文件,那么浏览器收到这些文件后该如何渲染(render)他们呢?

以下部分很多参考下面2篇文章:

首先我们先了解一下浏览器的组件构成,以及每个组件的功能,下图是浏览器包括的几个部分:

  1. User Interface: UI组件包括地址栏,前进/后退按钮,书签菜单等。
  2. Rendering engine : 负责显示请求的内容。例如,如果是HTML页面,它将解析HTML,CSS,并将解析的内容显示在屏幕上。

不同的浏览器使用不同的渲染引擎:

下面是浏览器的渲染引擎的主要步骤。

渲染引擎解析HTML文档,并将HTML包含的元素转化为一个个DOM,并构建为一个 DOM树。然后引擎开始解析来自CSS文件或直接嵌在HTML页面的CSS样式数据,这些样式信息又会构建另外一个树: 渲染树

渲染树包含了多个矩形,这些矩形包含了颜色,大小,位置等属性,而且会按照对应的顺序显示在屏幕上。

当渲染树构造完毕后,接下来进入布局的程序,在这个程序里,渲染引擎会给每个DOM元素安排精确的坐标,并根据坐标在屏幕上显示。

接下来是遍历渲染树,UI Backend层会将一个个DOM元素绘画在屏幕上绘画出来。

需要注意的是,上面是一个渐进的过程,理解这一点非常重要。但是为了得到更好的用户体验,浏览器会边解析边渲染,它并不会等到所有HTML解析完了才开始构造和布局渲染树。当部分内容正在解析渲染时,另外一部分正从网络那边下载下来呢。

下面2个图是WebKit和Gecko的渲染引擎的流程,我们发现他们大致相同的。

下面是DOM树,渲染树的树形结构。

渲染引擎是单线程工作的,除了网络操作,其他所有的都是单线程的。在Firefox和Safari,它们自己就是主线程,而Chrome就是每个tab处理主线程。

网络操作则由多个并列线程去执行,但数量也是受限的,一般在2-6个。

浏览器的主线程是一个无限的事件循环,而且一直保持进程alive,一直等着各种事件(例如绘画事件,布局事件),并处理他们。

2.  各个主流浏览器的渲染引起是什么?

3.  浏览器显示页面的主要流程是什么?

4.  您在做开发和测试时,有哪些浏览器(包括手机)存在兼容性问题较多?

       遇见最多的是Samsung手机和Huawei手机,有时一个兼容性需要花费大量时间去调研和修复,可能是Samsung和Huawei定制的太厉害了,不兼容一些特性吧。

5.  渲染引擎是单线程还是多线程?

6.  浏览器的网络操作一般由几个线程去执行?

8.  为了获得更好的用户体验,我们应该在页面做些什么改进?

10. 如果让你开发一个浏览器,设计思路有哪些?

我们知道,人的耐心是有限的,一个页面如果超过8s,人基本上不会等了,这会对业务产生巨大影响。我们该如何去优化页面呢?

思路很简单,就是按照我们前面介绍的几大步骤去优化。我们先回顾一下几大步骤:

这是10多年前的经验,随着科技的发展,一些新的经验又出现了,可以容易想到的是:

1.  尽量将server离用户近一些,例如人处在中国访问Apple,应该是Apple中国站提供服务,GSLB很重要。

2. 不要把layout嵌入一层又一层,简单说就是嵌套别太深,不然影响解析和渲染性能。

3. 有些数据可以在后台处理的,就不要在前端通过JavaScript处理了。

4. 如果请求过大,Load Balance这些手段还是要上的。

6. 后台事件性能要高,能够及时将结果返回给用户。

当然涉及到高可用,高性能等那是另外一个话题。

这道面试题非常经典,考察的知识非常丰富,跨度较大,如果没有几年的经验,是很难完全掌握的,所以想答好其实不容易的。对这个问题,基本上可以根据我的经验回答,也算是对这些年来在这方面的知识的一个总结。但同时,我也参考了一些资料,感谢他们。在参考的地方,我都把URL列出来了。

写这篇文章耗费了大量时间,我觉得挺有意义,但是也不能保证里面的内容全都是正确或准确的,如果您有任何问题可以通过以下方式联系我,以便我进一步改正并更新。

写到这里,三部分已经写完,在这里放上全文的PDF文档供大家参考,可能后面会更改,如果有新的文档,我将保持更新。

Fiddler抓包工具,前端开发中进行调试的时候,可以作为辅助工具进行数据模拟。下面详细的写下使用步骤。

感兴趣的可以去Fiddler进行下载安装,可能会麻烦些。我直接提供一个免安装的包,放到我网盘,直接通过链接和提取码进行下载,链接:/s/1Y0lPkkeVOWO_r_MY73awtQ 提取码:3kbv。下载后解压就可以直接使用。

我要回帖

更多关于 模拟器抓包有些app抓不到 的文章

 

随机推荐