网络面试总结——Android面试《一》

1.http是什么?http的工作机制?http报文?

Hypertext Transfer Protocol 超文本传输协议

1.1 http工作机制:

浏览器:

  1. 用户输入地址后回车或点击链接
  2. 浏览器拼装http报文并发送给服务器
  3. 服务器处理请求后发送响应报文给浏览器
  4. 浏览器解析响应报文并使用渲染引擎显示到界面

手机app:

  1. 用户点击或界面自动触发联网请求
  2. android 代码调用拼装http报文并发送请求到服务器
  3. 服务器处理请求后发送响应报文给手机
  4. android代码处理响应报文并做出相应处理(存储数据,显示数据到界面等)

1.2 URL和http报文

URL格式分三部分:协议类型、服务器地址(和端口号)、路径(path)
如:http://baidu.com/user?sex=man

报文格式分为请求报文和响应报文。

请求报文:
网络面试总结——Android面试《一》
响应报文:
网络面试总结——Android面试《一》

2. HTTP请求方法和状态码

请求方法 :

GET-----------获取资源;没有body
POST---------增加或修改资源;有body
PUT-----------修改资源;有body
DELETE-----删除资源;没有body
HEAD--------与GET类似,但服务器只通过HTTP响应头返回资源的信息(如文件大小,类型等),响应报文段的数据实体为空

状态码

1xx------------临时性消息(请求已被接受,需要继续处理,如100(继续发送)、101(正在切换协议))
2xx------------成功
3xx------------重定向(如301(永久移动)、302(暂时移动)、304(内容未改变))
4xx------------客户端错误(如400(客户端请求错误)、404(找不到内容))
5xx------------服务器错误

客户端错误和服务端错误分开,利于程序员调试。

3.HTTP的Header解析

扩充知识:DNS查询 Domain Name System 即域名查询系统,通过域名(如api.github.com,域名方便我们记)查询ip地址

Header的作用: HTTP消息的元数据(metadata),主要有:

网络面试总结——Android面试《一》
最常见的Content-Type,主要有4种

  1. text/html

    请求web页面时返回响应的类型,Body中返回html文本,格式如下
    网络面试总结——Android面试《一》

  2. x-www-form-urlencoded

    web页面纯文本表单的提交方式
    网络面试总结——Android面试《一》

    对应retrofit的代码:

    网络面试总结——Android面试《一》

  3. multipart/form-data

    web页面含有二进制文件时的提交方式
    网络面试总结——Android面试《一》
    对应retrofit代码:
    网络面试总结——Android面试《一》

  4. application/json,image/jpeg,application/zip

    单项内容(文本或非文本都可以),用于WebApi的响应或者POST/PUT的请求

    1. 请求中提交json,如:{“name”:“rengwuxian”,“gender”:“male”}
      对应retrofit代码:
      网络面试总结——Android面试《一》
    2. 请求中提交二进制内容:
      对应retrofit代码:
      网络面试总结——Android面试《一》

4.TCP/IP协议族

概念:一系列协议组成的一个网络分层模型

1.为什么要分层?

因为网络的不稳定性

具体分层:
网络面试总结——Android面试《一》
应用层:HTTP、FTP、DNS
传输层:TCP、UDP
网络层:IP
数据链路层:以太网、Wi-Fi

2.TCP连接

TCP概述:TCP把连接作为最基本的对象,每一条TCP连接都有两个端点,这种端点我们叫作套接字(socket),它的定义为端口号拼接到IP地址即构成了套接字,例如,若IP地址为192.3.4.16 而端口号为80,那么得到的套接字为192.3.4.16:80。

什么叫连接?
通信双方建立确认可以通信,不会讲对方的消息丢弃,即为建立连接。

为什么要有长连接?
因为移动网络并不在internet中,而是在运营商的内网,并不具有真正的公网ip,因此当某个TCP连接在一段时间不通信后,网关会出于性能考虑关闭这条TCP连接和网关的连接通道,导致TCP连接被动关闭

长连接的实现方式
心跳机制。即在一定时间间隔内,使用TCP连接发送超短无意义消息来让网关不能讲自己定义为空闲连接,从而防止网关将自己关闭。
此外,长连接并不是永久连接的。如果一段时间内(具体的时间长短,是可以在header当中进行设置的,也就是所谓的超时时间),这个连接没有HTTP请求发出的话,那么这个长连接就会被断掉。

3.TCP为什么建立连接是三次握手,关闭连接确是四次挥手呢?

建立连接的时候, 服务器在LISTEN状态下,收到建立连接请求的SYN报文后,把ACK和SYN放在一个报文里发送给客户端。
而关闭连接时,服务器收到对方的FIN报文时,仅仅表示对方不再发送数据了但是还能接收数据,而自己也未必全部数据都发送给对方了,所以己方可以立即关闭,也可以发送一些数据给对方后,再发送FIN报文给对方来表示同意现在关闭连接,因此,己方ACK和FIN一般都会分开发送,从而导致多了一次。

详细可以阅读两张动图-彻底明白TCP的三次握手与四次挥手
建议阅读:网络面试题

4.TCP和UDP的区别

  1. 基于连接与无连接;
  2. 对系统资源的要求(TCP较多,UDP少);
  3. UDP程序结构较简单;
  4. 流模式与数据报模式 ;
  5. TCP保证数据正确性,UDP可能丢包
  6. TCP保证数据顺序,UDP不保证。

5.http和https

HTTP over SSL 的简称,即工作在SSL(或TLS)上的http。https 通过在 http 协议下添加了一层 ssl 协议对数据进行加密从而保证了安全。说白了,就是加密通信的http。

工作原理:

在客户端和服务器之间协商出一套对称秘钥,每次发送信息之前讲内容加密,收到之后解密,达到内筒加密传输。

为什么不直接使用非对称加密?
非对称加密由于使用了复杂的数学原理,因此计算相当复杂,如果完全使用非对称加密来加密通信内容,会严重影响网络通信的性能。

http 与 https 的区别主要如下:

  1. https 需要到 CA 申请证书,很少免费,因而需要一定的费用
  2. http 是明文传输,安全性低;而 https 在 http 的基础上通过 ssl 加密,安全性高
  3. http 使用的默认端口是80;https使用的默认端口是 443
上一篇:不用996,不用007,赚的还比我多?我直接好家伙


下一篇:config文件下的index文件配置跨域和vue.config.js配置跨域