HTTP 权威指南 详解 ( 一、概述 )

最近在解读 《http权威指南》 这本书。之前对于http 的理解仅限于 知道我需要向服务端发送一个 get or post 请求,然后等待服务器 返回给我数据,我再进行下一步的操作,可能作为一名 前端er 会经常这么干吧,但是 我们每天都要用到的 http 请求 到底是一个怎么样的黑盒子呢? 今天刚好有时间,咱们就一起来 探索这部分的未解之谜。

tips

同样,我们在阅读一本书的时候,特别是 技术类的书的时候,我们希望能够带着问题来阅读,那样就会不断的在思考,而不是一味的 接收书中给你灌输的知识,从而更好的理解吧

Questions

  1. http 是什么?
  2. http 用来干嘛?
  3. http 长什么样子?
  4. http 的底层是通过什么来实现的?

带着上面的三个问题,我们来继续往下走:

http (Hypertext Transfer Protocal) 翻译过来就是 超文本传输协议。对,它就是一个 在 万维网(www) 进行通信的时候,所使用的 一个【协议】。

同时,作为前端开发来讲,我们平时见到的 最多的就是 web浏览器 和 web服务器之间的双工通信。(什么是双工,作为一名 通信专业毕业的学生来说。我TM自己都快忘了,什么是双工通信。 其实 双工通信呢还有个弟弟是 单工通信,是两种完全不一样的通信方式,我们可以了解成为 单向通信 和 双向通信。) 当然 http 在别的领域也存在使用,这里我们暂时不讨论。

一、http 是什么?

这里就来解释下,http 是什么?

http 是一个协议,这个协议就是为了 万维网 间通信使用的 一个 协议,说白了就是 人为制定的 一个 协议。

我们常见的就是 web 浏览器 和 web 服务器 之间的 通信,使用的就是 http 这么一个 协议。 

再通俗一点的解释就是  一个 中国人 和 一个 老外 见面聊天,但是由于 语言不同,就需要一个翻译 来 进行双向翻译, 那么这个 http 就充当了 翻译 这么一个角色。 当 客户端 和 服务端 之间 在进行 数据通信的时候,这个协议就起到了 很好的作用。

二、http 用来干嘛?

上面解释了 http 是什么, 接下来,我们来看看 http 具体是用来干嘛的?

我们每天 上班的时候打开的 baidu.com  zhihu.com 等等这些。 在最开始 我们输入域名的那一刻起,到最后我们看到整个页面的时候,这里面的每一个细节都离不开 http 。(有这么神奇么?)

对,就是这么神奇。 比如拿 百度的例子来说明。 我们输入 baidu.com 之后,往往会由极短的 loading 的时间, 那么在这个短短的 时间里面, 具体发生了哪些事情呢?

首先,baidu.com 的首页是  一个  html 文件,那么 我们在 浏览器 输入 baidu.com 然后按下 enter 的一瞬间,浏览器会先 查找 本地host 文件,有没有对应 域名的 ip 如没有,会去 联网 做dns 解析,找到对应的 ip 地址,然后访问 对应 ip 的 服务器,并 发送 http 【请求】, 这个请求 一般均为 请求 index.html 文件。(当然也可以是别的 命名,看服务器如何配置。)

然后, 服务器 接收到这个请求之后呢? 就会 在自己的 服务器中进行 文件的 查找,找啊找,哎? 找到了 index.html 文件, 就将 html 文件中的内容读取出来,并通过 http 【响应】 将 index.html 文件中的内容返回给 客户端。

客户端(这里一般指的是 web浏览器)接收到 服务器 返回的 http 响应到内容。从而进行页面的渲染等等一系列的动作。最后我们就能在页面上看到一个完整的页面了。

这里大概就简单了解释了下, http 的具体的工作方式。

三、http 长什么样子?

那么介绍完上面的 内容,那么 http 协议在 具体的 应用中长什么样子呐?

首先,我们以 《http 权威指南》 书中的 图为例子

那么具体解释下来就是  http 包含了 两部分, 一个是 http 的请求报文,另外就是 http 的响应报文。

1. 请求报文:  请求起始行,请求首部,请求主体( 若请求不带参数,则为空 )
2. 响应报文: 响应起始行, 响应首部,响应主体

请求起始行

主要是 介绍了 请求方法、请求资源、http的版本

响应起始行

主要是 返回了 http 版本,以及响应的状态码

请求首部

Connection: 保持帮连接
Connection-type: 连接 类型
user-agent 请求客户端信息(浏览器版本,系统版本等等)
host: 域名
accept:接收文件类型 文档,图片等
accept-language: (接收文档语言类型)
cookie: 请求的时候会自动 带上该页面的 cookie

响应首部

Date: 格林威治时间
server: 服务端信息(服务器版本等等)
last-modifie: 最后一次链接时间
content-length: 响应内容长度
content-type: 响应内容的 文件类型

请求主体:

如果该请求包含了请求字段: 那么请求主体均为 parameters

响应主体:

根据请求的 文档类型进行对应的返回, 比如 text/html 则返回 html 的 文档
我们常见的可能是 返回的一个 数据对象。等等

TIPS

我们再拿百度首页为例:

这是一个 http 请求以及响应,这里的 general 可以理解成为 http 请求 和 响应 的请始行 的一个 公共部分
1、general

http 请求 和 响应 的请始行 的一个 公共部分
2、response header

http 响应头部, 包含了各种 属性
3、request header

http 请求头部,同样也包含了各种属性(其中具体具备什么功能这里不细说,后面会介绍到)
4、query string parameters

get 方法 在 http 请求时候带的参数, 这里也就是 【请求主体】

5、 response

这里就是 http 响应 的 主体。

总结

以上内容就是 http 请求响应,具体的样子了。

四、http 能够现实的原理?

前面的 三小节,让我们大概知道了 http 具体是一个什么样子

那 为什么 这个协议就能够完成 数据通信呢? 其深层次的 原理是什么?

Tips

这个时候,我们就得回到我们大学时候上 的 计算机课程 基础篇章了。(大学不努力,老大做PM)

还是上一张图,来说明问题。

计算机网络通信 原理, 经典图。

http 处于 这五层中 应用层,也就是说 http这一层其实是不涉及到 数据通信功能的。它只是在 为通信之前做了一系列的 准备工作而已。(具体是什么,我们在后面的具体章节再具体介绍。)

那么 接下来就简单了, http 不需要关心 网络通信的具体细节,这些细节都交给了 可靠的 TCP/IP 也就是
传输层 和 网络层 。 写在最后, intelnet 自身就是 基于 TCP/IP,TCP/IP 是全世界计算机和网络设备常用的层次化分组交互网络协议集合。只要建立了 TCP/IP 连接,客户端 和 服务器之间的 报文交换就不会丢失,不会被破坏。也不会在接收时出现错误的顺序等问题,总之 TCP/IP 就是很靠谱。http 把数据通信 交给 它,剩下的就 交给网速了吧,当然服务器不能太差,服务器中存在的一些 读写操作也不能不优化,之前的一家公司,生产环境 一个 api 能响应 5,6 秒钟,后端 coder 也无动于衷也是心累。

HTTP 权威指南 详解 ( 一、概述 )的更多相关文章

  1. Javascript权威指南——第一章Javascript概述

    示例:javascript贷款计算器 相关技术: 1.如何在文档中查找元素: 2.如何通过表单input元素来获取用户的输入数据: 3.如何通过文档元素来设置HTML内容: 4.如何将数据存储在浏览器 ...

  2. DNN7网站系统需求及部署指南详解

    此安装指南适用于DNN6.x和DNN7.x在本地测试及主机的安装.最近QQ群里不少朋友问我关于DotNetNuke的安装和运行的问题. 为了让大家更清楚地了解DNN的安装方式,我在这里对DotNetN ...

  3. 《CSS权威指南》双鱼书概述——第一章CSS和文档

    前言:CSS即层叠样式表 主要是影响一个或者一组文档的表现,没有文档,CSS毫无用处. 一.web的衰落 完全结构化的文本太过古板,太平常,虽然有N个理由要求使用结构化标记,但HTML已然走到了今天. ...

  4. cassandra权威指南读书笔记--cassandra概述

    cassandra是一个开源的.分布式.去中心化.弹性可扩展.高可用.容错.可调一致性.面向行数据库,分布式设计基于Amazon Dynamo,数据模型基于Google BigTable.cassan ...

  5. org.apache.log4j.Logger详解

    org.apache.log4j.Logger 详解 1. 概述 1.1. 背景 在应用程序中添加日志记录总的来说基于三个目的 :监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析工 ...

  6. Fragment详解之三——管理Fragment(1)

    相关文章: 1.<Fragment详解之一--概述>2.<Fragment详解之二--基本使用方法>3.<Fragment详解之三--管理Fragment(1)>4 ...

  7. javascript 函数详解2 -- arguments

    今天我们接着上篇文章来继续javascript函数这个主题.今天要讲的是函数对像中一个很重要的属性--arguments. 相关阅读: javascript 函数详解1 -- 概述 javascrip ...

  8. atitit.mp4 视频文件多媒体格式结构详解

    atitit.mp4 视频文件多媒体格式结构详解 1. 一.基本概念1 2. MP4文件概述2 3. mp4是由一个个“box”组成的,2 4. 典型简化mp43 5. Fragments5 6. r ...

  9. org.apache.log4j.Logger 详解

    org.apache.log4j.Logger 详解 1. 概述 1.1. 背景    在应用程序中添加日志记录总的来说基于三个目的 :监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计 ...

随机推荐

  1. MySQL 栏位修改为区分大小写

    ) BINARY CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL; ) BINARY CHARACTER SET utf8 COLLATE utf8_ ...

  2. mysql远程连接/访问速度慢的解决方案

    连接阿里云服务器上的数据库,速度很慢 账户密码正确 已关闭防火墙 修改 /etc/my.cnf,添加配置skip-name-resolve [mysqld] skip-name-resolve 在连接 ...

  3. 多人合作项目如何去管理git仓库

    前记:在git之前依稀记得有SVN去管理代码仓库,现在多用git去管理我们的代码:现在一般的项目大多数是多人同时开发,这样就会存在一个问题就是如何去协调开发:这也是lz当前使用git开发管理的些许经验 ...

  4. 2018-4-5-MEMS

    微机电系统,研究生在学习纳米操作方面的知识的时候了解过一些,有时间的话写点东西温故知新.

  5. sqlzoo:6

    第一個例子列出球員姓氏為'Bender'的入球數據. * 表示列出表格的全部欄位,簡化了寫matchid, teamid, player, gtime語句. 修改此SQL以列出 賽事編號matchid ...

  6. SDN网络虚拟化中有效协调的映射算法

    来自论文An efficient and coordinated mapping algorithm in virtualized SDN networks,来自期刊<信息与电子工程前沿> ...

  7. Linux服务器运维基本命令

     ========Linux 服务器常用命令================ cd / 根目录cd ../ 上级目录   ls 列出文件目录    clear 清空控制台tar cvzf name.C ...

  8. SSM 框架搭建

    SSM框架搭建(Spring.SpringMVC.Mybatis) 一:基本概念 Spring :      Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框 ...

  9. HTML入门13

    构建表格 使用colspan和rowspan添加无单位的数字值作为属性来实现行合并和列合并: <col>来定义列的样式,每一个<col>都会制定每列的样式,对于不需要指定列的样 ...

  10. 4.23 Linux(3)

    2019-4-23 19:03:53 买的服务器第三天感觉超爽!! 发现学习Linux超爽,有种操作的快感!!!!!是Windows比不了的!! 阿里巴巴镜像源 : https://opsx.alib ...