HTTP:的三次握手、四次挥手,
一些常用状态码的问题:1,2,3,4,5 开头的
http 的特点:
(1)无链接的问题:http 建立链接和释放链接的过程。 通过http 持久链接方式解决该问题。
(2)无状态 (同一用户发送多次请求,无法辨别是否是同一用户的)
Session/Cookie
http:中间人攻击问题charlse
https 与http 的区别:
https : http+SSL/TLS
所涉及到的加密手段有:
(1)对称加密 (2)非对称加密
TCP/UDP 两者的区别??
传输协议: TCP 传输控制协议。UDP用户数据报协议
TCP 的特点:
(1)面向网络
三次握手的必要性:
为了解决(同步报文丢失或超时的情况下)超时异常带来了重复建立请求。( 反正法)
//
超时重传策略->会在上传一个同步报文到服务端。
四次挥手
两者建立的链接是全双工的,也就是说,客户端可以向服务端发送数据,而服务端也可以向客户端进行传递数据的操作。
(2)可靠传输:通过停止等待协议实现的
无差错、不丢失、不重复、按序到达
停止等待协议:
无差错情况、超时重传、确认丢失、确认迟到
面向字节流
实际上,客户端一次上服务端发送的字节数的多少,受TCP本身控制,也就是,比如:客户端向服务端 发送了10字节的数据,这些数据不是一次传到服务端的,TCP 可能会将其拆分成 3,7 字节的数据 ,分两次发送到服务端。
流量控制 --->滑动窗口协议
拥塞控制 的特点:
慢开始,拥塞避免
快回复,快重传
//http:超文本传输协议
请求/响应报纹
链接建立流程
HTTP的特点:
Get Post 请求区别?
(1)get 的参数是使用的?分割,追加到Url上面的,而 post的请求参数是放在body中的。
(2)get 请求的是有长度限制的 2048 ,post没有
(3)get 请求的不安全,post请求比较安全。
//另一种方式回答:语义:
get 请求是幂等的,post不是。
get :幂等的,安全的,获取资源,可缓存的。
post:处理资源:与之相反。
安全性:不应该引起server端发生任何变化。(get\head\options)
幂等性:指的是:不管请求多次还是一次,其请求的效果是一样的。(get put delete)
可缓存的:请求是否可以缓存。(get\head)
建立流程:3次握手,4次挥手。
http的特点:(无链接、无状态)
无链接:持久链接(头部字段:colloction:期许进行持久链接,time响应超时时间,之后,四次挥手关闭,max:最多发生多少个Http请求)
如何判断是否结束?请求报文、响应报文:头部字段:
content-length :1024
chunked:post分块传递数据:最后一个块chunked是空的。
无状态:Cookie/Session
https 与 http的区别:
https 是安全的http,这种安全性依赖于SSL/TLS实现的。
IP 网络层,TCP传输层---->SSL/TLS---->应用层HTTP
https建立流程:
会话密钥:随机数S+随机数C+预主密钥 通过算法合成的(对称加密)
对称加密:
非对称加密:
TCP与UDP
UDP 用户数据报协议: 无链接(即不建立链接也不断开链接)尽最大努力支付(不保证安全性)、面向报文(即不拆分,也不合并)
功能:复用、分用、差错检测。
TCP: 传输控制协议
特点:面向链接、可靠传输、面向字节流、流量控制、拥塞控制
开始传输之前,创建链接。数据传输之后,断开连接。
可靠性:无差错、不丢失、不重复、按序到达。
停止等待协议:无差错情况、超时重传、确认丢失、确认迟到。
面向字节流:
发送缓冲-->接受缓冲。
cookie 客户端发送的内容是在http请求报文的Cookie首部字段中。
服务端响应的Cookie是通过http响应的Set-cookie中发送个客户端的。
cookie 的修改方式:
新cookie替换旧cookie进行的。
覆盖规则:name \ path \domain 等要与原 Cookie保持一致。
删除?
设置cookie的expires = 过去的某个时间点 或者 maxAge = 0;
cookie 的安全性保证:
(1)加密处理
(2)只在Https中进行携带Cookie;
(3)设置httpOnly,防止跨站的脚本攻击。
清楚weak所修饰的对象,为什么会被重置为nil?
在调用的dealloc的方法时,回调用 弱引用 清除函数weak_clear_no_lock()
在这个函数中,会根据当前对象指针查找弱引用表,把当前所对应的弱引用,全部取出来,遍历数组中所有的弱引用指针,全都置为nil。
添加weak变量
一个被声明成weak的指针,经过编译器编译过后,首先回调用objc_initWeak方法,然后经过一系列的函数调用栈,最后在weak_register_no_lock 函数中,进行弱引用变量的添加。具体添加位置,通过一个Hash 算法,进行位置查找的,如果说,我们查找到的对应位置,已经存在了弱引用数组,那么,就会用弱引用对象添加到数组中,如果没有,就进行创建弱引用数组,并将弱引用对象,添加到弱引用数组第0个元素,后面的都置为nil.