Http基础网络及Web网络模型分层Protocol网络基础TCP/IP协议族各协议与HTTP协议的关系IP协议--负责传输TCP--可靠性服务DNS--域名解析服务URI和URLHTTP协议用于客服端和服务器之间的通信GET :获取资源POST:传输实体主体PUT:传输文件HEAD:得到报文首部DELETE:删除文件GET与POST的区别Cookie--确认过眼神Http是一种无状态的协议程序员
在现在咱们访问网页都是经过网页浏览器(web browser)。但你知道如何定位你要访问的网页,web页面又是如何呈现的吗?一个简单的web网页又是如何知足千千万万不一样用户的需求的?web
计算机与网络设备要相互通讯,双方就必须基于相同的方法。算法
好比,如何探测到通讯目标、由哪一边先发起通讯、使用哪一种语言进行通讯、怎样结束通讯,怎样选择通讯线路,访问失效怎么处理,等规则都须要事先肯定。浏览器
不一样的硬件、操做系统之间的通讯,全部的这一切都须要一种规则。而这种规则就是咱们常说的协议(Protocol),或者说接口(interface)缓存
(7) 应用层:直接为用户的应用进程服务,协议有万维网应用协议HTTP、电子邮件协议SMTP、文件传输协议FTP等安全
(6) 表示层:负责两个通讯系统之间所交换信息的表示方式,使得两台数据表示结构彻底不一样的设备可以自由地通讯服务器
(5) 会话层:为彼此合做的表示层实体创建、维护和结束他们之间的通讯会话(Session),提提供会话管理,但不参与具体的传输。网络
(4) 传输层:为会话层实体提供透明、可靠的数据传输服务,保证端到端的数据完整性,实现端到端的应答、分组排序和流量控制等功能。数据结构
信息的传送单位是报文。架构
(3) 网络层:为传输层实体提供端到端的数据传送功能,使得传输层摆脱路由选择,把上层产生的报文或用户数据包封装成分组或包进行传送,也叫IP数据报。其次要选择适合的路由,使分组可以经过网络中的路由器找到目的主机。
(2) 数据链路层:负责两个相邻节点间的线路上的数据传输,创建、维持和释放两个相邻节点间的数据链路,将网络层交下来的IP数据报组装成帧(framing),
(1) 物理层:为它的上一层提供一个物理链接,传输单位为比特。
咱们前面讲到了协议(Protocol):协议的本质是一种规则,是在通讯中交换信息的双方所要遵循的一套规则或则说约束。
(PS:请小伙伴们自行回忆一下接口的定义,并类比一下。)
协议中存在各式各样的内容。从电缆的规格到 IP 地址的选定方法、寻找异地用户的方法、双方创建通讯的顺序,以及 Web 页面显示须要处理的步骤,等等。 像这样把与互联网相关联的协议集合起来总称为 TCP/IP。
TCP/IP 协议族里重要的一点就是分层。 把 TCP/IP 层次化是有好处的。好比,若是互联网只由一个协议统筹,某个地方须要改变设计时,就必须把全部部分总体替换掉。而分层以后只需把变更的层替换掉便可。把各层之间的接口部分规划好以后,每一个层次内部的设计就可以自由改动了。 值得一提的是,层次化以后,设计也变得相对简单了。处于应用层上的应用能够只考虑分派给本身的任务,而不须要弄清对方在地球上哪一个地方、对方的传输路线是怎样的、是否能确保传输送达等问题。
题外话:
人类的学习中有一种方式叫作类比学习,分层的几率不只仅是在通信中有着应用,分层(或者咱们换种不太恰当的说法叫分治:将大的问题分解为明确的小的问题来解决)在计算机领域中是很是有用的一种思想,例如软件开发,算法研究,数据结构等等不少领域都有应用。
对在 TCP/IP 协议族中与 HTTP 密不可分的 3 个协议(IP、TCP 和 DNS)
IP(Internet Protocol):网际协议位于网络层。InternetProtocol 这个名称可能听起来有点夸张,但事实正是如此,由于几乎全部使用网络的系统都会用到 IP 协议。
IP 协议的做用是把各类数据包传送给对方。而要保证确实传送到对方那里,则须要知足各种条件。其中两个重要的条件是 IP 地址和 MAC地址(Media Access Control Address,也就是你的网卡地址)。
根据通讯方的 IP 地址就能够反查出对应的 MAC 地址。
没有人可以全面掌握互联网中的传输情况在到达通讯目标前的中转过程当中,那些计算机和路由器等网络设备只能获悉很粗略的传输路线。这种机制称为路由选择(routing)
TCP 位于传输层,提供可靠的字节流服务。
字节流服务(Byte Stream Service):为了方便传输,将大块数据分割成以报文段(segment)为单位的数据包进行管理。
而可靠的传输服务是指,可以把数据准确可靠地传给对方。为了准确无误地将数据送达目标处,TCP 协议采用了三次握手(three-way handshaking)策略。用 TCP 协议把数据包送出去后,TCP不会对传送后的状况置之不理,它必定会向对方确认是否成功送达。
握手过程当中使用了 TCP 的标志(flag) —— SYN(synchronize) 和ACK(acknowledgement)。发送端首先发送一个带 SYN 标志的数据包给对方。接收端收到后,回传一个带有 SYN/ACK 标志的数据包以示传达确认信息。最后,发送端再回传一个带 ACK 标志的数据包,表明“握手”结束。若在握手过程当中某个阶段莫名中断,TCP 协议会再次以相同的顺序发送相同的数据包。
DNS(Domain Name System)服务是和 HTTP 协议同样位于应用层的协议。它提供域名到 IP 地址之间的解析服务。计算机既能够被赋予 IP 地址,也能够被赋予主机名和域名。由于与 IP 地址的一组纯数字相比,用字母配合数字的表示形式来指定计算机名更符合人类的记忆习惯。
URL(Uniform Resource Locator,统一资源定位符)。URL正是使用 Web 浏览器等访问 Web 页面时须要输入的网页地址。
http://www.aspxfans.com:8080/news/index.asp?boardID=5&ID=24618&page=1#name
一个完整的URL包括如下几部分:
协议部分:该URL的协议部分为“http:”,这表明网页使用的是HTTP协议。在Internet中可使用多种协议,如HTTP,FTP等等本例中使用的是HTTP协议。在"HTTP"后面的“//”为分隔符
域名部分:该URL的域名部分为“www.aspxfans.com”。一个URL中,也可使用IP地址做为域名使用
端口部分:跟在域名后面的是端口,域名和端口之间使用“:”做为分隔符。端口不是一个URL必须的部分,若是省略端口部分,将采用默认端口80
虚拟目录部分:从域名后的第一个“/”开始到最后一个“/”为止,是虚拟目录部分。虚拟目录也不是一个URL必须的部分。本例中的虚拟目录是“/news/”
文件名部分:从域名后的最后一个“/”开始到“?”为止,是文件名部分,若是没有“?”,则是从域名后的最后一个“/”开始到“#”为止,是文件部分,若是没有“?”和“#”,那么从域名后的最后一个“/”开始到结束,都是文件名部分。本例中的文件名是“index.asp”。文件名部分也不是一个URL必须的部分,若是省略该部分,则使用默认的文件名
锚部分:从“#”开始到最后,都是锚部分。本例中的锚部分是“name”。锚部分也不是一个URL必须的部分
参数部分:从“?”开始到“#”为止之间的部分为参数部分,又称搜索部分、查询部分。本例中的参数部分为“boardID=5&ID=24618&page=1”。参数能够容许有多个参数,参数与参数之间用“&”做为分隔符。
两台计算机做为客户端和服务器端的角色有可能会互换。但就仅从一条通讯路线来讲,服务器端和客户端的角色是肯定的,而用 HTTP 协议可以明确区分哪端是客户端,哪端是服务器端。
HTTP 协议规定,请求从客户端发出,最后服务器端响应该请求并返回。换句话说,确定是先从客户端开始创建通讯的,服务器端在没有接收到请求以前不会发送响应。
2XX 成功 61
3XX 重定向 62
4XX 客户端错误 65
5XX 服务器错误
GET 方法用来请求访问已被 URI 识别的资源。指定的资源经服务器端解析后返回响应内容。也就是说,若是请求的资源是文本,那就保持原样返回;若是是像 CGI(Common Gateway Interface,通用网关接口)那样的程序,则返回通过执行后的输出结果。
POST 方法用来传输实体的主体。虽然用 GET 方法也能够传输实体的主体,但通常不用 GET 方法进行传输,而是用 POST 方法。虽然说 POST 的功能与 GET 很类似,但POST 的主要目的并非获取响应的主体内容。使用 POST 方法的请求·响应的例子
PUT 方法用来传输文件。就像 FTP 协议的文件上传同样,要求在请求报文的主体中包含文件内容,而后保存到请求 URI 指定的位置。
可是,鉴于 HTTP/1.1 的 PUT 方法自身不带验证机制,任何人均可以上传文件 , 存在安全性问题,所以通常的 Web 网站不使用该方法。若配合 Web 应用程序的验证机制,或架构设计采用REST(REpresentational State Transfer,表征状态转移)标准的同类Web 网站,就可能会开放使用 PUT 方法。
HEAD 方法和 GET 方法同样,只是不返回报文主体部分。用于确认URI 的有效性及资源更新的日期时间等。
DELETE 方法用来删除文件,是与 PUT 相反的方法。DELETE 方法按请求 URI 删除指定的资源。
可是,HTTP/1.1 的 DELETE 方法自己和 PUT 方法同样不带验证机制,因此通常的 Web 网站也不使用 DELETE 方法。当配合 Web 应用程序的验证机制,或遵照 REST 标准时仍是有可能会开放使用的。
对于程序员来讲,GET 和POST 基本能够解决大部分的请求,但根据Http协议的初衷其中每一个请求方法对应着不一样的请求方式, 对于归纳的增删改查来说 大体对应以下。
GET 对应查 POST 对应增 PUT 对应改 DELETE 对应删
虽然GET和POST 能够实现基本请求,但为了规范咱们能够试着使用其余的,对于不少地方,可能只支持GET 和 POST 咱们要视状况而定
使用GET方法时,查询字符串(键值对)被附加在URL地址后面一块儿发送到服务器:
/test/demo_form.jsp?name1=value1&name2=value2
特色:
GET请求可以被缓存
GET请求会保存在浏览器的浏览记录中
以GET请求的URL可以保存为浏览器书签
GET请求有长度限制
GET请求主要用以获取数据
使用POST方法时,查询字符串在POST信息中单独存在,和HTTP请求一块儿发送到服务器:
POST /test/demo_form.jsp HTTP/1.1
Host: w3schools.com
name1=value1&name2=value2
特色:
POST请求不能被缓存下来
POST请求不会保存在浏览器浏览记录中
以POST请求的URL没法保存为浏览器书签
POST请求没有长度限制
区别一(使用场景):
get重点在从服务器上获取资源,post重点在向服务器发送数据;
区别二(请求数据位置):
get传输数据是经过URL请求,以field(字段)= value的形式,置于URL后,并用"?"链接,多个请求数据间用"&"链接
如http://127.0.0.1/Test/login.action?name=admin&password=admin,这个过程用户是可见的;
post传输数据经过Http的post机制,将字段与对应值封存在请求实体中发送给服务器,这个过程对用户是不可见的;
区别三(请求数据大小):
Get传输的数据量小,由于受URL长度限制,但效率较高;Post能够传输大量数据,因此上传文件时只能用Post方式;
区别四(安全性):
get是不安全的,由于URL是可见的,可能会泄露私密信息,如密码等;post较get安全性较高;
区别五(编码集合):
get方式只能支持ASCII字符,向服务器传的中文字符可能会乱码。post支持标准字符集,能够正确传递中文字符。
区别六(共享性):
get请求的请求数据在url中,便于分享链接,能够添加到书签,而post请求不能够。。
区别七(缓存):
get请求能被缓存,而post请求不行。
区别八(表单重复提交):
点击返回/刷新按钮,对get请求没有影响,对于post请求可能会致使数据重发(浏览器会提示)。
Cookie 技术经过在请求和响应报文中写入 Cookie 信息来控制客户端的状态。
HTTP 是无状态协议,它不对以前发生过的请求和响应的状态进行管理。也就是说,没法根据以前的状态进行本次的请求处理。假设要求登陆认证的 Web 页面自己没法进行状态的管理(不记录已登陆的状态),那么每次跳转新页面不是要再次登陆,就是要在每次请求报文中附加参数来管理登陆状态。不能否认,无状态协议固然也有它的优势。因为没必要保存状态,天然可减小服务器的 CPU 及内存资源的消耗。
保留无状态协议这个特征的同时又要解决相似的矛盾问题,因而引入了 Cookie 技术。 Cookie 会根据从服务器端发送的响应报文内的一个叫作 Set-Cookie 的首部字段信息,通知客户端保存 Cookie。当下次客户端再往该服务器发送请求时,客户端会自动在请求报文中加入 Cookie 值后发送出去。 服务器端发现客户端发送过来的 Cookie 后,会去检查到底是从哪个客户端发来的链接请求,而后对比服务器上的记录,最后获得以前的状态信息。