【温故而知新】HTTP 概述
什么是 HTTP
官方解释是 “因特网的多媒体信使”,通俗点说,就是个送信的。电话机出来之前,人与人(有一定距离)之间的沟通基本靠写信,然后由快递员送发。如果把 web 服务器和客户端比作当时人类,那么 HTTP 便是快递员。客户端通过 HTTP 发送请求,服务器收到后请求后通过 HTTP 返回响应结果。HTTP 生态中常见的客户端便是大家日常上网用到的浏览器(chrome/360浏览器/QQ浏览器),服务器便是几乎对大家不可见,被管理员藏在某个暗暗的机房。

资源
Web 资源统一存放在 Web 服务器中,以供客户端请求使用。官方说法,Web 服务器是 Web 资源的宿主,好比人类是细菌的宿主。
Web 资源类型多样,几乎囊括操作系统中的所有文件类型,图片,视频,文本,如:html/excel/word/ppt/jpg/avi 等。此处提到的资源并非一定是提前写好的不会再变的静态文件,也可能是动态的,根据需要生成的软件程序,如,帮你进行股票交易/信息检索等。
如此多的资源类型,总该有个分类,就像人类分小孩、大人和老人。于是,媒体类型 这一词汇便衍生出来,作为标签打在各个资源上。官方叫法为 MIME (Multipurpose Internet Mail Extension,多用途因特网邮件扩展),也许你会奇怪,为啥起这么个名字,只因当初该词的出现只是为了解决在不同的电子邮件系统之间搬移报文时存在的问题,效果比较好,HTTP 便采用了它,用来描述并标记多媒体内容。
Web 服务器响应请求时会为所有 HTTP 资源对象添加一个 MIME 类型,以供客户端查看(响应头的 content-type 字段)。为了更明显地区分资源类型,MIME 由主要对象类型和特定子类型构成,中间由一条斜杠来分隔。常见的 MIME 类型有数百个,需要的时候再查吧,无需记住每一种。
| 文件格式 | MIME类型 |
| --- | --- |
| HTML | text/html |
| 普通 ASCII文本 | text/plain |
| JPEG | image/jpeg |
| Apple 的 Quicktime 电影 | video/quicktime |
URI/URL傻傻分不清楚?
上面说的 Web资源都有一个自己的名字,这样,客户端可以根据个人兴趣取到对应的资源内容,这个名字被称为 统一资源标识符(Uniform Resource Identifier, URI)。就像 A 班的妖艳货去找 B 班的小明,原本俩人不认识,但 A 只要到 B 班一问便可找到哪一位是小明了。“小明”就是这个人的统一资源标识符。明白了 URI,那啥是 URL呢? 官方解释是 统一资源定位符(Uniform Resource Location)。URI 和 URL两者的关系就好比 “手机” 和 “小米”,小米是一种手机样式,是手机的子集。同样的, URL 是 URI 的一种形式,是 URI 的子集。URI 的另一种不怎么被使用的形式是 统一资源名 URN (Uniform Resource Name),URN 作为特定内容的唯一名称使用,与目前资源所在地无关。URL 和 URN 的大区别就是 URL 是客户端根据资源定位符 URL 在某处服务器上寻找资源,资源定位符包含了服务器地址; URN 则是客户端根据资源名寻找资源,并不指定地址,就根据名称寻找,由于此方式难度较高,暂时仍处于实验阶段,未大范围使用。
http://www.qq.com/index.html
上述字串为一个 URL ,`http` 协议部分, `www.qq.com` 域名部分, `index.html` 文件路径部分。类比寄快递的话, `http` 相当于选择哪家快递公司,`www.qq.com` 相当于邮寄地址,如:上海市徐汇区田林路397号, `index.html ` 相当于收件人所在房屋及其姓名,如:XX小区XX号XX室 张三(收 )。
事务
一个 HTTP 事务由一条(从客户端发往服务器的)请求命令和一个(从服务器发回客户端的)响应结果组成。
HTTP 事务支持几种不同的请求命令,这些命名被称为 HTTP方法 如下表,
HTTP 方法 | 描述
---| ---
GET | 服务器向客户端发送命名资源
PUT | 将来自客户端的数据存储存储到一个命名的服务器资源中去
DELETE | 从服务器删除命名资源
POST | 将客户端数据发送到一个服务器网关应用程序
HEAD | 仅发送命名资源响应中的 HTTP 首部
每条 HTTP 响应报文返回时都会携带一个状态码,用以标识当前请求结果状态。如 200 表示请求成功,具体状态码和对应的原语可参看: https://baike.baidu.com/item/HTTP%E7%8A%B6%E6%80%81%E7%A0%81 。常用状态码(如: 200/301/302/403/400/500 等)需要记住,以便问题快速排查。
报文
HTTP 报文都是纯文本,不是二进制。从 Web 客户端发往 Web 服务器的的 HTTP 报文称为 请求报文,从服务器发往客户端的报文则称为 响应报文,此外,没有其他类型的 HTTP 报文。HTTP 报文包括以下三个部分:起始行、首部字段和主体。

连接
HTTP 是一个应用层协议,不关心网络通信的具体细节,把联网的具体细节交给了通信可靠的因特网传输协议 TCP/IP。 TCP 提供了 无差错的数据传输、排序传输和不分段数据流,保证数据按顺序且完整无误地进行传输。霸气点说,只要建立了 TCP连接,客户端和服务器之间的报文交换就不会丢失、不会被破坏,也不会在接收时出错。没错,就是这么屌!
【温故而知新】HTTP 概述的更多相关文章
- Android群英传笔记——摘要,概述,新的出发点,温故而知新,可以为师矣!
Android群英传笔记--摘要,概述,新的出发点,温故而知新,可以为师矣! 当工作的越久,就越感到力不从心了,基础和理解才是最重要的,所以买了两本书,医生的<Android群英传>和主席 ...
- Python机器学习笔记:SVM(1)——SVM概述
前言 整理SVM(support vector machine)的笔记是一个非常麻烦的事情,一方面这个东西本来就不好理解,要深入学习需要花费大量的时间和精力,另一方面我本身也是个初学者,整理起来难免思 ...
- 【AR实验室】ARToolKit之概述篇
0x00 - 前言 我从去年就开始对AR(Augmented Reality)技术比较关注,但是去年AR行业一直处于偶尔发声的状态,丝毫没有其"异姓同名"的兄弟VR(Virtual ...
- Recurrent Neural Network系列1--RNN(循环神经网络)概述
作者:zhbzz2007 出处:http://www.cnblogs.com/zhbzz2007 欢迎转载,也请保留这段声明.谢谢! 本文翻译自 RECURRENT NEURAL NETWORKS T ...
- Swift3.0服务端开发(一) 完整示例概述及Perfect环境搭建与配置(服务端+iOS端)
本篇博客算是一个开头,接下来会持续更新使用Swift3.0开发服务端相关的博客.当然,我们使用目前使用Swift开发服务端较为成熟的框架Perfect来实现.Perfect框架是加拿大一个创业团队开发 ...
- .Net 大型分布式基础服务架构横向演变概述
一. 业务背景 构建具备高可用,高扩展性,高性能,能承载高并发,大流量的分布式电子商务平台,支持用户,订单,采购,物流,配送,财务等多个项目的协作,便于后续运营报表,分析,便于运维及监控. 二. 基础 ...
- [C#] 进阶 - LINQ 标准查询操作概述
LINQ 标准查询操作概述 序 “标准查询运算符”是组成语言集成查询 (LINQ) 模式的方法.大多数这些方法都在序列上运行,其中的序列是一个对象,其类型实现了IEnumerable<T> ...
- 【基于WinForm+Access局域网共享数据库的项目总结】之篇一:WinForm开发总体概述与技术实现
篇一:WinForm开发总体概述与技术实现 篇二:WinForm开发扇形图统计和Excel数据导出 篇三:Access远程连接数据库和窗体打包部署 [小记]:最近基于WinForm+Access数据库 ...
- Java消息队列--JMS概述
1.什么是JMS JMS即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送 ...
随机推荐
- 动态规划(Dynamic programming) 走楼梯
来自:算法爱好者 有一座高度是10级台阶的楼梯,从下往上走,每跨一步只能向上1级或者2级台阶,要求用程序来求出一共有多少种走法? f(10) = f(9) + f(8) f(9) = f(8) + f ...
- Kettle 初始配置数据量类型资源库
PS:有段时间不使用Kettle了,但总遇到小伙伴问起,写一篇记录下. 文档使用版本:KETTLE 7.0 Kettle资源库可分为文件与数据库,文件型只需要配置好存放路径就行,这边介绍的是配置数据库 ...
- JavaScript(第二十九天)【js处理XML】
随着互联网的发展,Web应用程序的丰富,开发人员越来越希望能够使用客户端来操作XML技术.而XML技术一度成为存储和传输结构化数据的标准.所以,本章就详细探讨一下JavaScript中使用XML的技术 ...
- 2017-2018-1 20155215 第五周 mybash的实现
题目要求 使用fork,exec,wait实现mybash 写出伪代码,产品代码和测试代码 发表知识理解,实现过程和问题解决的博客(包含代码托管链接) 学习fork,exec,wait fork ma ...
- Beta冲刺 第七天
Beta冲刺 第七天 昨天的困难 昨天的困难在一些多表查询上,不熟悉hibernate的套路,走了很多弯路. 第一次使用图表插件,在图表的显示问题上花了一定的时间. 对于页面绑定和后台数据自动填充的理 ...
- java 注解的实现机制
一.什么是注解: 注解是标记,也可以理解成是一种应用在类.方法.参数.属性.构造器上的特殊修饰符.注解作用有以下三种: 第一种:生成文档,常用的有@param@return等. 第二种:替代配置文件的 ...
- Gson序列化对象如何忽略字段
Gson序列化对象如何忽略字段 Gson版本 2.8.2 梗概 用注解@Expose(serialize = false, deserialize = false)在类的成员上以告诉Gson 跳过本字 ...
- Mybatis框架入门
Mybaits框架 一.什么是Mybatis MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了googl ...
- Jenkins+maven+git配置
1) 安装maven 如下图我已装好maven(这是我很早以前装的,安装教程大家可以百度一下,很容易安装的) 2) 安装git客户端 如下图所示,我也安装好了git客户 ...
- Docker学习笔记 - Docker的数据卷容器
一.什么是数据卷容器 如果你有一些持续更新的数据需要在容器之间共享,最好创建数据卷容器. 数据卷容器:用于容器间的数据共享,主动挂载宿主机目录,用于其他容器挂载和共享. 二.数据卷容器的操作 1.创建 ...