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. Linux学习之文件系统权限及表示

    三类人 用户主(user:u):文件的所有者 同组人(group:g):与文件主同组的用户 其他人(other:o):除用户主和同组人外的其他所有人 三种权限 读权限(r):指用户对文件或目录的读许可 ...

  2. 如何用 js 获取虚拟键盘高度?(适用所有平台)

    原文地址:https://segmentfault.com/a/1190000010693229?utm_source=tag-newest

  3. H5分享功能

    web端分享功能 https://www.cnblogs.com/sdcs/p/8328367.html H5分享功能 公司里面做web开发经常会做H5页面,今天整理分享一下. 微信公众号平台 步骤一 ...

  4. [转]webpack中require和import的区别

    webpack中可以写commonjs格式的require同步语法,可以写AMD格式的require回调语法,还有一个require.ensure,以及webpack自己定义的require.incl ...

  5. ubuntu的安装及ubuntu中安装mysql和tomcat

    一.安装ubuntu 1.创建虚拟机 2.向导选择自定义 3.然后下一步再下一步,直到这里,稍后再安装系统 4.然后选择linux,注意这里下面的下拉选择Ubuntu64,因为我们下载的是64位的,如 ...

  6. 对象关系映射 ORM

    1.1 作用 MTV框架中包括一个重要的部分,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库,这极大的减轻了开发人员的工作量,不需要面对因 ...

  7. go-mod 入门

    Q群有人问go mod 问题,自己也忘了些.顺便再整理下. GO111MODULE可以设置为三个字符串值之一:off,on或auto(默认值). off 则go命令从不使用新模块支持.它查找vendo ...

  8. spark streaming中维护kafka偏移量到外部介质

    spark streaming中维护kafka偏移量到外部介质 以kafka偏移量维护到redis为例. redis存储格式 使用的数据结构为string,其中key为topic:partition, ...

  9. codeforces 13 b

    给你三根线段判段是否组成了A 条件,两条线段交于端点并且夹角不大于90,第三条线段端点在两条线段上并且划分的大小满足 大:小<4:1 注释很全.(主要是我记不清楚了,,好像过了一个多星期了) # ...

  10. react基础篇 整理(一)

    备注不知道为啥不能到出图片,详细知识自己百度一下就可以了,很简单的.画这个是为了更好的梳理知识,公司有个App项目,项目可控,所以尝试一下用React-native去做一下试试.