HTTP 简介
HTTP 协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World
Wide Web )服务器传输超文本到本地浏览器的传送协议;
HTTP工作原理
HTTP协议工作于客户端-服务端架构上,浏览器作为HTTP客户端通过URL向HTTP服务端发送所有请求。 web服务器有:Apache
服务器、lls服务器等;
HTTP的优点和缺点?
优点:
支持客户/服务器模式:
应用广泛且跨平台:
简单快速、灵活:
缺点:
无连接:
无状态:无状态可以减轻服务器负担,但进行关联操作时繁琐,Cookie正好可以解决这个问题
明文传输:调试便利的同时带来了信息易被窃取
不安全:(HTTPS通过引入SSL/TLS层,解决了这个隐患)
http协议 与 https协议 有什么区别?
http协议是明文传输,https协议是http协议+ssl协议构建的,加密传输协议。
http 的连接很简单,是无状态的。
http 传输的数据都是未加密的,是明文传输。
https 协议是由 http和ssl协议构建的可进行加密传输和身份认证的网络协议,比http协议的安全性更高。可防止数据在传输过程中不被窃取、改变,确保数据的完整性。
https 协议需要ca证书,费用较高。ssl 证书也需要钱,功能越强大的证书费用越高。
TCP的三次握手
ACK、SYN、FIN、seq、ack
大写的就是标志位,小写的就是序号
序列号seq:占4个字节,是这个报文段中的第一个字节的数据编号。
确认号ack:占4个字节,期待收到对方下一个报文段的第一个数据字节的序号。
确认ACK:占1位,仅当ACK=1时,确认号字段才有效。ACK=0时,确认号无效
同步SYN:连接建立时用于同步序号。当SYN=1,ACK=0时表示:这是一个连接请求报文段。若同意连接,则在响应报文段中使得SYN=1,ACK=1。因此,SYN=1表示这是一个连接请求,或连接接受报文。SYN这个标志位只有在TCP建产连接时才会被置1,握手完成后SYN标志位被置0。
终止FIN:用来释放一个连接。FIN=1表示:此报文段的发送方的数据已经发送完毕,并要求释放运输连接
三次握手作用
- 确认双方的接受能力发送能力是否正常
- 确定自己初始化序列号
理解:
客户端首先由关闭状态主动变成打开状态,给客户端发送一个报文请求,约定的同步标志SYN=1,发送自己初始化的序列编号 seq =x。服务端监听状态下被动打开,接受同步链接,ACK=1 、SYN=1、确认收到的seq所以起始位置ack = x +1,客户端发送seq=y等待客户端确认是否正常收到,客户端收到确认ACK=1,SYN=1,seq = x+1,ack=y+1。实质上用白话来说,就是A对B说你听到了么?B收到后对A说,我听到你说你听到了么,你继续说下一句吧(+1),你确认一下我说什么你听到了么?。A听到B返回数据,在给B说seq,那我继续说了,你早上吃了么。ack:你刚刚说的是:你确认一下我说什么你听到了么?
get 和 post 请求区别
Get 从服务器上获取资源 ,post重点在向服务器发送数据
Get是不安全的url可见
get传输数据是通过URL请求,以field(字段)= value的形式,置于URL后,并用"?“连接,多个请求数据间用”&"连接,如http://127.0.0.1/Test/login.action?name=admin&password=admin,这个过程用户是可见的;
post传输数据通过Http的post机制,将字段与对应值封存在请求实体中发送给服务器,这个过程对用户是不可见的
get传输数据量小 效率高
挥手为什么需要四次?
因为当服务端收到客户端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当服务端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉客户端,“你发的FIN报文我收到了”。只有等到我服务端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四次挥手。
实质上用白话来说,A发送了终止标识和确认参数seq:你听到了么,B接收到了建立连接,跟A说收到了,我听到你说你听到了么,你继续说下一句吧(+1),B确认参数seq:你确认一下我说什么你听到了么?结束后在起一个一个报文回应A发送了终止标识参数seq:你确认一下我标识发送了你看到了么,A收到后在确认一次链接成功
websocket 协议的实现
websocket 是 H5 的提出的在单个 TCP 协议上进行全双工通讯的协议。它允许服务器主动向客户端推送数据,客户端和服务器只需要完成一次握手,两者之间就可以建立持久性的连接,并进行双向数据传输。
websocket 是基于 http 协议的。借助 http 协议来完成握手
http协议中,缓存机制有哪些,如何命中?
强缓存和协商缓存,由响应头Response Headers确定(服务器返回)
强缓存,中status是200 相关字段有expries ,catch-control两者同时出现catch-control优先级更高。主要是利用catch-control的max-age值来进行判断
协商缓存
如果服务器为请求的资源确定的 ETag 标头的值与浏览器请求中的 If-None-Match 值相同,则服务器将返回 304 Not Modified。表示资源文件没有发生改变,命中协商缓存。
GET / HTTP/1.1
Host: example.com
Cache-Control: max-age=0
If-None-Match: “deadbeef” // 对应服务端的标记Etag
If-Modified-Since: Tue, 22 Feb 2022 20:20:20 GMT // 对应服务端的Last-Modified
HTTP1.0和HTTP1.1区别是什么
HTTP2.0的优化
请求报文头部
响应报文头部
http中缓存如何进行
过程
当浏览器向服务器发起请求时,服务器会将缓存规则放入HTTP响应报文的HTTP头中和请求结果一起返回给浏览器,控制强制缓存的字段分别是Expires和Cache-Control,其中Cache-Control优先级比Expires高。
http地址栏中url发生什么