阿西河

所有教程

公众号
🌙
阿西河前端的公众号

我的收藏

    最近访问  (文章)

      教程列表

      抓包专区
      测试专区

      HTTP 协议

      应用层

      应用层协议定义了应用进程间的交互和通信规则,不同主机的应用进程间如何相互传递报文,比如传递的报文的类型、格式、 有哪些字段等等。

      概况

      HTTP 是超文本传输协议,它定义了客户端和服务器之间交换报文的格式和方式,默认使用 80 端口。它使用 TCP 作为传 输层协议,保证了数据传输的可靠性。

      HTTP 是一个无状态的协议,HTTP 服务器不会保存关于客户的任何信息。

      HTTP 有两种连接模式,一种是持续连接,一种非持续连接。非持续连接指的是服务器必须为每一个请求的对象建立和维护 一个全新的连接。持续连接下,TCP 连接默认不关闭,可以被多个请求复用。采用持续连接的好处是可以避免每次建立 TCP 连接三次握手时所花费的时间。在 HTTP1.0 以前使用的非持续的连接,但是可以在请求时,加上 Connection: keep-a live 来要求服务器不要关闭 TCP 连接。HTTP1.1 以后默认采用的是持续的连接。目前对于同一个域,大多数浏览器支持 同时建立 6 个持久连接。

      HTTP 请求报文

      HTTP 报文有两种,一种是请求报文,一种是响应报文。

      HTTP 请求报文的格式如下:

      
      GET / HTTP/1.1
      User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5)
      Accept: */*
      
      

      HTTP 请求报文的第一行叫做请求行,后面的行叫做首部行,首部行后还可以跟一个实体主体。请求首部之后有一个空行,这 个空行不能省略,它用来划分首部与实体。

      请求行包含三个字段:方法字段、URL 字段和 HTTP 版本字段。

      方法字段可以取几种不同的值,一般有 GET、POST、HEAD、PUT 和 DELETE。一般 GET 方法只被用于向服务器获取数据。 POST 方法用于将实体提交到指定的资源,通常会造成服务器资源的修改。HEAD 方法与 GET 方法类似,但是在返回的响应 中,不包含请求对象。PUT 方法用于上传文件到服务器,DELETE 方法用于删除服务器上的对象。虽然请求的方法很多,但 更多表达的是一种语义上的区别,并不是说 POST 能做的事情,GET 就不能做了,主要看我们如何选择。更多的方法可以参 看文档

      HTTP 响应报文

      HTTP 报文有两种,一种是请求报文,一种是响应报文。

      HTTP 响应报文的格式如下:

      HTTP/1.0 200 OK
      Content-Type: text/plain
      Content-Length: 137582
      Expires: Thu, 05 Dec 1997 16:00:00 GMT
      Last-Modified: Wed, 5 August 1996 15:55:28 GMT
      Server: Apache 0.84
      
      <html>
        <body>Hello World</body>
      </html>
      

      HTTP 响应报文的第一行叫做状态行,后面的行是首部行,最后是实体主体。

      状态行包含了三个字段:协议版本字段、状态码和相应的状态信息。

      实体部分是报文的主要部分,它包含了所请求的对象。

      常见的状态有

      200-请求成功、202-服务器端已经收到请求消息,但是尚未进行处理 301-永久移动、302-临时移动、304-所请求的资源未修改、 400-客户端请求的语法错误、404-请求的资源不存在 500-服务器内部错误。

      一般 1XX 代表服务器接收到请求、2XX 代表成功、3XX 代表重定向、4XX 代表客户端错误、5XX 代表服务器端错误。

      更多关于状态码的可以查看:

      《HTTP 状态码》

      首部行

      首部可以分为四种首部,请求首部、响应首部、通用首部和实体首部。通用首部和实体首部在请求报文和响应报文中都可以设 置,区别在于请求首部和响应首部。

      常见的请求首部有 Accept 可接收媒体资源的类型、Accept-Charset 可接收的字符集、Host 请求的主机名。

      常见的响应首部有 ETag 资源的匹配信息,Location 客户端重定向的 URI。

      常见的通用首部有 Cache-Control 控制缓存策略、Connection 管理持久连接。

      常见的实体首部有 Content-Length 实体主体的大小、Expires 实体主体的过期时间、Last-Modified 资源的最后修 改时间。

      更多关于首部的资料可以查看:

      《HTTP 首部字段详细介绍》

      《图解 HTTP》

      HTTP/1.1 协议缺点

      HTTP/1.1 默认使用了持久连接,多个请求可以复用同一个 TCP 连接,但是在同一个 TCP 连接里面,数据请求的通信次序 是固定的。服务器只有处理完一个请求的响应后,才会进行下一个请求的处理,如果前面请求的响应特别慢的话,就会造成许 多请求排队等待的情况,这种情况被称为“队头堵塞”。队头阻塞会导致持久连接在达到最大数量时,剩余的资源需要等待其他 资源请求完成后才能发起请求。

      为了避免这个问题,一个是减少请求数,一个是同时打开多个持久连接。这就是我们对网站优化时,使用雪碧图、合并脚本的 原因。

      更多面试题

      如果你想了解更多的前端面试题,可以查看本站的WEB前端面试题 ,这里基本包涵了市场上的所有前端方面的面试题,也有一些大公司的面试图,可以让你面试更加顺利。

      面试题
      HTMLCSSJavaScript
      jQueryVue.jsReact
      算法HTTPBabel
      BootStrapElectronGulp
      Node.js前端经验相关前端综合
      Webpack微信小程序-

      这些题库还在更新中,如果你有不错的面试题库欢迎分享给我,我整理后放上来;人人为我,我为人人,互帮互助,共同提高,祝大家都拿到心仪的Offer!

      卖前端学习教程

      只需几十元,就能买到培训班的内部教程!开启高薪之路!

      零基础小白阿里P7的教程都有!

      同时长期收购所有培训班的前端教程

      目录
      目录