本节内容

俗话说好的开发,底层知识必须过硬,不然再创新的技术,你也理解不深入,比如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图解(大牛必经之路)的更多相关文章

  1. 【好文要转】HTTP图解(大牛必经之路)

    http://www.cnblogs.com/aylin/p/6221436.html

  2. Spark RDD/Core 编程 API入门系列之动手实战和调试Spark文件操作、动手实战操作搜狗日志文件、搜狗日志文件深入实战(二)

    1.动手实战和调试Spark文件操作 这里,我以指定executor-memory参数的方式,启动spark-shell. 启动hadoop集群 spark@SparkSingleNode:/usr/ ...

  3. 大牛推荐的30本经典编程书籍,从Python到前端全系列。

    注:为了方便阅读与收藏,我们也制作了30本书籍完整清单的Markdown.PDF版以及思维导图版,大家可以在实验楼公众号后台回复关键字"书籍推荐"获取. Python 系列(10本 ...

  4. 《Java虚拟机原理图解》 1.2、class文件里的常量池

    [最新更新:2014/11/11]  了解JVM虚拟机原理 是每个Java程序猿修炼的必经之路. 可是因为JVM虚拟机中有非常多的东西讲述的比較宽泛.在当前接触到的关于JVM虚拟机原理的教程或者博客中 ...

  5. 《Java虚拟机原理图解》1.4 class文件里的字段表集合--field字段在class文件里是如何组织的

    0.前言 了解JVM虚拟机原理是每个Java程序猿修炼的必经之路.可是因为JVM虚拟机中有非常多的东西讲述的比較宽泛.在当前接触到的关于JVM虚拟机原理的教程或者博客中,绝大部分都是充斥的文字性的描写 ...

  6. 我的Android进阶之旅------>经典的大牛博客推荐(排名不分先后)!!

    本文来自:http://blog.csdn.net/ouyang_peng/article/details/11358405 今天看到一篇文章,收藏了很多大牛的博客,在这里分享一下 谦虚的天下 柳志超 ...

  7. 图解ARP协议(二)ARP攻击原理与实践

    一.ARP攻击概述 在上篇文章里,我给大家普及了ARP协议的基本原理,包括ARP请求应答.数据包结构以及协议分层标准,今天我们继续讨论大家最感兴趣的话题:ARP攻击原理是什么?通过ARP攻击可以做什么 ...

  8. 图解BERT(NLP中的迁移学习)

    目录 一.例子:句子分类 二.模型架构 模型的输入 模型的输出 三.与卷积网络并行 四.嵌入表示的新时代 回顾一下词嵌入 ELMo: 语境的重要性 五.ULM-FiT:搞懂NLP中的迁移学习 六.Tr ...

  9. 你不可错过的Java学习资源清单(包含社区、大牛、专栏、书籍等)

    学习Java和其他技术的资源其实非常多,但是我们需要取其精华去其糟粕,选择那些最好的,最适合我们的,同时也要由浅入深,先易后难.基于这样的一个标准,我在这里为大家提供一份Java的学习资源清单. 一: ...

随机推荐

  1. Xcode插件管理工具Alcatraz

    1.简介 Alcatraz是一个能帮你管理Xcode插件丶模版及颜色配置的工具.它可以直接集成在Xcode的图形界面中,让你感觉就像在使用Xcode自带的功能一样. 2.安装和删除 使用如下的终端来安 ...

  2. windows上面捕获声卡数据

    转自:http://shanewfx.github.io/blog/2013/08/14/caprure-audio-on-windows/ 前一段时间接到一个任务,需要采集到声卡的输出信号,以便与麦 ...

  3. Hbuilder开发HTML5 APP之图标和启动页制作

    1.点击项目下的"manifest.json"文件,会出现自动化的配置工具: 2.点“图标配置“,上传制作好的图标文件,自动生成不同大小的ico,这个要赞下! 3.启动图片(spl ...

  4. 解决读取iphone名称中文乱码问题

    #region 解决中文乱码 Ethan 2016-01-06 [DllImport("iTunesMobileDevice.dll", CallingConvention = C ...

  5. xcodebuild编译ipa

    #!/bin/sh # autoBuild.sh # CTest # # Created by Ethan on 14-11-3. # Copyright (c) 2014年 Ethan. All r ...

  6. 让Response.Redirect页面重定向更有效率

    用 Redirect 方法可将浏览器重定向到另一个 URL,而不是将内容发送给用户. 这里有一篇文章介绍使用Redirect<Using Response.Redirect Effectivel ...

  7. 细嗅Promise

    读完这篇文章,预计会消耗你 40 分钟的时间. Ajax 出现的时候,刮来了一阵异步之风,现在 Nodejs 火爆,又一阵异步狂风刮了过来.需求是越来越苛刻,用户对性能的要求也是越来越高,随之而来的是 ...

  8. 如何在没有域的环境中搭建AlwaysOn(一)

    对DBA而言,不需要域就可以搭建SQL Server AlwaysOn是Windows Server 2016中最令人兴奋的功能了,它不仅可以降低搭建的成本,而且还减少了部署和运维的工作量. 该特性可 ...

  9. 掀起你的盖头来:Unit Of Work-工作单元

    写在前面 阅读目录: 概念中的理解 代码中的实现 后记 掀起了你的盖头来,让我看你的眼睛,你的眼睛明又亮呀,好像那水波一模样:掀起了你的盖头来,让我看你的脸儿,看看你的脸儿红又圆呀,好像那苹果到秋天. ...

  10. 开始研究web,mark一下

    之前想要搞引擎,经过思考之后,定位为webgl方面的引擎,这个决定早就做了,只是没有写下来   做了一些调研之后,确定使用babylon.js 和typescript 和c# 来开发   Babylo ...