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. 浅谈构建前端自动化工作流程一 之 node

    一.Node环境 1.什么是Node? Node.js类似于jquery.js,不是js文件,也不是一个js框架,而是Server side JavaScript runTime,服务端的一个JS运行 ...

  2. <玩转Django2.0>读书笔记:表单

    1. 表单字段 参考: 官方文档 Django表单字段汇总 2. 表单代码示例(forms.Form) # form.py代码 # 获取数据库数据 choices_list = [(i+1,v['ty ...

  3. 启动两个tomcat服务,以及使用nginx代理实现访问

    1.shoudowm.bat\startup.bat\catalina.bat, 将CATALINA_HOME修改为CATALINA_HOME_2 2.server.xml <Server po ...

  4. vue中使用stylus

    1.创建完成一个初始项目后,通过 npm install stylus -D命令,在项目内安装stylus.(注意:命令结尾 -D 即是 --save-dev 的简写形式) 2.需要安装loader, ...

  5. AGC001F - Wide Swap

    Description 给你一个长度为$n$的排列,每次可以交换$|i-j|\geq K$并且$|a_i-a_j|=1$的数对,问你经过若干次变换后最小字典序的排列是啥 Solution 对$a$做一 ...

  6. tensor内部结构

    内部结构 1.tensor分为头信息区(Tensor)和存储区(Storage): 信息区:tensor的形状(size).步长(stride).数据类型(type),信息区占用内存较少 存储区:数据 ...

  7. leetcode-只出现一次的数字合并两个有序数组

    题目:合并两个有序数组 给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组. 说明: 初始化 nums1 和 nums2 的元素 ...

  8. Mysql 创建及导入表

    连接数据库 打开命令行输入mysql -uroot -p 进行数据库连接 创建并访问数据库 CREATE DATABASE test: //创建数据库test SHOW DATABSAES; //查看 ...

  9. django 标签的使用

    首先重建一个common的app 然后创建__init__使common成为一个包   注意templatetags 名字使固定的 并在下面创建一个名字为fitter的过滤器 注册过滤器app htm ...

  10. 两层fragment嵌套时出现空白,(收藏别人的)

    完美解决 两层Fragment,内层空白 转载:http://blog.csdn.net/bingospunky/article/details/51352400 目录(?)[+] 前言 两层Frag ...