1.http是什么?http的工作机制?http报文?
Hypertext Transfer Protocol 超文本传输协议
1.1 http工作机制:
浏览器:
- 用户输入地址后回车或点击链接
- 浏览器拼装http报文并发送给服务器
- 服务器处理请求后发送响应报文给浏览器
- 浏览器解析响应报文并使用渲染引擎显示到界面
手机app:
- 用户点击或界面自动触发联网请求
- android 代码调用拼装http报文并发送请求到服务器
- 服务器处理请求后发送响应报文给手机
- android代码处理响应报文并做出相应处理(存储数据,显示数据到界面等)
1.2 URL和http报文
URL格式分三部分:协议类型、服务器地址(和端口号)、路径(path)
如:http://baidu.com/user?sex=man
报文格式分为请求报文和响应报文。
请求报文:
响应报文:
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),主要有:
最常见的Content-Type,主要有4种
-
text/html
请求web页面时返回响应的类型,Body中返回html文本,格式如下
-
x-www-form-urlencoded
web页面纯文本表单的提交方式
对应retrofit的代码:
-
multipart/form-data
web页面含有二进制文件时的提交方式
对应retrofit代码: -
application/json,image/jpeg,application/zip
单项内容(文本或非文本都可以),用于WebApi的响应或者POST/PUT的请求
- 请求中提交json,如:{“name”:“rengwuxian”,“gender”:“male”}
对应retrofit代码:
- 请求中提交二进制内容:
对应retrofit代码:
- 请求中提交json,如:{“name”:“rengwuxian”,“gender”:“male”}
4.TCP/IP协议族
概念:一系列协议组成的一个网络分层模型
1.为什么要分层?
因为网络的不稳定性
具体分层:
应用层: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的区别
- 基于连接与无连接;
- 对系统资源的要求(TCP较多,UDP少);
- UDP程序结构较简单;
- 流模式与数据报模式 ;
- TCP保证数据正确性,UDP可能丢包
- TCP保证数据顺序,UDP不保证。
5.http和https
HTTP over SSL 的简称,即工作在SSL(或TLS)上的http。https 通过在 http 协议下添加了一层 ssl 协议对数据进行加密从而保证了安全。说白了,就是加密通信的http。
工作原理:
在客户端和服务器之间协商出一套对称秘钥,每次发送信息之前讲内容加密,收到之后解密,达到内筒加密传输。
为什么不直接使用非对称加密?
非对称加密由于使用了复杂的数学原理,因此计算相当复杂,如果完全使用非对称加密来加密通信内容,会严重影响网络通信的性能。
http 与 https 的区别主要如下:
- https 需要到 CA 申请证书,很少免费,因而需要一定的费用
- http 是明文传输,安全性低;而 https 在 http 的基础上通过 ssl 加密,安全性高
- http 使用的默认端口是80;https使用的默认端口是 443