1.了解Web及网络基础

TCP/IP协议族按层次可以分为下面四层:

  • 应用层:决定了向用户提供应用服务时通信的活动,TCP/IP协议族内预存了各类通用的应用服务,比如:FTP(文件传输协议)和DNS(域名系统)服务就是其中两类,HTTP协议也处于该层。
  • 传输层:对上层应用,提供处于网络连接中的两台计算机之间的数据传输。在传输层有两个性质不同的协议:TCP(传输控制协议)和UDP(用户数据报协议)
  • 网络层:用来处理在网络上流动的数据包,数据包是网络的传输最小数据单位,该层规定了通过怎样的路径(所谓的传输路线)到达对方计算机,并把数据包传送给对方。与对方计算机之间通过多台计算机或网络设备进行传输时,网络层所起的作用就是在众多的选项内选择一条传输路线。
  • 链路层:用来处理连接网络的硬件部分,包括控制操作系统,硬件的设备驱动,NIC,及光纤等物理可见部分(还包括连接器等一切传输媒介),硬件上的范畴均在链路层的作用范围之内。 

    利用TCP/IP协议族进行网络通信时,会通过分层顺序与对方进行通信,发送端从应用层往下走,接收端则往应用层往上走,就拿发送端的客户端在应用层(HTTP协议)发出一个想看某个Web页面的HTPP请求为例,如下图示: 



    发送端在层与层之间传输数据时,每经过一层时必定会被打上一个该层所属的首部信息,反之,接收端在层与层传输数据时,每经过一层时会把对应的首部消去,这种把数据信息包装起来的做法称为封装。 

    负责传输的IP协议:作用是把各种数据包传送给对方,其指明了节点被分配到的地址,而MAC地址是指网卡所属的固定地址,IP间的通信依赖MAC地址,在网络上,通信的双方在同一局域网内的情况较少,通常是经过多台计算机和网络设备中转才能连接到对方,在中转时,会利用下一站中转设备的MAC地址来搜索下一个中转目标,这时,会采用ARP协议(ARP是一种用以解析地址的协议,根据通信方的IP地址就可以反查出对应的MAC地址)。例子如图: 

     

    TCP协议为了准确无误的将数据送达目标处,TCP协议采用了三次握手策略,其握手过程中用了三个标记:FLAG-SYN和ACK,该过程如图: 



    注意:若在握手过程中某个阶段莫名中断,TCP协议会再次以相同的顺序发送相同的数据包。* 

    DNS服务是和HTTP协议一样位于应用层的协议,它提供域名到IP地址之间的解析服务其两者关系如图: 



    各种协议与HTTP协议的关系就如图所示: 



    URI用字符标识某一互联网资源,而URL表示资源的地点(互联网上所处的位置),故URL是URI的子集。 

    URI格式通常包括以下几个:
  • 登陆信息
  • 服务器地址(IP或域名)
  • 服务器端口号
  • 带层次的文件路径
  • 查询字符串
  • 片段标识 

    URI格式例子如图: 



    黑色:协议方案名 

    红色:登陆信息(认证) 

    浅绿色:服务器地址 

    浅蓝色:服务器端口号 

    紫色:带层次的文件路径 

    深蓝色:查询字符串 

    深绿色:片段标识符

2.简单的HTTP协议

请求报文:是由请求方法,请求URI,协议版本,可选的请求首部字段和内容实体构成的。 

响应报文:基本上由协议版本,状态码(表示请求成功或失败的数字代码),用以解释状态码的原因短语,可选的响应首部字段以及实体主体构成。 





HTTP是一种不保存状态的协议,即不保留之前一切的请求或响应报文的信息,为了解决这问题,许多网站引入了Cookie技术,例如:许多登陆网站就是用Cookie技术来保持登陆状态。 

告知服务器意图的HTTP方法有以下几个: 

- GET:获取资源,如果请求的资源是文本,那就保持原样返回,如果是像CGI那样的程序,则返回经过执行后的输出结果。 

- POST:主要用来传输实体的主体,而不是获取响应的主体内容。 

- PUT:传输文件,要求请求报文中包含文件内容,但是HTTP/1.1PUT方法自身不带验证机制,任何人都可以上传文件,存在安全性问题,故一般有开发此功能的Web网站都会配合Web应用程序的验证机制,如:REST机制。

  • HEAD:不获取返回报文主体部分,而是获取其URI的有效性及资源更新的日期时间等首部字段。
  • DELETE:用来删除文件,但是HTTP/1.1Delete方法自身也不带验证机制,任何人都可以删除文件,存在安全性问题,故一般有开发此功能的Web网站都会配合Web应用程序的验证机制,如:REST机制。
  • OPTIONS:用来查询针对请求URI指定的资源。
  • TRACE:在用其发送请求时,在Max-Forwards首部字段中填入数值,每经过一个服务器端就将该数字减1,当数值刚好减到0时,就停止继续传输,最后接收到请求的服务器端则返回状态码200OK的响应,因此可以查询发送出去的请求是怎样被加工修改的。
  • CONNECT:要求在与代理服务器通信时建立隧道,实现用隧道协议进行TCP通信,主要使用SSL和TLS协议把通信内容加密后经网络隧道传输。 

    HTTP持久连接:keep-alive(持久连接)的特点是,只要任意一端没有明确提出断开连接,则保持TCP连接状态,好处在于减少了TCP连接的重复建立和断开所造成的额外开销,减轻了服务器端的负载,也减少了开销的那部分时间,是HTTP请求和响应能够更早的结束。 



    管管线化技术可以让客户端同时并行发送多个请求,而不需要一个接一个地等待响应。 

    HTTP是无状态协议优势在于它减少服务器的CPU及内存资源的消耗,但它不能保持之前的状态进行请求处理,这样需要在登陆认证的Web页面中那个,每次请求 跳转页面都需要再次认证登陆或附上请求认证参数,因此为了解决这个问题,可以引用Cookie技术,该过程如图: 

转自 http://blog.csdn.net/xuguoli_beyondboy/article/details/47928829

HTTP网络协议(一)的更多相关文章

  1. PYTHON黑帽编程1.5 使用WIRESHARK练习网络协议分析

    Python黑帽编程1.5  使用Wireshark练习网络协议分析 1.5.0.1  本系列教程说明 本系列教程,采用的大纲母本为<Understanding Network Hacks At ...

  2. 基础笔记(三):网络协议之Tcp、Http

    目录 一.网络协议 二.TCP(Transmission Control Protocol,传输控制协议) TCP头格式 TCP协议中的三次握手和四次挥手 TCP报文抓取工具 三.HTTP(Hyper ...

  3. C# RFID windows 服务 网络协议方式

    上篇话说是串口方式操作RFID设备. 下面介绍网络协议方式. 设备支持断线重连. 那我们的服务也不能差了不是. 所以这个服务类也是支持的哦. 不解释上代码: namespace Rfid { /// ...

  4. CCNA网络工程师学习进程(3)常规网络设计模型与基本的网络协议

        本节介绍分层的网络设计模型与基本的网络协议,包括ARP协议,ICMP协议和IP协议.     (1)三层网络架构: 一个好的园区网设计应该是一个分层的设计.一般分为接入层.汇聚层(分布层).核 ...

  5. 对TCP/IP网络协议的深入浅出归纳

    前段时间做了一个开发,涉及到网络编程,开发过程比较顺利,但任务完成后始终觉得有一些疑惑.主要是因为对网络协议不太熟悉,对一些概念也没弄清楚.后来 我花了一些时间去了解这些网络协议,现在对TCP/IP网 ...

  6. linux网络协议

    网络协议 本章节主要介绍linxu网络模型.以及常用的网络协议分析以太网协议.IP协议.TCP协议.UDP协议 一.网络模型 TCP/IP分层模型的四个协议层分别完成以下的功能: 第一层 网络接口层 ...

  7. CcTalk (网络协议)(转)

    ccTalk (发音作"see-see-talk")是一种广泛使用的串行协议,遍及货币交易和销售时点情报系统行业.如硬币和纸币验钞机等外部设备在多元化的自动支付设备如交通,票务,投 ...

  8. iOS网络协议 HTTP/TCP/IP浅析

    一.TCP/IP协议       话说两台电脑要通讯就必须遵守共同的规则,就好比两个人要沟通就必须使用共同的语言一样.一个只懂英语的人,和一个只懂中文的人由于没有共同的语言(规则)就没办法沟通.两台电 ...

  9. 转:对TCP/IP网络协议的深入浅出归纳

    转自:http://blog.jobbole.com/74795/ 前段时间做了一个开发,涉及到网络编程,开发过程比较顺利,但任务完成后始终觉得有一些疑惑.主要是因为对网络协议不太熟悉,对一些概念也没 ...

  10. linux 网络协议分析---3

    本章节主要介绍linxu网络模型.以及常用的网络协议分析以太网协议.IP协议.TCP协议.UDP协议 一.网络模型 TCP/IP分层模型的四个协议层分别完成以下的功能: 第一层 网络接口层 网络接口层 ...

随机推荐

  1. 【VC++学习笔记四】MFC应用程序中框架类的获取

    一.文档类中 获取视图: 先获取主窗体,在根据主窗体获取视图 pMain->GetActiveDocument();注意类型转换 由于文档中可能包含多个视图,可以按照下面函数获取: CView* ...

  2. Java编程思想(四) —— 复用类

    看了老罗罗升阳的专訪,不由自主地佩服,非常年轻,我之前以为和罗永浩一个级别的年龄.也是见过的不是初高中编程的一位大牛之中的一个,专訪之后.发现老罗也是一步一个脚印的人. 别说什么难做,做不了.你根本就 ...

  3. Activity 之间 传递 List 封装的对象或者对象

    项目中遇到 从也个页面向还有一个页面跳转传递一个List 封装的对象 .按网上查的资料 须要把 对象 实现 Serializable接口. 写了一下.可是跳转直接崩溃.一直看错误之日找不到原因后来自习 ...

  4. vue绑定内联样式

    v-bind:style 的对象语法十分直观--看着非常像 CSS ,其实它是一个 JavaScript 对象. CSS 属性名可以用驼峰式(camelCase)或短横分隔命名(kebab-case) ...

  5. SuSe Linux Enterprise Server 10 With Sp2 安装过程图解

    SuSe Linux Enterprise Server 10 With Sp2 安装过程图解 650) this.width=650;" style="border-right- ...

  6. Kinect 开发 —— 进阶指引 (下)

    运动识别 利用运动识别(motion detection)来进行近景识别是最有意思的一种方式.实现运动识别的基本原理是设置一个起始的基准RGB图像,然后将从摄像头获取的每一帧影像和这个基准图像进行比较 ...

  7. Kali的源得数字验证问题

    装上之后第一件事就是执行apt-get update && apt-get upgrade,结果却出现了这样的错误 我添加的是中科大的更新源,在浏览器中是可以正常打开的: deb ht ...

  8. chkconfig---检查设置系统服务

    chkconfig命令   chkconfig命令检查.设置系统的各种服务.这是Red Hat公司遵循GPL规则所开发的程序,它可查询操作系统在每一个执行等级中会执行哪些系统服务,其中包括各类常驻服务 ...

  9. Django模型三

    关联对象操作及多表查询 关联表的数据操作: 一对多: 正向:如果一个模型有外键字段,通过这个模型对外键进行操作叫做正向. 更新: 通过属性赋值 In [1]: from teacher.models ...

  10. 【CS Round #39 (Div. 2 only) C】Reconstruct Sum

    [Link]:https://csacademy.com/contest/round-39/task/reconstruct-sum/ [Description] 给你一个数字S; 让你找有多少对A, ...