• HTTP协议


    • http://www.163.com是个URL,叫做统一资源定位符,它有统一的格式。www.163.com是一个域名,表示互联网上的一个位置。
    • 浏览器会将www.163.com这个域名发送给DNS服务器,将它解析为IP地址,然后建立TCP连接(HTTP是基于TCP协议的)。建立了连接以后,浏览器就要发送HTTP的请求,请求的报文格式如图所示。

    • HTTP的报文大概分为三大部分:第一部分是请求行,第二部分是请求的首部,第三部分是请求的正文实体。
    • 目前使用的HTTP协议大部分版本都是HTTP1.1。在请求行中,方法有不同的类型:访问网页最常用的类型是GET,即去服务器获取一些资源;支付场景常用的类型是POST,它需要主动告诉服务端一些信息;向指定资源位置上传最新内容常用的类型是PUT;删除资源常用的类型是DELETE。
    • HTTP请求的发送过程:

        A.HTTP协议是基于TCP协议的,所以它使用面向连接的方式发送请求,通过二进制流的方式传给对方,到了TCP层,它会把二进制流变成一个个报文段发送给服务器。在发送每个报文段后,都需要对方有一个ACK回应,来保证报文可靠地到达了对方,如果没有回应,那么TCP这一层会进行重新传输,直到收到回应。

        B.TCP层发送每一个报文的时候,都需要加上自己的地址(源地址)和它想要去的地方(目标地址),将这两个信息放到IP头里面,交给IP层进行传输。

        C. IP层需要查看目标地址和自己是否是在同一个局域网,如果是,就发送ARP协议来请求这个目标地址对应的MAC地址,然后将源MAC和目标MAC放入MAC头,发送出去即可;如果不在同一个局域网,就需要发送到网关,仍需要发送ARP协议,来获取网关的MAC地址,然后将源MAC和网关MAC放入MAC头,发送出去。

        D.网关收到包后,若发现MAC符合,取出目标IP地址,根据路由协议找到下一跳的路由器,获取下一跳路由器的MAC地址,将包发给下一跳路由器,这样循环下去直到到达目标的局域网。最后一跳的路由器如果发现,目标地址就在自己的某一个出口的局域网上,就在这个局域网上发送ARP,获得这个目标地址的MAC地址,将包发出去。

        E.目标机器发现MAC地址符合,就将包收起来;发现IP地址符合,根据IP头中的协议项解析TCP的头,根据里面有序列号判断这个序列的包是否是想要的,如果是就放入缓存中,然后返回一个ACK,如果不是就丢弃。

        F.TCP头里面还有端口号,如果HTTP的服务器正在监听这个端口号,于是将包发给HTTP服务器,HTTP服务器的进程将请求的内容发给客户端。

    • HTTP的返回报文中的状态码会反映HTTP请求的结果。HTTP返回的过程和请求的过程相反。
    • 因为HTTP1.1存在的实时性、并发性等问题,出现了HTTP2.0和QUIC协议。
    • 类似于支付等重要严肃的场景通常使用HTTPS协议。
    • 加密分为对称加密和非对称加密:对称加密效率高,但是解决不了密钥传输问题;非对称加密可以解决这个问题,但是效率不高。非对称加密需要通过证书和权威机构来验证公钥的合法性。
    • HTTPS是综合了对称加密和非对称加密算法的HTTP协议,既保证传输安全,也保证传输效率。
    • 数字证书的作用:数字签名是为了保证消息传输的保密性,以及身份的验证,而数字证书是为了保证数字签名的有效性。
  • 相关阅读:
    分享:CodeLite 5.1 发布,C++ 集成开发环境
    Elementary Sockets:readn, writen, and readline Functions
    How to handle boost::iostreams::gzip_dec C++ Forum
    分享:python/c++ 深拷贝与浅拷贝(转)写∽好
    我刚刚通过 @盛大网盘EverBox 分享了 Web协议与实践HTTP.、网络协议、缓存技术和....pdf, 欢迎大家下载!
    Is zlib threadsafe?
    print "\v"
    分享:混合编译c和cpp的makefile模板
    Elementary Sockets:readn, writen, and readline Functions
    c的socket教程 二进制 博客频道 CSDN.NET
  • 原文地址:https://www.cnblogs.com/kongzimengzixiaozhuzi/p/13591076.html
Copyright © 2020-2023  润新知