美文网首页
轻度解释 Http 协议

轻度解释 Http 协议

作者: 菜菜学编程 | 来源:发表于2016-03-25 16:02 被阅读0次

记得我们上一章节说过, 浏览器发给服务器一个约定格式的数据包, 服务器回给浏览器一个约定格式的数据包. 这章节我们来讲讲这个 **约定格式的数据包 **.

为什么本章叫轻度解释, 因为如果重度解释, 可能要花3 4百页去解释, 我们首先对他要有个必要的基本了解就好啦. 轻度加比较口语化的方式, 让菜菜同学对Http有个宏观的了解, 对以后编程不走弯路是十分有用滴.

  • 上述的 约定的数据包 中的 ** 约定 ** 二字, 本质就是 Http 协议. 通俗讲, 协议就是双方约定好的事儿. 我们约定了, 浏览器怎么请求, 服务器怎么响应.

  • 简述 Http 请求报文 (报文就是那个数据包的意思啦)
    我随便抓了一个请求报文, 长这个样子:

req.png

解释下这个报文

第一行是说

  1. 获取资源的方式, 叫GET(浏览器基本有GET和POST两种方式, 区别后续会讲解)
  2. 我要获取这个资源! 路径是是/
  3. 让我们使用 HTTP 1.1 版本愉快的通信吧 (因为协议是有升级迭代的, 新旧版本可能有些许不同, 所以通信前要约定一下)

从第二行到结束, 整个部分都叫 请求头

  1. Accept : 我浏览器支持这些类型的资源显示
  2. Referer(可能会有, 图中没有) : 这个请求是在哪个来源页面发起的. 比如我通过A页面链接a, 点到了B页面, 那么获取B页面的请求头就是A页面的URL
  3. Accept-Language: 我浏览器支持什么语言
  4. User-Agent: 我浏览器叫什么名字
  5. Accept-Encoding 是说, 我支持怎么样的内容编码. 这个例子写的gzip 就是说, 你服务器可以把网页内容用 gzip(一种压缩算法)压缩, 我可以解压滴
  6. Host 是说, 请求的主机(可以是域名, 或者IP, 如果请求的不是80端口这里的格式就会变成 xxx.com:8080)
  7. Connection: Keep-Alive 是告诉服务器, 我们通信完以后, 你可以别立刻断开(因为断开再连接会消耗资源: 具体解释要看TCP协议了, 我们暂时不讲它, 后面用到了详细讲解)
  8. Cookie: 是一个重要的东西, 他是服务器通过响应报文存在浏览器的一些数据. 这个我们实战用到时再讲啦

上述的是一个GET请求, POST请求还会有 请求体 部分, 请求头后有\r\n\r\n四个字符(这是特殊的看不见的字符), 字符后就是请求体. 而每个请求头之间, 是 \r\n 两个字符区分.

\r\n展开讲又是一章字符集特辑. 不过我们暂时简单理解, \r是一个特殊字符, 看不见的, \n也是一个特殊字符看不见的.

扩展 1. 这两个字符来自在古老的打字机时代, 打字员打字换行, 是要按两个键的, 一个\r(表示回到行首), 一个\n(表示去下一行) .

扩展 2. 后面的三大系统 Windows Linux Mac, 他们储存文本时候, 默认的换行符都不同. Windows秉持了打字机的 \r\n, Linux用了\n, Mac用了\r

  • ** 简述 Http 响应报文 **
    抓个响应报文瞧瞧


    resp.png

来解释一下这个报文

第一行是说

  1. 本报文遵循Http1.1协议
  2. 这次响应的状态码是200 (查看详细Http状态码定义)
  3. 状态码描述是 OK

从第二行开始一直到\r\n\r\n处是响应头 (俺挑主要的描述下, 其他有兴趣可以Google)

  1. Date: 服务器时间
  2. Server: 服务器类型(Apache是一种Web服务器)
  3. Last-Modified: 这个资源上次变更时间
  4. ETag : 每次资源变更, 都会生成的一个字符串
    Last-Modified 和 ETag 是和响应状态码304有密切关系的, 后面讲到再说.
  5. Content-Encoding: 编码类型. 前面请求头果说了, 俺支持GZip, 响应时服务器就可以把内容GZip压缩, 然后用这个头表示, 内容是GZip过的. 浏览器看到这个头信息, 就用UnGZip方式去解压响应体的内容, 然后展示.
  6. Content-Length: 响应体有多大
  7. Connection: Keep-Alive : 我服务器没关闭连接, 连接还能继续复用.
  8. Content-Type: 资源的类型. 比如一张图片, 响应头就应该是 image/jpeg之类的, 如果你给成了 text/html, 那浏览器就把你给的响应体内容, 当成网页的方式去渲染啦, 结果肯定乱掉.

\r\n\r\n 之后, 就是响应体内容. 可能是个网页, 或者是个图片等等

  • 关于整个网络上的资源

    1. 你打开浏览器访问网页, 看到的内容可以称为网络上的资源. 这些资源都有自己的一个唯一标识, 这个标识就是我们所说的URL(统一资源定位符)
    2. 现在我们再讲一下网页显示的过程
    3. 我们打开一个网页的URL, 浏览器发了一个请求
    4. 服务器接收到这个请求, 给出响应内容
    5. 浏览器进行网页解析&&渲染(这时候的网页是一个骨架)
    6. 浏览器在解析的同时, 发现网页里的代码又要去请求图片呀, 样式表(css)呀等等的资源, 于是浏览器一边发这些请求, 一边进行解析渲染.
    7. 整个过程完成了, 也就页面终于显示正常了
    8. 在这个过程中, 万一网络问题, 某些资源没加载成功, 页面就可能乱掉, 或者功能不可用, 这个我们在上网过程种会经常见到吧 :)
  • 这里按比较口语的方式讲解的, 便于理解, 比较学术范儿的, 有篇不错的文章, 如果菜菜还没有晕掉, 在心情好的时候, 可以看看
    HTTP协议详解
    如果这篇看不全懂也不用着急, 后面用到时候再讲就OK啦

相关文章

  • 轻度解释 Http 协议

    记得我们上一章节说过, 浏览器发给服务器一个约定格式的数据包, 服务器回给浏览器一个约定格式的数据包. 这章节我们...

  • 轻度解释 Http 协议

    在整个互联网开发中, Http协议是十分重要的. << 目录 >>

  • 菜菜学编程 - PHP

    PHP可以做什么 [如何用PHP做Web]2.1 网页显示全过程实录2.2 轻度解释 Http 协议 2...

  • http和tcp/ip的区别

    一个简单通俗易懂的解释:HTTP协议—— 简单认识TCP/IP协议 解释: http协议负责的是记录应用层的请求消...

  • 图解HTTP小结

    名词解释 超文本传输协议(HTTP,HyperText Transfer Protocol) 传输控制协议(TCP...

  • Http协议详解

    在解释Http协议是什么之前,先解释一下什么是协议、超文本、web服务器。 协议协议是通信计算机双方必须共同遵从的...

  • Http Header

    什么是头信息? resource 这里只作简单解释,详细的自己看http协议。在 HTTP协议中,服务器端的回答(...

  • 从网络协议基础开始到Socket连接池

    本文就从网络协议基础开始到Socket连接池,一步一步解释 HTTP协议、TCP/IP协议、UDP协议、Socke...

  • http协议and浏览器渲染原理

    http协议 HTTP是在网络上传输HTML的协议,用于浏览器和服务器的通信。 术语解释 GET 读取请求,从服务...

  • 菜菜学PHP -- 目录

    1. 学PHP可以做什么 2. 如何用PHP做Web 2.1 网页显示全过程实录 2.2 轻度解释 Http ...

网友评论

      本文标题:轻度解释 Http 协议

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