美文网首页计算机网络计算机网络基础原理
你能找到的最全面的Http协议分析

你能找到的最全面的Http协议分析

作者: 小怪兽大作战 | 来源:发表于2019-04-03 22:03 被阅读29次

    我们在浏览器中输入www.baidu.com,点击回车,百度的网页就会出现在浏览器中。这个过程中涉及了很多计算机网络的知识点:万维网、域名和域名解析、统一资源定位符(URL)、TCP协议、HTTP协议、超文本标记语言HTML、HTTP2.0、HTTPS等。下面我们一个一个来学习这些名词。

    万维网

    万维网并非某种特殊的计算机网络,万维网是一个大规模的、连机式的信息存储场所。万维网存在着众多存储信息的站点,通过和这些站点通信可以获取其中的内容。
    万维网以客户端/服务器方式工作,客户端通过TCP/IP协议与服务器进行通信。
    站点中存储的是超媒体信息,包含文字、图片、音频、视频文件等。
    万维网中存在众多的信息,通过统一资源定位符URL来标识每一条信息。通过超文本传输协议来传输信息。

    域名与域名解析

    因特网在通信时使用IP地址来进行寻址。但是32位的IP地址不容易人们记忆,通过设计容易记忆的域名来方便实用,并且在域名和IP地址之间建立映射来完成域名到IP地址的转换。
    因特网域名采用树状结构命名。


    image.png

    域名的结构由标号序列组成,各标号之间用点隔开。


    image.png

    域名服务器保存域名到IP地址的映射,通过域名解析协议完成域名到IP地址的解析。
    域名服务器也是树状连接,通过逐层查找完成域名协议。


    image.png

    统一资源定位符URL

    万维网上有大量的信息,通过怎样的方法来访问到需要的信息呢?
    万维网使用统一资源定位符URL来标志万维网上的各种文档,并使每一个文档在整个因特网上具有唯一的标识符/URL。
    URL的一般形式由以下四个部分组成:
    <协议>://<主机>:<端口号>/<路径>
    比如:http://www.aspxfans.com:8080/news/index.asp?boardID=5&ID=24618&page=1#name
    上面的URL中,使用的协议使HTTP协议,主机的域名是www.aspxfans.com,端口号是8080,路径是news/index.asp?boardID=5&ID=24618&page=1#name。
    从域名后面的最后一个/到?是文件名部分。
    从?到#是参数部分,通过键值对显示,以&分割。
    #后面是锚部分。

    TCP协议

    TCP是面向连接的运输层协议,TCP提供可靠的、全双工的、面向字节流的通信服务。TCP使用连续停止等待方法实现可靠传输,使用流量控制(接收端控制发送窗口),通过慢开始、拥塞避免、快重传、快恢复来实现拥塞控制。

    Http协议

    HTTP协议定义了浏览器怎样向万维网请求万维网文档,以及服务器怎样把文档传送给浏览器。HTTP是面向事物的应用层协议,他是万维网上能够可靠地交换文件的重要基础。
    每个万维网网点都有一个服务器进程,它不断监听TCP的端口80,以便发现是否有浏览器向他发出连接请求。一旦监听到连接请求并建立了TCP连接,浏览器就向万维网服务器会浏览某个页面的请求,服务器返回请求的页面作为响应。在浏览器和服务器之间的请求和相应的交互,必须按照规定的格式和遵循一定的规则,这些格式和规则就是超文本传输协议HTTP。

    HTTP请求报文

    客户端发送的一个HTTP请求消息由请求行、请求头、空行、请求数据四个部分组成。


    image.png

    以下面一个GET请求为例,分析请求报文

    GET /562f25980001b1b106000338.jpg HTTP/1.1
    Host img.mukewang.com
    User-Agent    Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36
    Accept    image/webp,image/*,*/*;q=0.8
    Referer    http://www.imooc.com/
    Accept-Encoding    gzip, deflate, sdch
    Accept-Language    zh-CN,zh;q=0.8
    
    

    第一部分:请求行,由请求类型,请求文件,HTTP版本组成
    第二部分:请求头,紧接着请求头,保存附加信息,如Host(主机号),User-Agent(用户代理,向服务器提供所使用的浏览器版本,操作系统,浏览器内核等信息),Accept(浏览器希望服务器返回的数据格式),Content-Type(发送端发送的实体数据的数据类型),Accept-Encoding(希望的编码方式)
    第三部分:空行,即使第四部分为空,请求头后面也必须有空行
    第四部分:请求数据,可以为空

    HTTP响应报文

    服务端返回给客户端的相应报文分为三个部分:状态行、响应头部、实体数据
    以下面为例来分析HTTP相应报文

    HTTP/1.1 200 OK
    Date: Fri, 22 May 2009 06:07:21 GMT
    Content-Type: text/html; charset=UTF-8
    
    <html>
          <head></head>
          <body>
                <!--body goes here-->
          </body>
    </html>
    

    第一部分:状态行,由HTTP版本号、状态吗、状态消息组成
    第二部分:相应头部,如:Date(消息发送时间),Content-Type(数据类型)
    第三部分:空行
    第四部分:相应正文,可以是数据信息(比如JSON,XML格式数据),也可以是HTML代码

    HTTP中状态码

    我们知道HTTP相应报文中,状态行中有状态码,每种状态码都包含了特定的信息。
    状态码由三位数字组成,第一位数字定义了相应的类别,共分为五种类别:
    1xx:指示信息,标识请求已经接收,正在进行处理。
    2xx:成功,表示请求已经被成功接收、理解、接收
    3xx:重定向,如要完成的请求还必须采取进一步的行动
    4xx:客户端错误,比如请求语法错误或请求无法实现
    5xx:服务端错误,比如服务器失效无法完成请求。
    常见状态码:
    200 OK //客户端请求成功
    400 Bad Request //客户端请求语法错误,不能被服务器理解
    403 Forbidden //服务器收到请求,但是拒绝服务
    404 Not Found //请求资源不存在
    500 Internal Server Error //服务器发生不可预期的错误
    503 Server Unavaliable //服务器当前不能处理客户端请求,一段时间后可能恢复

    HTTP请求方法

    Http1.0定义了三种请求方法:GET,POST,HEAD
    Http1.1新增了五种请求方法:OPTIONS,PUT,DELETE,TRACE,CONNECT
    GET:请求指定的页面,请求参数在URL中。
    POST:向服务器提交数据进行处理请求(例如上传表单和文件)。数据在请求体中。
    HEAD:类似于GET,只不过返回的相应中没有具体的内容,用于获取报头
    PUT:在指定URL下存储一个文档
    DELETE:删除指明的URL所标志的资源
    TRACE:用来进行回环测试的请求报头
    CONNNECT:HTTP1.1协议中预留给能够将连接方法改为管道方式的代理服务器

    HTML语言

    超文本标记语言/HTML是一种制作万维网页面的标准语言,它消除了不同计算机之间信息交流的障碍。

    HTTPS

    HTTP1.x在传输数据时,每次都需要重新建立连接,无疑增加了大量的延迟时间,特别是在移动端更为突出。
    HTTP1.x在传输数据时,所有传输的内容都是明文,客户端和服务器端都无法验证对方的身份,这在一定程度上无法保证数据的安全性。
    HTTP1.x在使用时,header里携带的内容过大,在一定程度上增加了传输的成本,并且每次请求header基本不怎么变化,尤其在移动端增加用户流量。
    虽然HTTP1.x支持了keep-alive,来弥补多次创建连接产生的延迟,但是keep-alive使用多了同样会给服务端带来大量的性能压力,并且对于单个文件被不断请求的服务(例如图片存放网站),keep-alive可能会极大的影响性能,因为它在文件被请求之后还保持了不必要的连接很长时间
    总的来说HTTP1.X有时延长、不安全(都是明文)、header过大,效率低的问题。
    因此,HTTPS出现解决了这些问题。
    (1)HTTPS协议需要到CA申请证明,一般免费证书很少,需要交费。
    (2)HTTPS协议运行在TCP之上,所有传输的内容都是明文。HTTPS运行在SSL/TLS之上,SSL/TSL运行在TCP之上,所有传输内容都经过加密。


    image.png

    (3)HTTP和HTTPS使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443

    HTTP2.0

    HTTP 2.0采用二进制格式而非文本格式
    HTTP 2.0是完全多路复用的,而非有序并阻塞的——只需一个连接即可实现并行
    使用报头压缩,HTTP/2降低了开销
    HTTP 2.0让服务器可以将响应主动“推送”到客户端缓存中

    相关文章

      网友评论

        本文标题:你能找到的最全面的Http协议分析

        本文链接:https://www.haomeiwen.com/subject/kpizbqtx.html