web基础--Http基础

Http基础

    Http基础网络及Web网络模型分层Protocol网络基础TCP/IP协议族各协议与HTTP协议的关系IP协议--负责传输TCP--可靠性服务DNS--域名解析服务URI和URLHTTP协议用于客服端和服务器之间的通讯GET :获取资源POST:传输实体主体PUT:传输文件HEAD:获得报文首部DELETE:删除文件GET与POST的区别Cookie--确认过眼神Http是一种无状态的协议

网络及Web

   ​ 在如今我们访问网页都是通过网页浏览器(web browser)。但你知道如何定位你要访问的网页,web页面又是如何呈现的吗?一个简单的web网页又是如何满足千千万万不同用户的需求的?

​ 

​ 计算机与网络设备要相互通信,双方就必须基于相同的方法。

​ 比如,如何探测到通信目标、由哪一边先发起通信、使用哪种语言进行通信、怎样结束通信,怎样选择通信线路,访问失效怎么处理,等规则都需要事先确定。

不同的硬件、操作系统之间的通信,所有的这一切都需要一种规则。而这种规则就是我们常说的协议(Protocol),或者说接口(interface)

网络模型分层

(7) 应用层:直接为用户的应用进程服务,协议有万维网应用协议HTTP、电子邮件协议SMTP、文件传输协议FTP等

(6) 表示层:负责两个通信系统之间所交换信息的表示方式,使得两台数据表示结构完全不同的设备能够自由地通信

(5) 会话层:为彼此合作的表示层实体建立、维护和结束他们之间的通信会话(Session),提提供会话管理,但不参与具体的传输。

(4) 传输层:为会话层实体提供透明、可靠的数据传输服务,保证端到端的数据完整性,实现端到端的应答、分组排序和流量控制等功能。

​ 信息的传送单位是报文

(3) 网络层:为传输层实体提供端到端的数据传送功能,使得传输层摆脱路由选择,把上层产生的报文或用户数据包封装成分组或包进行传送,也叫IP数据报。其次要选择适合的路由,使分组能够通过网络中的路由器找到目的主机。

(2) 数据链路层:负责两个相邻节点间的线路上的数据传输,建立、维持和释放两个相邻节点间的数据链路,将网络层交下来的IP数据报组装成帧(framing)

(1) 物理层:为它的上一层提供一个物理连接,传输单位为比特

Protocol

​ 我们前面讲到了协议(Protocol):协议的本质是一种规则,是在通信中交换信息的双方所要遵循的一套规则或则说约束

PS:请小伙伴们自行回忆一下接口的定义,并类比一下。)

​ 协议中存在各式各样的内容。从电缆的规格到 IP 地址的选定方法、寻找异地用户的方法、双方建立通信的顺序,以及 Web 页面显示需要处理的步骤,等等。 像这样把与互联网相关联的协议集合起来总称为 TCP/IP。

网络基础TCP/IP协议族

​ TCP/IP 协议族里重要的一点就是分层。 把 TCP/IP 层次化是有好处的。比如,如果互联网只由一个协议统筹,某个地方需要改变设计时,就必须把所有部分整体替换掉。而分层之后只需把变动的层替换掉即可。把各层之间的接口部分规划好之后,每个层次内部的设计就能够自由改动了。 值得一提的是,层次化之后,设计也变得相对简单了。处于应用层上的应用可以只考虑分派给自己的任务,而不需要弄清对方在地球上哪个地方、对方的传输路线是怎样的、是否能确保传输送达等问题。

题外话:

​ 人类的学习中有一种方式叫做类比学习,分层的概率不仅仅是在通讯中有着应用,分层(或者我们换种不太恰当的说法叫分治:将大的问题分解为明确的小的问题来解决)在计算机领域中是非常有用的一种思想,例如软件开发,算法研究,数据结构等等很多领域都有应用。

各协议与HTTP协议的关系

​ 对在 TCP/IP 协议族中与 HTTP 密不可分的 3 个协议(IP、TCP 和 DNS)

IP协议--负责传输

IP(Internet Protocol):网际协议位于网络层。InternetProtocol 这个名称可能听起来有点夸张,但事实正是如此,因为几乎所有使用网络的系统都会用到 IP 协议。

IP 协议的作用是把各种数据包传送给对方。而要保证确实传送到对方那里,则需要满足各类条件。其中两个重要的条件是 IP 地址和 MAC地址(Media Access Control Address,也就是你的网卡地址)。

根据通信方的 IP 地址就可以反查出对应的 MAC 地址。

​ 没有人能够全面掌握互联网中的传输状况在到达通信目标前的中转过程中,那些计算机和路由器等网络设备只能获悉很粗略的传输路线。这种机制称为路由选择(routing)

TCP--可靠性服务

​ TCP 位于传输层,提供可靠的字节流服务。

​ 字节流服务(Byte Stream Service):为了方便传输,将大块数据分割成以报文段(segment)为单位的数据包进行管理。

​ 而可靠的传输服务是指,能够把数据准确可靠地传给对方。为了准确无误地将数据送达目标处,TCP 协议采用了三次握手(three-way handshaking)策略。用 TCP 协议把数据包送出去后,TCP不会对传送后的情况置之不理,它一定会向对方确认是否成功送达。

握手过程中使用了 TCP 的标志(flag) —— SYN(synchronize) 和ACK(acknowledgement)。发送端首先发送一个带 SYN 标志的数据包给对方。接收端收到后,回传一个带有 SYN/ACK 标志的数据包以示传达确认信息。最后,发送端再回传一个带 ACK 标志的数据包,代表“握手”结束。若在握手过程中某个阶段莫名中断,TCP 协议会再次以相同的顺序发送相同的数据包。

DNS--域名解析服务

​ DNS(Domain Name System)服务是和 HTTP 协议一样位于应用层的协议。它提供域名到 IP 地址之间的解析服务。计算机既可以被赋予 IP 地址,也可以被赋予主机名和域名。因为与 IP 地址的一组纯数字相比,用字母配合数字的表示形式来指定计算机名更符合人类的记忆习惯。

URI和URL

​ 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 协议能够明确区分哪端是客户端,哪端是服务器端。

​ HTTP 协议规定,请求从客户端发出,最后服务器端响应该请求并返回。换句话说,肯定是先从客户端开始建立通信的,服务器端在没有接收到请求之前不会发送响应。

  • 2XX 成功 61

  • 3XX 重定向 62

  • 4XX 客户端错误 65

  • 5XX 服务器错误

GET :获取资源

​ GET 方法用来请求访问已被 URI 识别的资源。指定的资源经服务器端解析后返回响应内容。也就是说,如果请求的资源是文本,那就保持原样返回;如果是像 CGI(Common Gateway Interface,通用网关接口)那样的程序,则返回经过执行后的输出结果。

POST:传输实体主体

​ POST 方法用来传输实体的主体。虽然用 GET 方法也可以传输实体的主体,但一般不用 GET 方法进行传输,而是用 POST 方法。虽说 POST 的功能与 GET 很相似,但POST 的主要目的并不是获取响应的主体内容。使用 POST 方法的请求·响应的例子

PUT:传输文件

​ PUT 方法用来传输文件。就像 FTP 协议的文件上传一样,要求在请求报文的主体中包含文件内容,然后保存到请求 URI 指定的位置。

​ 

​ 但是,鉴于 HTTP/1.1 的 PUT 方法自身不带验证机制,任何人都可以上传文件 , 存在安全性问题,因此一般的 Web 网站不使用该方法。若配合 Web 应用程序的验证机制,或架构设计采用REST(REpresentational State Transfer,表征状态转移)标准的同类Web 网站,就可能会开放使用 PUT 方法。

HEAD:获得报文首部

​ HEAD 方法和 GET 方法一样,只是不返回报文主体部分。用于确认URI 的有效性及资源更新的日期时间等。

DELETE:删除文件

​ DELETE 方法用来删除文件,是与 PUT 相反的方法。DELETE 方法按请求 URI 删除指定的资源。

​ 但是,HTTP/1.1 的 DELETE 方法本身和 PUT 方法一样不带验证机制,所以一般的 Web 网站也不使用 DELETE 方法。当配合 Web 应用程序的验证机制,或遵守 REST 标准时还是有可能会开放使用的。

GET与POST的区别

​ 对于程序员来说,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 技术通过在请求和响应报文中写入 Cookie 信息来控制客户端的状态。

Http是一种无状态的协议

​ HTTP 是无状态协议,它不对之前发生过的请求和响应的状态进行管理。也就是说,无法根据之前的状态进行本次的请求处理。假设要求登录认证的 Web 页面本身无法进行状态的管理(不记录已登录的状态),那么每次跳转新页面不是要再次登录,就是要在每次请求报文中附加参数来管理登录状态。不可否认,无状态协议当然也有它的优点。由于不必保存状态,自然可减少服务器的 CPU 及内存资源的消耗。

​ 保留无状态协议这个特征的同时又要解决类似的矛盾问题,于是引入了 Cookie 技术。 Cookie 会根据从服务器端发送的响应报文内的一个叫做 Set-Cookie 的首部字段信息,通知客户端保存 Cookie。当下次客户端再往该服务器发送请求时,客户端会自动在请求报文中加入 Cookie 值后发送出去。 服务器端发现客户端发送过来的 Cookie 后,会去检查究竟是从哪一个客户端发来的连接请求,然后对比服务器上的记录,最后得到之前的状态信息。

猜你喜欢

转载自my.oschina.net/u/3483440/blog/1812506
今日推荐