HTTP基础
HTTP基础
网络模型
OSI模型7层
应用层:各种应用软件,包括 Web 应用。
标识层:数据格式标识,基本压缩加密功能。
会话层:控制应用程序之间会话能力;如不同软件数据分发给不同软件。
传输层:端到端传输数据的基本功能;如 TCP、UDP。
网络层:定义IP编址,定义路由功能;如不同设备的数据转发。
数据链路层:定义数据的基本格式,如何传输,如何标识;如网卡MAC地址。
物理层:底层数据传输,如网线;网卡标准。
三次握手和四次挥手
为什么要三次握手?
这个问题的本质是, 信道不可靠, 但是通信双发需要就某个问题达成一致. 而要解决这个问题, 无论你在消息中包含什么信息, 三次通信是理论上的最小值. 所以三次握手不是TCP本身的要求, 而是为了满足"在不可靠信道上可靠地传输信息"这一需求所导致的. 请注意这里的本质需求,信道不可靠, 数据传输要可靠. 三次达到了, 那后面你想接着握手也好, 发数据也好, 跟进行可靠信息传输的需求就没关系了. 因此,如果信道是可靠的, 即无论什么时候发出消息, 对方一定能收到, 或者你不关心是否要保证对方收到你的消息, 那就能像UDP那样直接发送消息就可以了.
为了保证服务端能收接受到客户端的信息并能做出正确的应答而进行前两次(第一次和第二次)握手(服务端验证)
为了保证客户端能够接收到服务端的信息并能做出正确的应答而进行后两次(第二次和第三次)握手(客户端验证)
socket
它是网络通信过程中端点的抽象表示,包含进行网络通信必须的五种信息:连接使用的协议,本地主机的IP地址,本地进程的协议端口,远地主机的IP地址,远地进程的协议端口。
Socket 是对 TCP/IP 协议族的一种封装,是应用层与TCP/IP协议族通信的中间软件抽象层。从设计模式的角度看来,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。
Socket 起源于 Unix ,Unix/Linux 基本哲学之一就是“一切皆文件”,都可以用“打开(open) –> 读写(write/read) –> 关闭(close)”模式来进行操作。因此 Socket 也被处理为一种特殊的文件。
socket与TCP
创建Socket连接时,可以指定使用的传输层协议,Socket可以支持不同的传输层协议(TCP或UDP),当使用TCP协议进行连接时,该Socket连接就是一个TCP连接。
由于通常情况下Socket连接就是TCP连接,因此Socket连接一旦建立,通信双方即可开始相互发送数据内容,直到双方连接断开。
但在实际网 络应用中,客户端到服务器之间的通信往往需要穿越多个中间节点,例如路由器、网关、防火墙等,大部分防火墙默认会关闭长时间处于非活跃状态的连接而导致 Socket 连接断连,因此需要通过轮询告诉网络,该连接处于活跃状态。
报文格式
一个 HTTP 请求报文由请求行(request line)、请求头部(header)、空行和请求数据四部分组成
- 第一行必须是一个请求行(request line),用来说明请求类型、要访问的资源以及所使用的 HTTP 版本
- 紧接着是一个头部(header)小节,用来说明服务器要使用的附加信息
- 之后是一个空行
- 再后面可以添加任意的其他数据(称之为主体:body)
1 | <method> <request-URL> <version> |
响应报文类似,
- 状态行
- 响应报头
- 空行
- 响应数据
1 | <state> |
HTTP特性
CORS跨域请求的限制与解决,预请求验证
需服务器支持跨域
缓存头
Cache-Control,Expires,Last-Modified和Etag
cookie和session
JWT
cookie和session可以实现有状态(服务端保存session)的用户认证,但是扩展性不好
JWT实现无状态(服务端不保存session),从而容易实现扩展
HTTP长连接
Keep-alive
HTTPS
HTTP2
[服务器推送](
文章标题:HTTP基础
本文作者:Benny
发布时间:2019-10-14, 11:43:22
最后更新:2019-10-14, 11:46:12
原始链接:https://benny233.github.io/2019/10/14/HTTP基础/版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。