新闻动态大文件传输

HTTP传输协议介绍(三)
HTTP请求方法 超文本传输协议是OSI 7层模型的传输层中的无状态协议。 http客户端根据需要构建适当的http请求方法,在http协议中定义了8种http请求方法,http请求方法也称为“请求操作”,不同的方法规定了通过不同的操作指定的资源方式。 在http的发展过程中,出现了很多http版本,其大部分协议都具有向后兼容性。 当发出http请求时,客户端在请求时向服务器通知该协议的版本号,服务器使用相同版本或更早版本的协议进行响应。 HTTP工作原理 一般来说,http协议的结构是很好理解的,但用户通过客户端向服务方发起请求,建立TCP连接,指定端口号,默认为80,连接到服务器进行操作。在那个端口听浏览器的要求。在接收到来自客户端的请求后,服务器将响应状态返回给客户端,并返回特定的数据内容。 http协议定义了web客户端如何从web服务器请求web页,以及服务器如何向客户端发送web页。http协议采用请求/响应模型。客户端向服务器发送请求消息,包括请求方法、网址、协议版本、请求标头和请求数据。服务器在状态行上作出响应,包括协议版本、成功或错误代码、服务器信息、响应标头和响应数据。 下图表明了这种请求/响应模型。
2019-07-24
HTTP传输协议介绍(二)
一、HTTP请求消息request Request请求协议,是从客户端向服务器发出请求,包括用户提交的信息以及客户端的一些信息。客户端可通过HTML表单或在网页地址后面提供参数的方法提交数据,然后服务器通过request对象的相关方法来获取这些数据。request的各种方法主要用来处理客户端浏览器提交的请求中的各项参数和选项。 Request常用方法介绍: A. 获取请求消息: Request.getRequestURL:浏览器发出请求时的完整URL,协议,主机名,端口。 Request.getRequestURI:浏览器发出请求资源名,去掉协议和主机名 Request.getQuerySting:请求行中的参数部分,只能显示get方式发出的参数,post方式看不到。 Request.getRemoteAddr:浏览器器所处于的客户机的ip地址 Request.getRemoteHost:浏览器所处于的客户机的主机名。 Request.getRemotePort:浏览器所处于的客户机使用的网络端口。 Request.getLocalAddr:服务器的ip地址。 Request.getLocalName:服务器的主机名。 Request.getMethod:得到客户机请求方式一般是get或者post。 B. 获取参数 Request.getParameter:用于获取单值参数 Request.getParameterValues:用于获取具有多值的参数。 Request.getParameterMap:用于遍历所有的参数,返回Map类型。 C. 获取头部消息 Request.getHeader:获取浏览器传递过来的头信息。 Request.getHeaderNames:获取浏览器所有的头信息名称,根据头信息名称就能遍历出所有的头信息。 二、Response响应协议 Response代表响应,用于动态响应客户端请示,控制发送给用户的信息,并将动态生成响应。Response对象只提供了一个数据集合cookie,它用于在客户端写入cookie值。若指定的cookie不存在,则创建它。若存在,则将自动进行更新。结果返回给客户端浏览器。可通过该对象分别设置HTTP响应:响应行,响应头,响应体。 转发和重定向的区别: A. 转发是服务器内部,路径,可以省略项目名;重定向既可以是服务器内部,也可以是服务器外部。 B. 转发的地址栏和窗体内容不一致;重定向的地址栏和窗体是一致的。 C. 转发的客户端请求次数是一次,和一次响应;重定向是多次客户端请求和响应。 Response常用方法介绍: 1、setContentType 告知浏览器数据类型 2、setCharacterEncoding设置Response的编码方式 3、setHeader设置消息头 4、setStatus设置状态码 5、addCookie添加Cookie 6、sendRedirect重定向 7、getOutputstream获取通向浏览器的字节流 8、getWriter获取通向浏览器的字符流。 三、HTTP状态码 当浏览者访问一个网页时,浏览者的浏览器会向网页所在服务器发出请求。当浏览器接收并显示网页前,此网页所在的服务器会返回一个包含HTTP状态码的信息头(server header)用以响应浏览器的请求,状态码表示网页服务器超文本传输协议响应状态。 HTTP常见状态码: 1、消息类: 2、成功类: 3、重定向: 4、请求错误: 5、服务器错误:
2019-07-23
HTTP传输协议介绍(一)
在我们了解HTTP之前,先来看一下HTTP的发展历程简图: HTTP(Hyper Text Transfer Protocol超文本传输协议)是互联网数据通信的基础。它作为一个简单的请求-响应协议,通常运行在TCP之上。 HTTP永远是客户端发起请求,服务器端给予响应,客户端表明想要访问的信息和请求动作,服务端收到请求动作后根据相应的指令访问服务器资源,最后发送HTTP响应把结果传递给客户端。 HTTP特点: 1、简单快捷。由于HTTP协议简单,所以HTTP服务器程序规模小,通信速度快。并且客户端向服务器端请求时候,只需要传送请求方法和路径。(常用的请求方法有HEAD、POST、GET) 2、无状态。HTTP对于事务处理没有记忆力,如果需要前面的信息,只能重传,这就增加了数据的传输量 3、无连接。服务器端响应完成并且收到客户端的应答后就断开连接,这种方式可以节约传输时间 4、HTTP支持B/S及C/S模式 5、灵活。通过HTTP协议,客户端可以传输任意类型的数据。 URL和URI的区别 统一资源标识符URI(Uniform Resource Identifiers)被HTTP协议用来传输数据和建立连接,而URL是一种特殊的URI。 万维网上每种可用的资源,例如图像、视频、程序、HTML文档等,都是一个URI来定位的,URI一般由访问资源命名机制、存放资源主机名、资源自身的名称组成。 而URL(uniform resource locator统一资源定位器)不仅可以用来标识一个资源,还指明了如何定位它,URL一般由协议、存有该资源的主机IP地址(有时也包括端口号)、主机具体的资源地址三部分组成。采用URL可以用一种统一的格式来描述各种信息资源,包括文件、目录和服务器的地址等。 URN(uniform resource name,统一资源命名)则通过名字来标识资源。 URI以一种高层次且抽象的概念来定义统一资源标识,URL和URN则是具体资源标识。简单来说,每一个URL都是URI,但不是每一个URI都是URL。
2019-07-22
C/S架构与B/S架构的详细介绍
C/S架构 C/S架构是典型的两层架构,全称Client/Sever,即客户端服务器端架构。 第一层用户表示层(客户端) 第二层数据库层(服务器端) 在C/S架构中,客户端与服务器端直接连接,由两部分组成架构,并分别承担重要角色: 第一层客户机除了输入输出、运算能力以外,还可以处理一些计算、数据存储等方面的业务逻辑事务。 第二层服务器主要承担事务逻辑的处理,由于客户机能够分担部分逻辑事务,因此减轻服务器的负担。 B/S架构 B/S架构是三层架构,全称Browser/Sever,即浏览器/服务器架构。随着IT网络的发展,C/S架构无法满足当前需求,进而衍生的B/S架构,它主要是利用WWW浏览器技术实现,将系统功能实现的核心部分集合到服务器上,客户机仅需安装浏览器即可。 第一层浏览器(客户端) 第二层WEB服务器 第三层数据库服务器 第一层是浏览器,即客户端,只有简单的输入输出功能,处理极少部分的事务逻辑。 第二层是WEB服务器,职能为信息传递,即用户访问数据库前,使用SQL语句向WEB服务器发送请求。 第三层是数据库服务器,存放大量数据。在收到WEB服务器请求后,对SQL语句进行处理,并将结果发送给WEB服务器,WEB服务器将收到的数据结果转换为HTML文本形式发送给浏览器。 C/S架构与B/S架构的比较
2019-07-19
TCP传输协议如何进行拥塞控制?
拥塞控制 拥塞现象是指到达通信子网中某一部分的分组数量过多,使得该部分网络来不及处理,以致引起这部分乃至整个网络性能下降的现象,严重时甚至会导致网络通信业务陷入停顿,即出现死锁现象。这种现象跟公路网中经常所见的交通拥挤一样,当节假日公路网中车辆大量增加时,各种走向的车流相互干扰,使每辆车到达目的地的时间都相对增加(即延迟增加),甚至有时在某段公路上车辆因堵塞而无法开动。 造成拥塞的原因 1、主要原因是通信量导致的,多个输入对应多个输出,多条流入线路有分组到达,并需要同一输出线路,此时,如果路由器没有足够的内存来存放所有这些分组,那么有的分组就会丢失。 2、路由器的慢带处理器的缘故,以至于难以完成必要的处理工作,如缓冲区排队、更新路由表等。 防止拥塞的方法 1、在传输层可采用:重传策略、乱序缓存策略、确认策略、流控制策略和确定超时策略。 2、在网络层可采用:子网内部的虚电路与数据报策略、分组排队和服务策略、分组丢弃策略、路由算法和分组生存管理。 3、在数据链路层可采用:重传策略、乱序缓存策略、确认策略和流控制策略。 控制方法 1、缓冲区分配法:此方法使用于虚电路的分组交换网络中,在网络中建立虚拟的节点为虚拟电路预先分配一个或多个数据缓冲区。若某个节点缓冲器已被占满,则呼叫请求分组另择路由,或者返回一个"忙"信号给呼叫者。 2、分组丢弃法:该法不必预先保留缓冲区,当缓冲区占满时,将到来的分组丢弃。若通信子网提供的是数据报服务,则用分组丢弃法来防止拥塞发生不会引起大的影响。但若通信子网提供的是虚电路服务,则必须在某处保存被丢弃分组的备份,以便拥塞解决后能重新传送。有两种解决被丢弃分组重发的方法,一种是让发送被丢弃分组的节点超时,并重新发送分组直至分组被收到;另一种是让发送被丢弃分组的节点在尝试一定次数后放弃发送,并迫使数据源节点超时而重新开始发送。 3、定额控制法:这种方法在通信子网中设置适当数量的称做"许可证"的特殊信息,一部分许可证在通信子网开始工作前预先以某种策略分配给各个源节点,另一部分则在子网开始工作后在网中四处环游。当源节点要发送来自源端系统的分组时,它必须首先拥有许可证,并且每发送一个分组注销一张许可证。目的节点方则每收到一个分组并将其递交给目的端系统后,便生成一张许可证。
2019-07-17
TCP传输协议中如何解决丢包问题
TCP在不可靠的网络上实现可靠的传输,必然会有丢包。TCP是一个“流”协议,一个详细的包将会被TCP拆分为好几个包上传,也是将会把小的封裝成大的上传,这就是说TCP粘包和拆包难题。 但是许多人有不同的理解。TCP协议本身确保传输的数据不会丢失完整性。如果在传输过程中发现数据丢失或数据包丢失,最大的可能性是在发送或接收程序的过程中出现问题。 例如,服务器向客户端发送大量数据,并且发送频率非常高,因此发送链接中很可能会出现错误(1、程序处理逻辑错误;2、多线程同步问题;3、缓冲区溢出等)如果发送失败得不到处理,那么客户端收到得数据将少于理论数据,这将导致数据丢失与数据包丢失。这种现象,其实本质上来说不是丢包,也不是丢数据,只是因为程序处理有错误,导致有些数据没有成功地被socket发送出去。 关于send函数的问题: 首先必须明确send函数做了什么。 他是将数据传递给本地TCP层,还是将数据传递给应用层,确认接收方TCP层后再返回。在后者的情况下,你说的没错,其实不然。 那是由于nagle算法不能使用了,即该算法将send函数接收的小数据汇总成大数据包发送。 即使send函数能进行数据发送,对方也不一定被接受。 TCP协议只是在传输层履行义务,send函数只是应用层起到向TCP层传递数据的作用,除此之外与TCP层没有任何关系。 常见的解决方案包括拆包、添加包头和发送组合包。如果服务器或客户端断开连接,一般会使用心跳测试。 心跳测试:每隔一段时间向服务器发送数据包。为了节省资源,通常会发送空数据包。如果发送失败表明套接字已断开,此时需要根据特定条件释放资源并重新连接。 TCP传输可以保证数据交换的可靠性,这意味着一台主机将数据正确地传输到目标计算机,目标计算机的协议栈有一定的限制,如果不及时处理在目标计算机上接收到的数据,堆栈就会溢出。 这种溢出不是由TCP协议本身引起的,而是由系统的IP协议栈的缓冲区溢出引起的!
2019-07-16
TCP协议如何保证数据的顺序传输
TCP是一种面向连接的、可靠的基于字节流服务。“面向连接”意味着使用TCP协议的应用在建立联系之前,彼此需要先建立TCP联系;而TCP协议确保传输过程中数据的顺序性则体现其“可靠”的特性,具体如下: TCP协议将数据切分为多个小片段(数据被划分为合理长度),小片段由头部(header)和数据(payload)组成,为了确保抵达数据的顺序,TCP协议给每个片段的头部(header)都分配了序列号,方便后期按照序列号排序。 1、当某个片段按照顺序发送后,发送方会将已发送的数据片段暂时保存在缓冲区内,并为每个已发送的数据设置一个时间区间。 2、当接收方收到正确的符合顺序的数据片段后,会优先对数据片段做完整检验,如确认无误,再把数据片段交给上层协议,并给发送方一个TCP片段反馈信息用来告知(ACK acknowledge)发送方:我已经接收到这个片段了。这个TCP片段被称为ACK回复。举个例子:发送的第一个片段序列号为T,其对应的ACK回复则为T+1,也就是接收方要接收的下一个发送片段的序列号。 假设在规定的时间区间之内发送方收到接收方的TCP片段反馈信息,则发送方可以释放缓冲区的数据,如若超时未收到应答,发送方则重新发送数据,直到收到应答,或者重发数据次数达到上限为止。 TCP协议的种种机制保证了数据传输的顺序,然而TCP报文段作为IP数据来传输,在IP数据报的到达可能会失序,因此TCP报文段的到达也存在失序的可能。特殊情况下,TCP将对收到的数据进行重新排列,确保顺序正确后再交给应用层。
2019-07-15
TCP协议的确认重传机制
TCP协议是面向连接的传输层协议,TCP的传输特点具有可靠性,它具有面向连接服务来确保可靠稳定传输,而确认重传机制是TCP协议保证可靠稳定传输最重要的机制,他包括累计确认、超时时间计算、快速重传等几个方面。 确认重传机制 在发送一个数据之后,就开启一个定时器,若是在这个时间内没有收到发送数据的ACK确认报文,则对该报文进行重传,在达到一定次数还没有成功时放弃并发送一个复位信号。 1、累计确认 累计确认就是TCP协议的确认方法,TCP使用可变长度报文段来发送数据,重传时,报文段数据可能会比原报文段数据包含更多的数据,因此对数据报和报文段无法进行简单的确认。TCP使用流序号对流中的一个位置进行确认,即序号和确认号一一对应,接收方使用序号将报文段重新排序,且以正确接收到的流的最长连续前缀进行确认。 2、超时时间计算 超时时间计算是开启定时器的设定时间,从而保证网络资源利用率,避免因定时器的时间(RTO)不确定而影响网络传输效率。 即发送方连续发送三个数据包,第二个数据包丢失,接收方未接收到,无法返回ACK。每当发送一个数据包时,就启动一个定时器, 而定时器溢出了,发送方还没接收到接收方返回的ACK时,确定重传。 3、快速重传 快速重传机制是发送方在接收端的反馈信息后引发重传,而不是定时器超时重传。快速重传机制要求当接收到失序报文段时,TCP需要立即生成确认信息(重复ACK),并且失序情况表明在后续数据到达前出现了丢包,发送端的工作即为尽快填补丢包带来的数据段空缺。
2019-07-12

关注云语科技

wechat qrcode

微信扫一扫,获取最新资讯