全面解析HTTP(一)

来源:互联网 发布:手机淘宝联盟何时返利 编辑:程序博客网 时间:2024/06/06 08:23

全面解析HTTP(一)

  • 【前言】很久以前学过《计算机网络》这本书,但是大部分平时编程用不上的知识点忘得一干二净。可是知识要形成体系才对,所以教研室的师兄买了俩本好书我立即借来研读,并且在笔记本中手动整理好知识点。怕笔记本丢失,所以在把知识点写成博客,存入云端也加深知识点。
  • 【注意】此文是我研读《图解HTTP》这本书的笔记,可以说把一本书的重点给总结概括,也强烈向大家推荐此书,适合用于打牢基础。看此文前请大家看看我之前写的这篇博客网络编程系列之一:Http协议介绍。该文向大家详细介绍了:URL,请求/响应报文

               这里写图片描述
               这里写图片描述
    - 接下来这图是我用xmind画的本文的大体脉络与目录
             这里写图片描述

(一)网络基础TCP/IP协议簇

1.TCP/IP协议簇分为四层:应用层、传输层、网络层和数据链路层。如下图:

      这里写图片描述
 
- 应用层:决定了向用户提供应用服务时通信的活动,比如FTP,DNS以及今天要讲的HTTP。
- 传输层:对于上层应用层,提供处于网络连接中的俩台计算机之间的数据传输。
- 网络层:该层规定了通过怎样的传输路径到达对方计算机,并把数据包传给对方。
- 数据链路层:用来处理连接网络硬件部分。
- 【注意】发送端在层与层之间传输数据时,没经过一层必定会被打上该层所属的首部信息。反之,接收端在层与层传输数据时,每经过一层会把对应的首部消掉。

2.与HTTP关系密切的协议:IP,TCP,DNS

  • IP协议作用是把各种数据包发送给对方,要保证确实传送到对方那里需要满足各类条件,其中俩个重要条件是:IP地址和MAC地址。IP地址指节点被分配到的地址,MAC地址指的是网卡所属的固定地址。
  • TCP协议提供可到的传输服务,位于传输层。字节流服务:为了方便传输,将大块数据分割成以报文段(segment)为单位的数据包进行管理。可靠的服务是指:能过把数据准确可靠地传送给对方,也就是三次握手过程(将会在下一篇博文中详细介绍三次握手和四次挥手)。握手中使用了TCP的标志(flag)—SYN(synchronize)和ACK(acknowledgement).

          这里写图片描述

  • 负责域名解析的DNS服务:DNS协议提供通过域名查找IP或是通过IP反查域名。

3.各种协议与HTTP协议的关系

  • 接下来放大招了,对于你在浏览器中输入url到浏览器显示HTML页面的背后过程到底是什么呢?大家可以看我转载的这篇博文:当你在浏览器地址栏输入一个URL后回车,将会发生的事情?或者看下面这幅图:

          这里写图片描述

  • 接下来的URL解析在以前的博文中写过,这里不再提及。

(二).简单地HTTP协议

1.HTTP请求/响应报文

  • 以前博文介绍过,不再提及。

2.持久连接节省通信量

  • 在HTTP协议初始版本中每进行一次HTTP通信就要断开一次TCP连接。
          这里写图片描述

  • 在HTTP/1.1中,所有连接都默认持久连接:建立一次TCP连接之后可以进行多次请求响应交互。减轻服务端负担,也是HTTP请求响应可以更早结束。
          这里写图片描述

3.管线化(pipelining)

  • 同时并行发送多个请求,不需要一个接一个地等待响应!

          这里写图片描述

4.使用Cookie的状态管理

  • HTTP是无状态的协议,它不对之前发生过的请求和响应的状态进行管理。当一个需要登录认证的页面本身无法进行状态管理时,每次跳转到新的页面岂不是需要重新登录,为了解决这些矛盾,引入Cookie机制。

          这里写图片描述

(三).HTTP报文内的HTTP信息

  • 讲过不讲,可在此博文中查阅HTTP协议基础

(四).返回结果的HTTP状态码

  • 状态码的职责是当客户端向服务器端发送请求时,描述返回的请求结果,状态码类别如下:
           这里写图片描述
  • 1、2XX 成功:请求被正常处理

    1.1 200 OK

    表示从客户端发来的请求在服务器端被正常处理

    1.2 204 No Content

    表示服务器接收的请求以成功处理,但没有资源可返回,即:响应报文中不含实体的主体部分

    1.3 206 Partial Content

    表示客户端进行了范围请求且服务器成功执行了这部分的GET请求,响应报文中包含由Content_Range指定范围的实体内容

    2、3XX 重定向: 服务器需要执行某些特殊处理以正确处理请求(即URI地址或者资源的缓存的资源有效时间过期)

    2.1 301 Moved Permanently

    永久性重定向:表示请求的资源已被分配了新的URI,以后应使用资源现在的URI,如果已经保存了书签,这时候应该按照Location首部提示的URI重新保存

    2.2 302 Found

    临时性重定向:表示请求的资源已被分配到了新的URI,希望(本次)能使用新的URI访问

    2.3 303 See Other

    表示请求对应的资源存在另一个URI,应该使用GET方法定向获取请求的资源

    PS:当301、302、303响应状态码返回,几乎所有浏览器都会把POST改成GET,并删除请求报文内的主体,之后请求自动再次发送

    301、302标准禁止将POST改为GET,但实际中都会允许这么做

    2.4 304 Not Modified

    表示客户端发送得附带条件的请求时,服务器运行请求访问,但未满足条件的情况,304返回时,不包含任何响应的主体部分

    2.5 307 Temporary Redirect

    临时重定向:禁止将POST转换为GET,该状态码会严格遵守浏览器标准

    3、客户端错误:4XX的响应结果表明客户端是发生错误的原因所在

    3.1 400 Bad Ruquest

    请求报文存在语法错误

    3.2 401 Unauthorized

    发送的请求需要有通过http认证(BASIC认证、DIGEST认证)的认证信息

    PS:若之前已经进行了一次请求,则表示用户认证失败

    返回含有401的响应必须包含一个适用于被请求资源的WWW-Authenticate首部用来质询用户信息

    3.3 403 Forbidden

    对请求资源的访问被服务器拒绝(服务端没有必要给出拒绝的详细理由,如果想做说明,可在实体主体部分对原因进行描述)

    举例:未获得文件系统的访问授权、访问权限出现某些问题等

    3.4 404 Not Found

    服务器上无法找到请求的资源

    4、 5XX服务器错误:服务器本身发生错误

    4.1 500 Internal Server Error

    服务器端执行请求时发生错误

    4.2 503 Server Unavailable

    服务器暂时处于超负载或者正在停机维护,现在无法处理请求

(四).与HTTP协作的Web服务器

1.用单台虚拟主机实现多个域名!

  • 在互联网上,域名通过DNS服务映射到IP地址之后访问目标服务器。当请求发送到服务器时,已经是以IP地址访问了。

            这里写图片描述

  • 因此HTTP请求需要在Host首部内完整指出访问服务器的域名URL或主机名,从而识别同一个IP下的不同虚拟主机。

2.通信数据转发程序:代理、网关、隧道

  • 代理:代理服务器的基本行为是:接受客户端发送的请求后转发给其他服务器,从源服务器返回的响应转发给客户端。

这里写图片描述

  • 在HTTP通信中,可级联多台代理服务器。请求响应转发经过数台类似锁链一样连接起来的代理服务器。转发时需要附加Via首部字段标记出经过的主机信息。那么为什么需要代理服务器呢?我用xmind写了三点:

            这里写图片描述

  • 代理又分为缓存代理:预先将资源的副本保存在代理服务器上;透明代理:转发请求或响应时,不对报文做任何加工的代理类型。

  • 网关:网关可以使通信线路上的服务器提供非HTTP协议服务。利用网关提高通信的安全性。
           这里写图片描述

  • 隧道:隧道按照要求建立一条与其他服务器的通信链路,届时使用SSL等加密手段进行通信!

          这里写图片描述

(五).HTTP首部

1.请求/响应报文的格式:请看HTTP协议基础。

2.HTTP首部字段:

  • HTTP首部字段是构成HTTP报文的重要因素之一,在客户端与服务器之间以http协议传输信息的过程中,起到传递额外重要信息的作用。
  • 首部字段结构:

例如:以Content-Type来表示报文主体的对象类型

Content-Type:text/html

另外,字段值对应的单个http首部字段可以有多个值,比如

Keep-Alive:timeout=15,max=100

        这里写图片描述

  • 通用首部字段:请求和响应报文都会使用的首部。

             这里写图片描述

  • 请求首部字段:从客户端向服务器发送请求报文时使用的首部,补充了请求的附加内容、客户端信息、相应内容相关优先级信息。

             这里写图片描述

  • 响应首部字段:从服务器向客户端返回响应报文时使用的首部。补充了响应的附加内容,也会要求客户端附加额外的内容信息。

            这里写图片描述

  • 实体首部字段:针对请求报文和响应报文的实体部分使用的首部,补充了资源内容更新时间与实体有关的信息。
           这里写图片描述

【后记】全面解析HTTP(一)到此结束,接下来总结讲解HTTPS的内容。
传送门:全面解析HTTP(二)

0 0
原创粉丝点击