HTTP图解(大牛必经之路)
本节内容
俗话说好的开发,底层知识必须过硬,不然再创新的技术,你也理解不深入,比如python web开发工程师,想要学习任何一个框架,底层都是http和socket,底层抓牢了,学起来会很轻松,所以楼主今天特意写了一篇底层的博客,来源于《HTTP图解》这本书。下载内容在本节末尾,可以自行前去下载观看,比我个人了解得多要全面很多,不过不要忘记点赞哈!!
本文只要内容:
- 了解web及网络基础
- 简单的http协议
了解web及网络基础
1、使用http协议访问web
当我们用网页浏览器(web browser)的地址栏中输入URL时,Web页面的呈现过程:
- 输入URL时,可以看到web页面,即使不了解运作原理,也能看到页面
- 输入URL后,信息会被送往某处
- 然后从某处获得的回复,内容就会显示在web页面上
web页面不可能凭空显示出来,根据web浏览器地址栏中指定的URL,web浏览器会从服务器端获取文件资源等信息,从而显示web页面。
像这一套流程就可以称作是客户端(client)向服务端(server)获取服务器资源
web使用一种名为HTTP(HyperText Transfer Protocol),超文本传输协议作为规范,完成从客户端到服务端等一系列运作过程。而协议是指规则的约定。可以理解成,web是建立在HTTP协议上通信的。
2、网络基础TCP/IP
为了了解HTTP,必须的了解TCP/IP协议族。
通常使用的网络实在TCP/IP协议族的基础上运作的。而HTTP就属于他的一个子集。
2.1、TCP/IP 协议族
计算机与网络设备要相互通信,双方就必须基于相同的方法。比如:如何探测到通信目标、由哪一方先发起通信、使用哪种语言等等好多规则。然而这种规则就是所谓的协议(protocol),你要用我就按照我协议的规则来。常用协议有:tcp,http,ftp,dhcp,dns,ip,pppoe,udp,snmp,icmp等等。
像这样把与互联网关联的协议集合起来总称TCP/IP,TCP/IP实在IP协议通信过程中,使用到的协议族的统称
2.2、TCP/ip的分层管理
TCP/IP协议族重要的一点就是分层。TCP/IP协议族按层次划分分别是:应用层、传输层、网络层和数据链路层。把塔层次化是有好处的。比如:当某个地方需求变更时,就必须吧所有的整体替换掉。而分层之后只需要把变动的层替换掉即可。下面介绍一下每个层次的作用
应用层
应用层决定了向用户提供应用服务时通信的活动。比如:ftp,dns服务就是其中的两类。HTTP协议也处于该层。
传输层
传输层对上层应用层,提供处于网络连接中的两台计算机之间的数据传输。在传输层有两个性质不同的协议:TCP和UDP。
网络层
网络层用来处理网络上流动的数据包。数据包是网络传输的最小单位。该层规定了通过怎样的路径到达对方计算机,并把数据包发送给对方。
链路层
用来处理链接网络的硬件部分。包括操作系统、硬件的设备驱动、网卡及光纤等物理可见部分。
2.3、TCP/IP通信传输流
比如说我想看百度网页:流程如下:
- 客户端在应用层发出一个想看某个WEB页面的HTTP请求的时候;
- 接着为了传输方便,在传输层把应用层收到的数据进行分割,并在各个报文上打上标记序号及端口号后转发给网络层;
- 在网络层增加作为通信目的的MAC地址后转发给链路层,这样一来发送网络的通信请求就准备齐全了;
- 接收端的服务器在链路层接收到数据,按序往上层发送,一直到应用层;
- 当传输到应用层,才能算真正接收到由客户端发送过来的HTTP请求了。
发送端在层与层之间传输数据时,每经过一层时必定会打上一个该层的首部信息。接收端没经过一层,会把消去。这种数据信心包装叫做封装。
TCP/IP传输是三次握手,四次断开。一张图搞定一切,哈哈
3、URI和URL
URI用字符串标示某一互联网资源,而URL表示资源的地点。可见URL是URI的子集。
URI要使用涵盖全部必要信息的URI、绝对URL以及相对URL。相对URL是指从浏览器中基本URI处理的URL,来先看下URI的格式
简单的HTTP协议
1、通信过程
HTTP协议规定,请求从客户端发出,最后服务器端相应该请求并返回。换个意思就是客户端建立通信的,服务器端在没有接收到请求之前不会发送响应。来一个示例:
下面的内容是客户端想服务端发的求求内容
GET / HTTP/1.1
HOST: HACKR.JP
起始行的get表示请求访问服务器的类型,成为方法。随后的字符串指明了请求访问的资源对象,也叫请求URL,后面是版本号,用来提示客户端使用的HTTP协议功能
总结:请求报文是由请求方法、请求URL、协议版本、可选的气你去头和内容实体构成的。
接下来服务器端接收到请求,会将请求内容的处理结果以相应的形式返回。
HTTP /1.1 OK
Date:Tue, JUL :: GMT
Content-length:
Content-Type:text/html
来用图片详细讲解一下:
2、HTTP是不保存状态的协议
HTTP是一种不报错状态,即无状态协议。http协议自身不对请求和相应之间的通信状态进行保存,也就是说在HTTP这个级别,协议对于发送过得请求和响应不做持久化处理。
使用HTTP协议,每当有新的请求发送时,就会有对应的新响应产生。协议本事并不保留之前的请求或响应报文的信息。这是为了处理大量事务,确保协议的课伸缩性,而特意吧HTTP协议设计成如此简单的。但是也存在弊端,当业务处理变得棘手的情况多了,比如用户登录一家网站,即使他跳转到别的页面后,也需要保持登录状态,然而cookie就诞生了。有了cookie再用http协议通信,就可以管理状态了。
3、HTTP方法
3.1、GET获取资源
get方法是用来请求访问已被URL识别的资源。指定的资源经服务端解析后返回响应内容。也就是说,请求的资源是文本,那就保持原样返回;如果像cgi那样的程序,则返回经过执行后的输出结果
使用get方法的请求响应的例子:
3.2、POST传输实体主体
post方法用来传输实体的主体。虽然用get方法也可以传输实体的主体,但是一般不用get方法进行传输,而是用post方法。虽说post的功能与get很相似,但是post的主要目的并不是获取相应的主体内容。
使用post方法请求的例子:
3.3、PUT传输文件
put方法用来传输文件,就像FTP协议的文件上传一样,要求在请求报文的主体中包含文件内容,然后保存到请求url指定的位置。由于put的方法不带验证机制,任何人都可以上传文件,存在安全性问题,因此一般的web网站不适用该方法。
使用put方法请求的例子:
3.4、head获取报文首部
head和get方法一样,只是不返回报文主体部分,用于确认url的有效性及资源更新的日期时间等。
使用head方法请求的例子:
3.5、DELETE删除文件
delete方法用来删除文件,是与put相反的方法,delete方法按照请求url删除指定的资源。其本质和put方法一样不带验证机制,所以不适用delete方法。
使用delete方法请求的例子:
下面列举一些方法:其中link和unlink已被HTTP/1.1废弃 ,不在支持
4、持久化
当频繁访问web网页的时候,每次都要进行TCP/IP通信,tcp/ip通信三次握手四次断开,代价是很昂贵的,增加了通信量的开销,为解决上述TCP连接的问题,HTTP就诞生了持久连接的方法。特点是只要任意一端没有明确提出断开连接,则保持TCP连接状态
持久化连接减少了TCP连接的重复建立和断开所造成的额外开销,减轻了服务端的负载。另外,减少开销的那部分时间,使HTTP请求和响应能够更早的结束,这样web页面的显示速度也就相应的提高了。
5、使用cookie的状态管理
cookie技术通过在请求和相应报文中写入cookie信息来控制客户端的状态。cookie会根据从服务端发送的相应报文内的一个叫做set-cookie的首部字段信息,通知客户端保存cookie。当下次客户端再往服务器发送请求的时候,客户端会自动在请求头加入cookie值后发送出去。下面带图分析下过程
- 没有cookie状态下的请求
- 第二次以后(存有cookie信息状态)的请求
后续待更新!!!技术写起来没有代码写起来顺手,不过还是得写,坚持就是成功
注:百度云链接:http://pan.baidu.com/s/1geASZyb 密码:5zmy
HTTP图解(大牛必经之路)的更多相关文章
- 【好文要转】HTTP图解(大牛必经之路)
http://www.cnblogs.com/aylin/p/6221436.html
- Spark RDD/Core 编程 API入门系列之动手实战和调试Spark文件操作、动手实战操作搜狗日志文件、搜狗日志文件深入实战(二)
1.动手实战和调试Spark文件操作 这里,我以指定executor-memory参数的方式,启动spark-shell. 启动hadoop集群 spark@SparkSingleNode:/usr/ ...
- 大牛推荐的30本经典编程书籍,从Python到前端全系列。
注:为了方便阅读与收藏,我们也制作了30本书籍完整清单的Markdown.PDF版以及思维导图版,大家可以在实验楼公众号后台回复关键字"书籍推荐"获取. Python 系列(10本 ...
- 《Java虚拟机原理图解》 1.2、class文件里的常量池
[最新更新:2014/11/11] 了解JVM虚拟机原理 是每个Java程序猿修炼的必经之路. 可是因为JVM虚拟机中有非常多的东西讲述的比較宽泛.在当前接触到的关于JVM虚拟机原理的教程或者博客中 ...
- 《Java虚拟机原理图解》1.4 class文件里的字段表集合--field字段在class文件里是如何组织的
0.前言 了解JVM虚拟机原理是每个Java程序猿修炼的必经之路.可是因为JVM虚拟机中有非常多的东西讲述的比較宽泛.在当前接触到的关于JVM虚拟机原理的教程或者博客中,绝大部分都是充斥的文字性的描写 ...
- 我的Android进阶之旅------>经典的大牛博客推荐(排名不分先后)!!
本文来自:http://blog.csdn.net/ouyang_peng/article/details/11358405 今天看到一篇文章,收藏了很多大牛的博客,在这里分享一下 谦虚的天下 柳志超 ...
- 图解ARP协议(二)ARP攻击原理与实践
一.ARP攻击概述 在上篇文章里,我给大家普及了ARP协议的基本原理,包括ARP请求应答.数据包结构以及协议分层标准,今天我们继续讨论大家最感兴趣的话题:ARP攻击原理是什么?通过ARP攻击可以做什么 ...
- 图解BERT(NLP中的迁移学习)
目录 一.例子:句子分类 二.模型架构 模型的输入 模型的输出 三.与卷积网络并行 四.嵌入表示的新时代 回顾一下词嵌入 ELMo: 语境的重要性 五.ULM-FiT:搞懂NLP中的迁移学习 六.Tr ...
- 你不可错过的Java学习资源清单(包含社区、大牛、专栏、书籍等)
学习Java和其他技术的资源其实非常多,但是我们需要取其精华去其糟粕,选择那些最好的,最适合我们的,同时也要由浅入深,先易后难.基于这样的一个标准,我在这里为大家提供一份Java的学习资源清单. 一: ...
随机推荐
- 在Excel中把横行与竖列进行置换、打勾号
在Excel中把横行与竖列进行置换:复制要置换的单元,在新的单元上右键->选择性复制,会出现对话框,选中“置换”,即可在Excel中打勾号,左手按住ALT不放,右手在小键盘也就是右边的数字键盘依 ...
- 2016/11/16 周三 <使用LocalStore记住用户密码方法示例>
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...
- WDM驱动和NT驱动之我见
WDM驱动是NT驱动的进化版.我个人觉得它的主要好处有两个 1.能检测到设备的插入,系统能自动分配设备的硬件信息,如中断号.IO端口.设备物理地址等 2.支持设备的开机状态拔出 之前的NT驱动和硬件关 ...
- request对象和response对象
Request 和 Response 对象起到了服务器与客户机之间的信息传递作用.Request 对象用于接收客户端浏览器提交的数据,而 Response 对象的功能则是将服务器端的数据发送到客户端浏 ...
- SDOI 2016 排列计数
题目大意:一个数列A,n个元素,其中m个元素不动,其他元素均不在相应位置,问有多少种排列 保证m个元素不动,组合数学直接计算,剩余元素错位排列一下即可 #include<bits/stdc++. ...
- HappyAA服务器部署笔记1(nginx+tomcat的安装与配置)
这是本人的服务器部署笔记.文章名称叫"部署笔记1"的原因是之后我对这个进行了改进之后,会有"部署笔记2","部署笔记3"...循序渐进,估计 ...
- 《精通正则表达式》笔记 --- “验证”Email格式
写一个正则表达式的三个步骤: 理解需求并找出你需要验证的数据的特征: 写一个还可以用的正则表达式: 看看能不能达到你的目的,同时想想会不会匹配到一些不想要的数据: [可选]性能优化 我觉得写一个正则表 ...
- 微信小程序客服消息使用指南
客服消息使用指南 为丰富小程序的服务能力,提高服务质量,微信为小程序提供客服消息能力,以便小程序用户可以方便快捷地与小程序服务提供方进行沟通. 功能介绍 用户可使用小程序客服消息功能,与小程序的客服人 ...
- 30个你必须记住的CSS选择符
所以你学会了基础的id,类和后代选择符,然后你就一直用它们了吗?如果是这样,你丢失了(css的)巨大的灵活性.在本文中提到的很多选择器属于CSS3规范的一部分,因此,只有在现代浏览器中才可使用. 1. ...
- Linux Hadoop2.7.3 安装(单机模式) 二
Linux Hadoop2.7.3 安装(单机模式) 一 Linux Hadoop2.7.3 安装(单机模式) 二 YARN是Hadoop 2.0中的资源管理系统,它的基本设计思想是将MRv1中的Jo ...