HTTP
一.请求方法、用途
- get:获取数据
- post:上传数据
- put:修改数据
- delete:删除数据
- head:获取数据元信息
- connect:建立连接通道,用于代理服务器
- option:列出可对资源实行的请求方法,用来跨域请求
- trace:追踪请求-响应的传输路径
常见问题:get和post的区别
- get会被浏览器自动缓存下来,post不会
- get只能进行url编码,只能接收ASCII 字符,post无限制
- get携带参数一般处于url中,而post处于请求体中,post较为安全
- get具有幂等性,而post没有
- get会在请求时将请求报文一次性发送,而post会先发送header、再发送body
二.返回状态码
- 1xx:目前是协议处理的中间状态,还需要后续操作。
- 2xx:成功状态
- 3xx:重定向状态,资源位置发生变动,需要重新请求
- 4xx:请求报文有误
- 5xx:服务器端发生错误
三.一个 tcp 连接能发几个 http 请求
- 在http1.0协议时,默认情况一个tcp只支持一个http请求,且不支持长链接,在请求发送完成后就会立即断开;如果需要多条保持活跃,则需要在请求头中传入Connection: Keep-Alive,但其依然有部分限制
- 在http1.1协议后,默认支持长链接,只要tcp不断开则可以一直发送http请求,没有上限
四.cookie与session
cookie指服务器向浏览器发送的一小块数据,他在浏览器下次请求时会携带传向服务器;session指服务器和浏览器的一次会话过程
差别
- cookie存在浏览器,而session存在服务器
- cookie 只能保存 ASCII,而session可以保存任何数据
- cookie能长时间保存,而session一般失效较快,关闭浏览器和服务器都会失效
- cookie没有session安全,因为存储地方
- cookie的大小一般只能在4k,而session远大于此
关联
两者可以单独使用,也可以配合使用,配合情况较多。如:浏览器第一次发送请求时,服务器接收并使用session返回用户id,浏览器将id存入cookie,然后第二请求时根据cookie内容请求对应数据
禁用cookie后的登录判断方法
- 每个请求都携带一个关键参数
- Token。在服务器中输出一串字符串,在请求时携带此字符串
五.网站从输入url到跳转发生了什么
1).网络
- 构建请求
- 查找强缓存,如果命中,直接走缓存
- 解析
DNS(域名系统)。由于一般使用的域名,所以需要解析出具体的ip。默认端口80 - 构建
TCP(传输控制协议)连接。这个阶段首先经历三次握手,来确定建立连接;接着进行数据传输,这里接收方接收到数据后会向发送方发送一条确认接收的消息,如果没接收到则判定丢失,并重新发送(*发送时会将较大的数据包拆分,依次发送后由接收方组装);最后通过四次挥手断开 - 发送请求。在tcp确定链接后,浏览器则可以和服务器通信
2).解析
- 构建dom树。这个阶段将html字符串解析为dom对象,最终将dom对象压入dom树结构中
- 样式计算。首先格式化样式表,渲染引擎将css样式表解析为一个结构化对象
styleSheets;接着将样式代名词转换为标准样式(em->px,blod->700,white->#fff等);最终将具体样式绑定到节点,则中间主要为继承和层叠 - 生成布局树。遍历生成的dom树,将其添加到布局树
(只会处理可见元素,如head中和display:none的内容不会处理)
3).渲染
-
建立图层树。对特定的节点进行分层,分为显式合成和隐式合成。前者分为层叠上下文
(html根元素、position不为static且应用z-index、opcity不为1等)和需要裁减的元素(文本超出容器宽度,文本需要换行);后者在于当层级低的节点提升为单独图层后,原本比起高的节点都会成为单独图层 -
生成绘制列表。这一步渲染引擎将图层的绘制拆分为一个个绘制指令,然后按顺序合成一个绘制列表
-
生成图块、位图。将绘制列表交给合成线程,合成线程将图层分块
(一般为256\*256、512\*512) -
显示器显示。在上面的操作完成后,浏览器进程中的viz组件接受到命令,将页面内容绘制到内存,然后内存交给显卡
六.其他
- cros预请求。需预检的请求,首先使用options发去预检到服务器,通过后才可发送实际请求,可以用处理跨域。只允许get、post、head
- tcp三次握手。1.客户端发送请求链接,服务器接收报文段;2.服务器确定报文,返回客户端报文;3.客户端确定报文,向服务器返回最后一段报文
- 如何把项目中的http更换为https?在项目搭建时最请求就进行封装,独立basePath,更换时直接更改basePath;可使用
<meta http-equiv ="Content-Security-Policy" content="upgrade-insecure-requests">替换
