zoukankan      html  css  js  c++  java
  • HTTP请求过程详解

    1、HTTP请求和响应格式

    1.1.http请求格式

      http请求格式由四部分组成:请求行、请求头、空行、消息体

      

      请求行:是请求消息的第一行,由请求方式(GET/POST/DELETE/PUT)、请求资源路径、http版本号组成

      请求头:请求头中的信息有和缓存相关的头(Cache-Control,If-Modified-Since)、客户端身份信息(User-Agent)等等

      空行:空行表示消息头的内容到此为止,接下来该解析消息体了,(所以空行必不可少)

      消息体:并不是所有的请求都有消息体。

      ------------------------------------------

      http响应格式和请求格式类似,包括:状态行、响应头、空行、消息体

      

      状态行:由http版本号、状态码、状态说明组成

      响应头:响应头是服务器传递给客户端用于说明服务器的一些信息,以及将来继续访问该资源时的策略。

      空行:空行表示消息头的内容到此为止,接下来该解析消息体了,(所以空行必不可少)

      消息体:就是服务器返回的数据信息

    2、HTTP请求过程

      http请求是在三次握手建立tcp连接后开始进行的,基本流程如下:

    (1)    建立TCP连接
      在HTTP工作开始之前,Web浏览器首先要通过网络与Web服务器建立连接,该连接是通过TCP来完成的,该协议与IP协议共同构建Internet,即著名的TCP/IP协议族,因此Internet又被称作是TCP/IP网络。HTTP是比TCP更高层次的应用层协议,根据规则,只有低层协议建立之后才能,才能进行更层协议的连接,因此,首先要建立TCP连接,一般TCP连接的端口号是80
    (2)    Web浏览器向Web服务器发送请求命令
      一旦建立了TCP连接,Web浏览器就会向Web服务器发送请求命令例如:
    (3)    Web浏览器发送请求头信息
      浏览器发送其请求命令之后,还要以头信息的形式向Web服务器发送一些别的信息,之后浏览器发送了一空白行来通知服务器,它已经结束了该头信息的发送。
    (4)    Web服务器应答
      客户机向服务器发出请求后,服务器会客户机回送应答,HTTP/1.1 200 OK应答的第一部分是协议的版本号和应答状态码
    (5)    Web服务器发送应答头信息
      正如客户端会随同请求发送关于自身的信息一样,服务器也会随同应答向用户发送关于它自己的数据及被请求的文档。
    (6)    Web服务器向浏览器发送数据
      Web服务器向浏览器发送头信息后,它会发送一个空白行来表示头信息的发送到此为结束,接着,它就以Content-Type应答头信息所描述的格式发送用户所请求的实际数据
    (7)    Web服务器关闭TCP连接
      一般情况下,一旦Web服务器向浏览器发送了请求数据,它就要关闭TCP连接,然后如果浏览器或者服务器在其头信息加入了这行代码Connection:keep-alive,TCP连接在发送后将仍然保持打开状态,于是,浏览器可以继续通过相同的连接发送请求。保持连接节省了为每个请求建立新连接所需的时间,还节约了网络带宽。
     

    3、浏览器获取资源和渲染过程

       1. 用户输入网址(假设是个 HTML 页面,第一次访问,无缓存情况),浏览器向服务器发出HTTP请求,服务器返回 HTML 文件; (善用缓存,减少HTTP请求,减轻服务器压力)

              2. 浏览器载入 HTML 代码,发现 <head> 内有一个 <link> 引用外部 CSS 文件,则浏览器立即发送CSS文件请求,获取浏览器返回的CSS文件;  (CSS文件合并,减少HTTP请求)

              3. 浏览器继续载入 HTML 中 <body> 部分的代码,并且 CSS 文件已经拿到手了,可以开始渲染页面了;                              (CSS文件需要放置最上面,避免网页重新渲染)

              4. 浏览器在代码中发现一个 <img> 标签引用了一张图片,向服务器发出请求此时浏览器不会等到图片下载完,而是继续渲染后面的代码;    (图片文件合并,减少HTTP请求)

              5. 服务器返回图片文件,由于图片占用了一定面积,影响了后面段落的排布,因此浏览器需要回过头来重新渲染这部分代码;  (最好图片都设置尺寸,避免重新渲染)

              6. 浏览器发现了一个包含一行 JavaScript 代码的 <script> 标签,会立即运行该js代码;              (script最好放置页面最下面)                   

              7. js脚本执行了语句,它令浏览器隐藏掉代码中的某个 <div>,突然就少了一个元素,浏览器不得不重新渲染这部分代码;   (页面初始化样式不要使用js控制)   

              8. 终于等到了 </html> 的到来,浏览器渲染完毕

              9. 如果换肤的话,JavaScript 让浏览器换了一下 <link> 标签的 CSS 路径;

              10. 浏览器向服务器请求了新的CSS文件,重新渲染页面。

      有了上面的过程所以才会看到一个页面除了主要的请求地址,还多出了许多其他请求,类似的如下图:

      

    本文永久更新链接地址http://www.linuxidc.com/Linux/2017-10/147814.htm

  • 相关阅读:
    some tips
    ORA00847: MEMORY_TARGET/MEMORY_MAX_TARGET and LOCK_SGA cannot be set together
    Chapter 01Overview of Oracle 9i Database Perfomrmance Tuning
    Chapter 02Diagnostic and Tuning Tools
    变量与常用符号
    Chapter 18Tuning the Operating System
    标准输入输出
    Trace files
    DBADeveloped Tools
    Chapter 03Database Configuration and IO Issues
  • 原文地址:https://www.cnblogs.com/zgq123456/p/9877413.html
Copyright © 2011-2022 走看看