浏览器和服务器之间的交互桥梁
基于传输层的TCP协议来实现的,是一种无状态的应用层协议
为啥是无状态的呢
首行
方法 + URL + 版本号
认识URL
URL的组成
最重要的四个部分
域名/IP
端口号
带层次的路径
查询字符串(以键值对的方式来组织的)
举个例子
方法
GET请求
使用场景
举个例子
POST请求
使用场景
GET 和 POST 的区别
GET和POST本质没有区别,大部分场景下能够互相替代,但是在适用情况下是有差异的
传参方式不同
语义差别(使用场景上的不同)
幂等
缓存方面
长度限制
请求头(header)
构成
Host
Content-Length
Content-Type
User-Agent(UA)
Referer
Cookie
本质上是浏览器给网址提供的 本地存储数据的机制
cookie从哪来
cookie在哪存
cookie要到哪去
cookie的工作原理
session
Session是什么
Session工作原理
使用session维护用户登录状态过程
用户进行登录时,提交包含用户名和密码的表单,放入HTTP请求报文中
服务器验证该用户名和密码,如果正确则把用户信息存储在Redis中,它在Redis中的key称为SessionID
服务器返回的响应报文的Set-Cookie首部字段包含了SessionID,客户端收到响应报文之后将该Cookie值存入浏览器中
客户端之后对同一个服务器进行请求时会包含该Cookie值,服务器收到之后提取出Session ID,从Redis中取出用户信息,继续之前的业务操作
如果客户端禁用了cookie,那么session还能用吗
cookie和session的区别
为啥要有cookie和session
HTTP是无状态的,请求和响应都是独立的,一次会话中的多次请求时无感知的,如何解决这个问题呢?这就需要借助会话持久技术,常见的就是cookie和session
存储位置不同
存储的数据类型不同
存储的数据大小限制不同
生命周期的控制
空行
正文(body)
如果是GET请求,一般没有body
如果是POST请求,一般有body
body的数据格式
根据请求头中的Content-Type字段来知道以何种方式解码
application/x-www-form-urlencoded
multipart/form-data
application/json
text/xml
例如
首行
版本号+状态码+描述码
HTTP的状态码
200 OK
404 NotFound
403 Forbidden
302 Found
500 Internal Server Error
504 Gateway timeout
header响应头
空行
body
地址栏直接输入
点击收藏夹
html中的link script img a标签
form标签
只能构造GET、POST,无法构造PUT、DELETE、OPTIONS等请求
GET请求
POST请求
浏览器提供的一种通过js构造http请求的方式
html中,通过Ajax发起http请求后,不必等待服务器响应,就可以继续往下执行,等服务器响应回来,再由浏览器通知到我们的代码中
代码中如何使用Ajax
js原生提供Ajax的api,但是很难用
jQuery提供的api,针对原生api的封装,简单很多
跟form比起来,Ajax的优点
两者默认端口不同
URL前缀不同
安全性和资源消耗
为什么需要加密
对称加密
非对称加密
两把密钥:公钥和私钥,用公钥加密的内容只有私钥能解开,同时用私钥加密的内容只有公钥能解开
只能保证单方向传输的安全性:服务器先把公钥以明文传输给浏览器,之后浏览器向服务器传数据前先用这个公钥加密好再传,然后服务器私钥解密。但是服务器到浏览器这个明文传输的阶段,公钥被中间人劫持了怎么办?他也能用公钥解密服务器传来的信息了,只能保证浏览器到服务器传输数据的安全性
两组密钥
这样做的确可以,但是非对称加密算法非常耗时,对称加密快很多
非对称加密+对称加密
数字证书
其实非对称加密+对称加密还是会遭到中间人攻击
数字证书
根本原因是浏览器无法确认收到的公钥是不是服务器自己的,如何证明浏览器收到的公钥是网站服务器的呢?CA机构颁发“身份证”:数字证书
网站在使用HTTPS前,需要向CA机构申领一份数字证书,其中包含持有者信息、公钥信息等
如何防止数字证书被篡改?
数字签名
制作过程
验证过程
为什么制作签名的时候要hash一次
中间人有可能篡改吗?
中间人有可能把证书掉包吗
对称加密
非对称加密
HTTP/1.0默认使用短连接
HTTP/1.1起,默认使用长连接