阅读 20

http专栏

http

刚刚开始只有文本,都只是文字;
后来有了超文本,不仅仅是文字;
后来嫌弃速度慢,有了持久连接,缓存机制;
后来为了安全,有了加密通信
一切都是以用户的需求为导向的,用户的需要越来越高,协议就越来越高级,越来越完善。
 1.你是怎么理解 HTTP 字面上的“超文本”和“传输协议”的?
    超文本”,是文字、图片、音频和视频等的混合体,最关键是有“超链接”,能够从一个“超文本”跳跃到另一个“超文本”,形成复杂的非线性、网状的结构关系。
 2.HTTP 下层都有哪些协议?是如何工作的?
    HTTP 通常跑在 TCP/IP 协议栈之上,依靠 IP 协议实现寻址和路由、TCP
    协议实现可靠数据传输、DNS 协议实现域名查找、SSL/TLS
    协议实现安全通信。此外,还有一些协议依赖于 HTTP,例如 WebSocket
    HTTPDNS 等。
 3.http0.9的改动?
    增加了 HEAD、POST
    等新方法;增加了响应状态码,标记可能的错误原因
    引入了协议版本号概念;
    引入了 HTTP Header(头部)的概念,让 HTTP 处理请求和响应更加灵活;
    传输的数据不再仅限于文本。
 4.四层协议:
    协议栈有四层,最上层是“应用层”,最下层是“链接层”,TCP 和 IP 则在中间:TCP 属于“传输层”,IP 属于“网际层”
 5.IP 协仪目的是解决寻址和路由问题
 6.TCP是“传输控制协议”,基于 IP 协议提供可靠的、字节流形式的通信
 7.URI统一资源标识符,唯一标记资源。URI 常用是URL 统一资源定位符,也就是我们俗称的“网址”
 8.URI 主要有三个基本的部分构成:协议名,主机名:域名或 IP 地址,路径
 9.代理是 HTTP 传输过程中的“中转站”,可以实现缓存加速、负载均衡等功能。
 10.输入一个网址会发生什么?
    先查浏览器缓存,然后是系统缓存->hosts文件->局域网域名服务器->广域网域名服务器->顶级域名服务器->根域名服务器->拿到ip地址和端口号,
    连接如果还是本站直接用已有的连接发请求。
    不是的话就建立tcp/ip链接,发送请求报文,
    浏览器接收服务器返回并渲染。。
 11.HTTP/1.1 规定了八种方法
    GET:获取资源,可以理解为读取或者下载数据;
    HEAD:获取资源的元信息,没有必要用 GET 把整个文件都取下来。再比如,要检查文件是否有最新版本
    ,同样也应该用 HEAD,服务器会在响应头里把文件的修改时间传回来。
    POST:向资源提交数据,相当于写入或上传数据;
    PUT:是“修改”“update”的含义;
    DELETE:删除资源
    CONNECT:建立特殊的连接隧道;
    OPTIONS:列出可对资源实行的方法,在响应头的 Allow 字段里返回;
    TRACE:追踪请求 - 响应的传输路径。
12.URI通常由scheme,://,host:port、path和query 五个部分组成,有的可以省略
13.URI 引入了编码机制:
    URI 只能使用ASCII, ASCII 之外的字符是不支持显示的,而且还有一部分符号是界定符,如果不加以处理就会导致解析出错。
    因此,URI 引入了编码机制,将所有非 ASCII 码字符和界定符转为十六进制字节值,然后在前面加个%。
    如,空格被转义成了%20,三元被转义成了%E4%B8%89%E5%85%83。
14.状态码:
    2**:
        “204 No Content”与“200 OK”基本相同,但没有 body 数据。
        “206”是 HTTP 分块下载或断点续传的基础,在客户端发送“范围请求”、要求获取资源的部分数据时出现,
        它与 200 一样,也是服务器成功处理了请求,但 body 里的数据不是资源的全部
        ,而是其中的一部分。状态码 206 通常还会伴随着头字段“Content-Range”,
        表示响应报文里 body 数据的具体范围,供客户端确认,
        例如“Content-Range: bytes 0-99/2000”,意思是此次获取的是总计 2000 个字节的前 100 个字节。
    3××类状态码表示客户端请求的资源发生了变动,客户端必须用新的 URI 重新发送请求获取资源,也就是通常所说的“重定向”,
        301:永久重定向,请求资源不存在了,需改用新URI访问。
        302:临时重定向”,请求资源还在,暂时用另一个URI访问。
        301和302在响应头用字段Location 指明后续要跳转的 URI,最终的效果很相似,浏览器都会重定向到新的 URI。
        “永久”场景:网站升级HTTPS,原来的HTTP 不用了,这就是“永久”的
        “临时”场景:夜里网站后台要系统维护,服务暂时不可用,这就属于“临时”的
        304:缓存
    4**:
        403表示服务器禁止访问资源。例如信息敏感、法律禁止等
        404的未找到
        408请求超时
    5**:服务器内部错误。
15.HTTP 本质上是无状态的,每个请求都是互相独立、毫无关联的,协议不要求客户端或服务器记录请求相关的信息
16.HTTP并不能100% 保证数据一定能够发送到另一端,在网络繁忙、连接质量差等恶劣的环境下,也有可能收发失败。
17.http的优点和缺点:
    优点:灵活简单拓展性强,基本的报文格式就是“header+body”,头部信息也是简单的文本格式
    缺点:
        明文传输
            明文:报文不使用二进制而是文本形式
            
        “请求 - 应答”加剧HTTP的“队头阻塞”问题,当顺序发送的请求序列中的一个请求因为某种原因被阻塞时,在后面排队的所有请求也一并被阻塞,会导致客户端迟迟收不到数据。
    因时而异:无状态
        一些长连接场景中,需要保存上下文状态,无状态就成为缺点了。
        客户端-服务端通信中,如果场景不需要保存上下文信息,那么无状态就可以减少一些网络资源消耗,也就是优点了。
18.GET 和 POST 有什么区别?
    从缓存的角度,GET 请求会被浏览器主动缓存下来,留下历史记录,而 POST 默认不会。
    从编码的角度,GET 只能进行 URL 编码,只能接收 ASCII 字符,而 POST 没有限制。
    从参数的角度,GET 一般放在 URL 中,因此不安全,POST 放在请求体中,更适合传输敏感信息。
    从TCP的角度,GET 请求会把请求报文一次性发出去,而 POST 会分为两个 TCP 数据包,首先发 header 部分,如果服务器响应 100(continue), 然后发 body 部分。(火狐浏览器除外,它的 POST 请求只发一个 TCP 包)


复制代码

队头阻塞问题是什么!!!!!!

http和udp的区别,去看B战

https

    面试题目:
    1.怎么防止流量劫持的?dns劫持?
        用https
            https怎么做到的呢?
                通过Ca证书认证来检验证书是不是伪造的
    2.如果防止内容劫持?
        用https
            对称加密算法
    3.https如何解决中间人攻击问题的?
        引入CA权威机构,去检查认证
    
复制代码
    流程:
        1.浏览器访问serve
        2.serve端发给你证书,里面有我的公钥和CA签名
        3.浏览器通过证书信任链验证了证书的真实性,然后随机生成一个密钥,用证书的公钥加密,发送给serve
        4.很好,只有服务端知道证书对应的密钥,只有我能解密拿到你给我的密钥
        5.现在全世界只有你我两个人知道浏览器生成的密钥,我们用这个做内容的对称机密吧
    上面ssl协商没详细说:
        c -> s 支持ssl版本,非对称加密算法,随机数1
        s -> c OK,就用ssl,对称算法,随机数2,证书
        c证书认证
        c -> s 随机数3 hash(1,2)= x
        
复制代码
    1.HTTPS 相当于“HTTP+SSL/TLS+TCP/IP”,为 HTTP 套了一个安全的外壳
    2.什么是安全的?
        机密性:传输过程中数据加密,非明文传输
        完整性:数据没被篡改,是完整的
        身份认证:明确是想要的对方,不被第三方劫持
        不可否认: 不能否认已经发生过的行为,不能耍赖皮
    3.https:默认端口号 443
    4.HTTPS 的语法、语义仍然是 HTTP,但把下层的协议由 TCP/IP 换成了 SSL/TLS;
    5.SSL/TLS 是信息安全领域中的权威标准,采用多种先进的加密技术保证通信安全
    6.OpenSSL 是著名的开源密码学工具包,是 SSL/TLS 的具体实现。
    -----------------------------------------------------------------------
    对称加密和非对称加密:
        对称加密: 加密和解密时使用的密钥都是同一个
            TLS常用的对称加密有 AES 和 ChaCha20。
        非对称加密:
            公钥加密后只能用私钥解密,私钥加密后也只能用公钥解密
        
        
        
        
    7.摘要算法是散列函数、哈希函数(Hash Function)
        
        
证书是用来做什么的?
    防止dns劫持,窜改了dns,把域名指向假冒的dns,就是明确我访问的是我要的服务器下的内容
    申请证书的流程:
        1.serve端会生成一对公钥和私钥
        2.server端提取自己的域名,申请者,公钥
        3.生成请求文件.csr,然后serve端发给ca认证机构
        4.CA认证机构审核,审核成功之后生成证书
        5.证书信息:
            签名:对明文信息做hash摘要运算,然后生成签名
            明文信息:
                签发机构
                有效时间
                域名
                申请者
                公钥
        6.CA机构签发证书给serve端
        7.当浏览器请求的时候,serve返回证书给浏览器
        8.浏览器端验证证书
            (1)计算明文信息info的摘要
            (2)用CA证书的公钥解密签名
复制代码

具体操作流程:

    客户端收到内容后,用摘要算法SHA2进行计算获得摘要计算生成摘要
    怎么防止窜改内容呢?
        在原文后附上它的摘要,就能够保证数据的不可篡改性。
    但是怎么防止截获摘要呢?
        数字签名:私钥再加上摘要算法,就能够实现“数字签名”
            服务端: 利用私钥加密摘要和内容
            客户端: 利用公钥解密获取摘要和内容
        然后客户端对内容进行摘要算法计算,获取hash值,然后和服务端发来的摘要进行对比,如果一样的话,说明内容没被篡改
    怎么验证这个证书不是伪造的呢?
        证书体系,操作系统和浏览器都内置了各大 CA 的根证书,上网的时候只要服务器发过来它的证书,
        就可以验证证书里的签名,顺着证书链层层验证,到根证书,就能够确定证书是可信的,从而里面的公钥也是可信的。
复制代码
            (3)对比两个摘要
            (4)验证其他信息
复制代码

CDN的作用

    1.CDN 位于浏览器和服务器之间,主要起到缓存加速的作用
    2.你觉得 CDN 在对待浏览器和爬虫时会有差异吗?为什么?
        CDN在对待浏览器和爬虫时没有差异,因为如果没有验证码或者其他验证方式区分的话,浏览器和爬虫都被视为User Agent(客户代理)
    3.对于静态资源,dns解析拿到的ip每次都一样吗?
        CDN会在DNS的解析中“插上一脚”。DNS 解析可能会给出 CDN 服务器的 IP 地址,这样你拿到的就会是 CDN 服务器而不是目标网站的实际地址。

复制代码