http协议

网络编程 专栏收录该内容
2 篇文章 0 订阅

HTTP协议--超文本传输协议

一、概念介绍

1、定义

HTTP 协议(HyperText Transfer Protocol,超文本传输协议)是一个基于请求与响应模式的、无状态的、应用层的协议是用于从WWW 服务器传输超文本到本地浏览器的传送协议。 

 

HTTP 协议通常承载于TCP 协议之上,有时也承载于TLS SSL 协议层之上,这个时候,

就成了我们常说的HTTPS。如下图所示:

 

默认HTTP 的端口号为80HTTPS 的端口号为443

 

2HTTP请求响应模型

HTTP 协议永远都是客户端发起请求,服务器回送响应。

 

 

这样就限制了使用HTTP 协议,无法实现在客户端没有发起请求的时候,服务器将消息

推送给客户端。

HTTP 协议是一个无状态的协议,同一个客户端的这次请求和上次请求是没有对应关系。

缺少状态如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

 

3、HTTP连接过程

一次HTTP 操作称为一个事务,其工作过程可分为四步:

1)首先客户机与服务器需要建立连接。只要单击某个超级链接,HTTP 的工作开始。

2)建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME 信息包括请求修饰符、客户机信息和可能的内容。

3)服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME 信息包括服务器信息、实体信息和可能的内容。

4)客户端接收服务器所返回的信息通过浏览器显示在用户的显示屏上,然后客户机与服务器断开连接。如果在以上过程中的某一步出现错误,那么产生错误的信息将返回到客户端,有显示屏输出。对于用户来说,这些过程是由HTTP 自己完成的,用户只要用鼠标点击,等待信息显示就可以了。

Wireshark检测一次HTTP连接过程

 

这里211.100.209.50是浏览器,66.249.89.147就是服务器

浏览器向服务器发出连接请求。SYNseq:X x=0,并进入SYN_SEND状态,等待服务器确认

服务器回应了浏览器的请求,并要求确认。此时为:SYNACK,此时seqy0),ACKx+1(为1)。此时服务器进入SYN_RECV状态;

浏览器回应了服务器的确认,连接成功。为:ACK,此时seq:x+1(为1),ACK:y+1(为1)。此为三次握手的第三步;

浏览器发出一个页面HTTP请求。

服务器确认。

服务器发送数据。

客户端确认。

服务器响应了一个200状态,表示成功。

客户端发出一个图片HTTP请求。

服务器响应了一个304HTTP头,告诉浏览器别打扰它,直接用缓存。

客户端又发出一个图片HTTP请求。

服务器还是响应了一个304HTTP头。

浏览器确认。

服务器准备关闭连接,并要求确认。

浏览器确认。

为什么需要确认:

因为IP包在网络中有可能延时达到客户端定时器的超时时间,因此接收端无法确认收到的报文是否为有效报文,还需要跟客户端确认。

 

4、HTTP消息报头

HTTP消息由客户端到服务器的请求和服务器到客户端的响应组成。请求消息和响应消息都是由开始行(对于请求消息,开始行就是请求行,对于响应消息,开始行就是状态行),消息报头(可选),空行(只有CRLF的行),消息正文(可选)组成。

HTTP消息报头包括普通报头、请求报头、响应报头、实体报头。

 

每个HTTP头域由一个域名,冒号(:)和域值三部分组成。域名是大小写无关的,域值前可以添加任何数量的空格符,头域可以被扩展为多行,在每行开始处,使用至少一个空格或制表符。

请求包:

 

常用的请求报头

Accept

Accept请求报头域用于指定客户端接受哪些类型的信息。egAcceptimage/gif,表明客户端希望接受GIF图象格式的资源;Accepttext/html,表明客户端希望接受html文本。

Accept-Charset

Accept-Charset请求报头域用于指定客户端接受的字符集。如果在请求消息中没有设置这个域,缺省是任何字符集都可以接受。

Accept-Encoding

Accept-Encoding请求报头域类似于Accept,但是它是用于指定可接受的内容编码。egAccept-Encoding:gzip.deflate.如果请求消息中没有设置这个域服务器假定客户端对各种内容编码都可以接受。

Accept-Language

Accept-Language请求报头域类似于Accept,但是它是用于指定一种自然语言。egAccept-Language:zh-cn.如果请求消息中没有设置这个报头域,服务器假定客户端对各种语言都可以接受。

Authorization

Authorization请求报头域主要用于证明客户端有权查看某个资源。当浏览器访问一个页面时,如果收到服务器的响应代码为401(未授权),可以发送一个包含Authorization请求报头域的请求,要求服务器对其进行验证。

 

响应包

 

 

4.1 Host 头域

Host请求报头域主要用于指定被请求资源的Internet主机和端口号,它通常从HTTP URL中提取出来的eg

我们在浏览器中输入:http://www.baidu.com/index.html

浏览器发送的请求消息中,就会包含Host请求报头域,如下:

Hostwww.baidu.com

此处使用缺省端口号80,若指定了端口号,则变成:Hostwww.baidu.com:指定端口号

 

4.2 Referer

Referer 头域允许客户端指定请求uri 的源资源地址,这可以允许服务器生成回退链表,

可用来登陆、优化cache 等。他也允许废除的或错误的连接由于维护的目的被追踪。如果请

求的uri 没有自己的uri 地址,Referer 不能被发送。如果指定的是部分uri 地址,则此地址应该是一个相对地址。

 

4.3 User-Agent

User-Agent 头域的内容包含发出请求的用户信息。User-Agent请求报头域允许客户端将它的操作系统、浏览器和其它属性告诉服务器。

 

4.4 Cache-Control头域

Cache-Control 指定请求和响应遵循的缓存机制。在请求消息或响应消息中设置Cache-Control 并不会修改另一个消息处理过程中的缓存处理过程。请求时的缓存指令包括no-cacheno-storemax-agemax-stalemin-freshonly-if-cached,响应消息中的指令包括publicprivateno-cacheno-storeno-transformmust-revalidateproxy-revalidatemax-age

 

4.4 Date头域

表示消息产生的日期和时间

 

 二、HTTP请求消息

1、请求消息格式

请求消息格式如下所示:

请求行

通用信息头|请求头|实体头

CRLF(回车换行)

实体内容

其中“请求行”为:请求行 方法 [空格请求URI [空格版本号 [回车换行]

 

HTTP 请求消息实例:

GET /hello.htm HTTP/1.1

Accept: */*

Accept-Language: zh-cn

Accept-Encoding: gzip, deflate

If-Modified-Since: Wed, 17 Oct 2007 02:15:55 GMT

If-None-Match: W/"158-1192587355000"

User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)

Host: 192.168.2.162:8080

Connection: Keep-Alive

 

请求方法(所有方法全为大写)有多种,各个方法的解释如下:

GET     请求获取Request-URI所标识的资源

POST    Request-URI所标识的资源后附加新的数据

HEAD    请求获取由Request-URI所标识的资源的响应消息报头

PUT     向指定资源位置上传其最新内容。出于安全考虑,大多数服务器不支持此方法。

DELETE  请求服务器删除Request-URI所标识的资源

TRACE   请求服务器回送收到的请求信息,主要用于测试或诊断

CONNECT 保留将来使用

OPTIONS 请求查询服务器的性能,或者查询与资源相关的选项和需求

 

 

 

2、响应消息格式

HTTP 响应消息的格式如下所示:

状态行

通用信息头|响应头|实体头

CRLF

实体内容

其中:状态行 版本号 [空格状态码 [空格原因 [回车换行]

 

HTTP 响应消息实例如下所示:

HTTP/1.1 200 OK\r\n

ETag: W/"158-1192590101000"\r\n

Last-Modified: Wed, 17 Oct 2007 03:01:41 GMT\r\n

Content-Type: text/html\r\n

Content-Length: 158\r\n

Date: Wed, 17 Oct 2007 03:01:59 GMT\r\n

Server: Apache-Coyote/1.1\r\n

 \r\n

this is conetetn\r\n


3、请求头

HTTP 最常见的请求头如下:

Ø  Accept:浏览器可接受的MIME 类型;

Ø  2.2 Accept-Charset:浏览器可接受的字符集;

Ø  Accept-Encoding:浏览器能够进行解码的数据编码方式,比如gzipServlet 能够向

支持gzip 的浏览器返回经gzip 编码的HTML 页面。许多情形下这可以减少10

倍的下载时间;

Ø  Accept-Language:浏览器所希望的语言种类,当服务器能够提供一种以上的语言版

本时要用到;

Ø Authorization:授权信息,通常出现在对服务器发送的WWW-Authenticate 头的应

答中;

Ø  Connection:表示是否需要持久连接。如果Servlet 看到这里的值为“Keep-Alive”,

或者看到请求使用的是HTTP 1.1HTTP 1.1 默认进行持久连接),它就可以利用持

久连接的优点,当页面包含多个元素时(例如Applet,图片),显著地减少下载所

需要的时间。要实现这一点,Servlet 需要在应答中发送一个Content-Length 头,最

简单的实现方法是:先把内容写入ByteArrayOutputStream,然后在正式写出内容之

前计算它的大小;

Ø  Content-Length:表示请求消息正文的长度;

Ø  Cookie:这是最重要的请求头信息之一;

Ø  From:请求发送者的email 地址,由一些特殊的Web 客户程序使用,浏览器不会

用到它;

Ø  Host:初始URL 中的主机和端口;

Ø  If-Modified-Since:只有当所请求的内容在指定的日期之后又经过修改才返回它,

否则返回304Not Modified”应答;

Ø  Pragma:指定“no-cache”值表示服务器必须返回一个刷新后的文档,即使它是代理

服务器而且已经有了页面的本地拷贝;

Ø  Referer:包含一个URL,用户从该URL 代表的页面出发访问当前请求的页面。

Ø  User-Agent:浏览器类型,如果Servlet 返回的内容与浏览器类型有关则该值非常有

用;

Ø  UA-PixelsUA-ColorUA-OSUA-CPU:由某些版本的IE 浏览器所发送的非标准的请求头,表示屏幕大小、颜色深度、操作系统和CPU 类型。

 

4、响应头

HTTP 最常见的响应头如下所示:

Ø Allow:服务器支持哪些请求方法(如GETPOST 等);

Ø Content-Encoding:文档的编码(Encode)方法。只有在解码之后才可以得到

Ø Content-Type 头指定的内容类型。利用gzip 压缩文档能够显著地减少HTML 文档的

下载时间。Java GZIPOutputStream 可以很方便地进行gzip 压缩,但只有Unix 上的Netscape Windows 上的IE 4IE 5 才支持它。因此,Servlet 应该通过查看Accept-Encoding 头(即request.getHeader("Accept-Encoding"))检查浏览器是否支持gzip,为支持gzip 的浏览器返回经gzip 压缩的HTML 页面,为其他浏览器返回普通页面;

Ø Content-Length:表示内容长度。只有当浏览器使用持久HTTP 连接时才需要这个数

据。

Ø Content-Type: 表示后面的文档属于什么MIME 类型。Servlet 默认为text/plain,但通常需要显式地指定为text/html 。由于经常要设置Content-Type ,因此HttpServletResponse 提供了一个专用的方法setContentTyep。 可在web.xml 文件中配置扩展名和MIME 类型的对应关系;

Ø  Date:当前的GMT 时间。你可以用setDateHeader 来设置这个头以避免转换时间格

式的麻烦;

Ø Expires:指明应该在什么时候认为文档已经过期,从而不再缓存它。

Ø Last-Modified:文档的最后改动时间。客户可以通过If-Modified-Since 请求头提供

一个日期,该请求将被视为一个条件GET,只有改动时间迟于指定时间的文档才会

返回,否则返回一个304Not Modified)状态。Last-Modified 也可用setDateHeader

方法来设置;

Ø  Location:表示客户应当到哪里去提取文档。Location 通常不是直接设置的,而是

通过HttpServletResponse sendRedirect 方法,该方法同时设置状态代码为302

Ø  Refresh:表示浏览器应该在多少时间之后刷新文档,以秒计。除了刷新当前文档

之外,你还可以通过setHeader("Refresh", "5; URL=http://host/path")让浏览器读取指

定的页面。注意这种功能通常是通过设置HTML 页面HEAD 区的<META HTTP-EQUIV="Refresh" CONTENT="5;URL=http://host/path">实现,这是因为,自动刷新或重定向对于那些不能使用CGI Servlet HTML 编写者十分重要。但是,对于Servlet 来说,直接设置Refresh 头更加方便。注意Refresh 的意义是“秒之后刷新本页面或访问指定页面”,而不是“每隔秒刷新本页面或访问指定页面”。因此,连续刷新要求每次都发送一个Refresh 头,而发送204 状态代码则可以阻止浏览器继续刷新,不管是使用Refresh 头还是<META HTTP-EQUIV="Refresh" ...>。注意Refresh头不属于HTTP 1.1 正式规范的一部分,而是一个扩展,但Netscape IE 都支持它。

5、实体头

实体头用坐实体内容的元信息,描述了实体内容的属性,包括实体信息类型,长度,压

缩方法,最后一次修改时间,数据有效性等。

Ø AllowGET,POST

Ø Content-Encoding:文档的编码(Encode)方法,例如:gzip,见“2.5 响应头”;

Ø Content-Language:内容的语言类型,例如:zh-cn

Ø Content-Length:表示内容长度,eg80,可参考“2.5 响应头”;

Ø Content-Location : 表示客户应当到哪里去提取文档,例如:

    http://www.dfdf.org/dfdf.html,可参考“2.5 响应头”;

Ø Content-MD5MD5 实体的一种MD5 摘要,用作校验和。发送方和接受方都计算

MD5 摘要,接受方将其计算的值与此头标中传递的值进行比较。Eg1Content-MD5:

<base64 of 128 MD5 digest>Eg2dfdfdfdfdfdfdff==

Ø Content-Range:随部分实体一同发送;标明被插入字节的低位与高位字节偏移,

也标明此实体的总长度。Eg1 : Content-Range: 1001-2000/5000

Ø Content-Type : 标明发送或者接收的实体的MIME 类型。Eg : text/html;

charset=GB2312 主类型/子类型;

Ø Expires:为证明不缓存;

Ø Last-ModifiedWEB 服务器认为对象的最后修改时间,比如文件的最后修改时间,

动态页面的最后产生时间等等。例如:Last-ModifiedTue, 06 May 2008 02:42:43 GMT.

 

6、扩展头

HTTP 消息中,也可以使用一些再HTTP1.1 正式规范里没有定义的头字段,这些头字

段统称为自定义的HTTP 头或者扩展头,他们通常被当作是一种实体头处理。

现在流行的浏览器实际上都支持Cookie,Set-Cookie,Refresh Content-Disposition 等几个

常用的扩展头字段。

Ø Refresh1;url=http://www.dfdf.org //秒跳转到指定位置;

Ø Content-Disposition:头字段;

Ø Content-TypeWEB 服务器告诉浏览器自己响应的对象的类型。

eg1Content-Typeapplication/xml 

eg2applicaiton/octet-stream

Ø Content-Dispositionattachment; filename=aaa.zip

 

7、HTTP状态码

Ø 1**:请求收到,继续处理

100——客户必须继续发出请求

101——客户要求服务器根据请求转换HTTP 协议版本

Ø 2**:操作成功收到,分析、接受

200——交易成功

201——提示知道新文件的URL

202——接受和处理、但处理未完成

203——返回信息不确定或不完整

204——请求收到,但返回信息为空

205——服务器完成了请求,用户代理必须复位当前已经浏览过的文件

206——服务器已经完成了部分用户的GET 请求

Ø 3**:完成此请求必须进一步处理

300——请求的资源可在多处得到

301——删除请求数据

302——在其他地址发现了请求数据

303——建议客户访问其他URL 或访问方式

304——客户端已经执行了GET,但文件未变化

305——请求的资源必须从服务器指定的地址得到

306——前一版本HTTP 中使用的代码,现行版本中不再使用

307——申明请求的资源临时性删除

Ø 4**:请求包含一个错误语法或不能完成

400——错误请求,如语法错误

401——未授权

401.1 - 未授权:登录失败

401.2 - 未授权:服务器配置问题导致登录失败

401.3 - ACL 禁止访问资源

401.4 - 未授权:授权被筛选器拒绝

401.5 - 未授权:ISAPI 或 CGI 授权失败

402——保留有效ChargeTo 头响应

403——禁止访问

403.1 禁止访问:禁止可执行访问

403.2 - 禁止访问:禁止读访问

403.3 - 禁止访问:禁止写访问

403.4 - 禁止访问:要求 SSL

403.5 - 禁止访问:要求 SSL 128

403.6 - 禁止访问:IP 地址被拒绝

403.7 - 禁止访问:要求客户证书

403.8 - 禁止访问:禁止站点访问

403.9 - 禁止访问:连接的用户过多

403.10 - 禁止访问:配置无效

403.11 - 禁止访问:密码更改

403.12 - 禁止访问:映射器拒绝访问

403.13 - 禁止访问:客户证书已被吊销

403.15 - 禁止访问:客户访问许可过多

403.16 - 禁止访问:客户证书不可信或者无效

403.17 - 禁止访问:客户证书已经到期或者尚未生效

404——没有发现文件、查询或URl

405——用户在Request-Line 字段定义的方法不允许

406——根据用户发送的Accept 拖,请求资源不可访问

407——类似401,用户必须首先在代理服务器上得到授权

408——客户端没有在用户指定的时间内完成请求

409——对当前资源状态,请求不能完成

410——服务器上不再有此资源且无进一步的参考地址

411——服务器拒绝用户定义的Content-Length 属性请求

412——一个或多个请求头字段在当前请求中错误

413——请求的资源大于服务器允许的大小

414——请求的资源URL 长于服务器允许的长度

415——请求资源不支持请求项目格式

416——请求中包含Range 请求头字段,在当前请求资源范围内没有range 指示值,请

求也不包含If-Range 请求头字段

417——服务器不满足请求Expect 头字段指定的期望值,如果是代理服务器,可能是下

一级服务器不能满足请求长。

Ø 5**:服务器执行一个完全有效请求失败

500 - 内部服务器错误

500.100 - 内部服务器错误

500-11 服务器关闭

500-12 应用程序重新启动

500-13 - 服务器太忙

500-14 - 应用程序无效

500-15 - 不允许请求

501 - 未实现

502 - 网关错误

503 服务器当前不能处理客户端的请求,一段时间后可能恢复正常

504 该状态码用于充当代理或网关的服务器;它指出接收服务器没有从远端服务器得到及时的响应

505 服务器并不支持在请求中所标明的HTTP 版本例如,客户端的请求是HTTP/0.9版本的

 

701 客户端发起的HTTPS请求结束(不属于错误)

702 WAP网关检测到客户端的请求消息不完整

703 WAP网关检测到客户端请求的网址有不符合规范的字符

704 客户端不支持响应类型如有些手机不支持html页面,而此时WAP网关又没有启动 页面转换功能

705 WAP网关与远端服务器建立连接失败

706 WAP网关从远端服务器读取数据失败

707 远端服务器返回的响应消息语法有错误,如不完整、无法解析等

708 远端服务器返回的响应内容的编码有错误,如页面无法解析

709 服务器响应很慢,导致用户主动终止当前的请求事务

710 WAP网关判定当前内容类型(Content-Type)不能发送给该SP或从该SP下载: SP 内容类型授权控制,例如,application/vnd.wap.mms-message内容只能发送给 mmsc.monternet.com或从mmsc.monternet.com下载;application/java支持从 java.monternet.com下载等。

711 WAP网关查询用户信息失败

712 WAP网关转换图像失败

713 WAP网关由于超出Licence造成无法处理请求

714 WAP网关不支持FTPRTSP等特殊协议

715 WAP网关向客户端转发页面,导致用户主动终止当前的请求事务

716 用户连续快速点击,导致未完成的请求被客户端主动终止

717 WAP网关向客户端传送内容时,客户端没有任何回应,最终超时

718 WAP网关向客户端传送内容时,客户端回应异常终止,且原因为内容体过大 (MESSAGETOOLARGE:0X09)

740 WAP网关解析PIPAP请求失败,原因是PAP请求消息的语法格式错误

741 WAP网关读取PIPAP请求数据包失败,如,对端已经关闭

742 WAP网关不支持PIPAP请求操作

743 WAP网关判定PI无权PUSH当前内容类型(Content-Type):例如,不允许发送SL 只能发送SI,待用户确认后手机才能提取内容;application/vnd.wap.mms-message 能从指定的PIMMSC)下发。

744 PI指定发送时间,但该时间是无效时间,如,指定的时间小于系统当前时间

745 PI指定有连接的PUSH,但当前终端不在线,或终端能力显示终端不支持SIR

746 WAP网关向PI返回结果通知消息时,无法与PI建立连接

747 WAP网关向PI返回结果通知消息时,建立连接后,数据传送失败,如PI关闭了TCP 连接

748 WAP网关向PI返回结果通知消息时,PI返回错误提示

749 WAP网关内部查询接收用户的状态信息(用户在线信息)时失败

750 WAP网关进行PUSH消息编码时失败

751 发送短信WAP网关未与SMSC连接,WAP网关尝试连接SMSC时,无法与SMSC 建立TCP连接。

752 WAP网关向SMSC提交短信时,SMSC返回错误提示

753 WAP网关向SMSC提交短信时,SMSC无响应消息,重试后依然无响应,最后超时

754 WAP网关向SMSC提交短信时,SMSC返回的响应消息的格式错误,无法解析

755 WAP网关向离线用户发送SIR后,超时时间到,客户端没有连接到WAP网关

756 WAP网关向在线用户发送需确认的PUSH后,超时时间到,客户端无响应

757 WAP网关向在线客户端发送有连接PUSH时,客户端返回Abort

799 其它异常

 

三、Session&cookie

1、Cookiesession

Cookie Session 都为了用来保存状态信息,都是保存客户端状态的机制,它们都是为

了解决HTTP 无状态的问题而所做的努力。

Session 可以用Cookie 来实现,也可以用URL 回写的机制来实现。

 

 

 

 

四、缓存的实现

1什么是Web缓存

WEB 缓存(cache)位于Web 服务器和客户端之间。

缓存会根据请求保存输出内容的副本,例如html 页面, 图片,文件,当下一个请求来

到的时候:如果是相同的URL,缓存直接使用副本响应访问请求,而不是向源服务器再次发

送请求。

HTTP 协议定义了相关的消息头来使WEB 缓存尽可能好的工作。 

2与缓存相关的HTTP 扩展消息头

 Expires:指示响应内容过期的时间,格林威治时间GMT

 Cache-Control:更细致的控制缓存的内容

 Last-Modified:响应中资源最后一次修改的时间

 ETag :响应中资源的校验值,在服务器上某个时段是唯一标识的。

 Date:服务器的时间

 If-Modified-Since:客户端存取的该资源最后一次修改的时间,同Last-Modified。

 If-None-Match:客户端存取的该资源的检验值,同ETag。

3客户端缓存生效的常见流程

服务器收到请求时,会在200OK 中回送该资源的Last-Modified 和ETag 头,客户端将该

资源保存在cache 中,并记录这两个属性。当客户端需要发送相同的请求时,会在请求中携带If-Modified-Since 和If-None-Match 两个头。两个头的值分别是响应中Last-Modified 和ETag头的值。服务器通过这两个头判断本地资源未发生变化,客户端不需要重新下载,返回304响应。常见流程如下图所示:

 

4 Web缓存机制

HTTP/1.1 中缓存的目的是为了在很多情况下减少发送请求,同时在许多情况下可以不需要发送完整响应。前者减少了网络回路的数量;HTTP 利用一个“过期(expiration)”机制来为此目的。后者减少了网络应用的带宽;HTTP 用“验证(validation)”机制来为此目的。

HTTP 定义了3 种缓存机制:

1)Freshness :允许一个回应消息可以在源服务器不被重新检查,并且可以由服务器和客户端来控制。例如,Expires 回应头给了一个文档不可用的时间。Cache-Control 中的max-age 标识指明了缓存的最长时间;

2)Validation:用来检查以一个缓存的回应是否仍然可用。例如,如果一个回应有一个

Last-Modified 回应头,缓存能够使用If-Modified-Since 来判断是否已改变,以便判断根据情况发送请求;

3)Invalidation: 在另一个请求通过缓存的时候,常常有一个副作用。例如,如果一个

URL 关联到一个缓存回应,但是其后跟着POST、PUT 和DELETE 的请求的话,缓存就会过期。

 

5断点续传和多线程下载的实现

HTTP 协议的GET 方法,支持只请求某个资源的某一部分;

206 Partial Content 部分内容响应;

Range 请求的资源范围;

Content-Range 响应的资源范围;

在连接断开重连时,客户端只请求该资源未下载的部分,而不是重新请求整个资源,

来实现断点续传。

分块请求资源实例:

Eg1:Range: bytes=306302- :请求这个资源从306302 个字节到末尾的部分;

Eg2:Content-Range: bytes 306302-604047/604048:响应中指示携带的是该资源的第

306302-604047 的字节,该资源共604048 个字节;

客户端通过并发的请求相同资源的不同片段,来实现对某个资源的并发分块下载。从而

达到快速下载的目的。

多线程下载的原理:

下载工具开启多个发出HTTP 请求的线程;

每个http 请求只请求资源文件的一部分:Content-Range: bytes 20000-40000/47000;

合并每个线程下载的文件。

 

 

五、HTTPS

1、概念

HTTPS(全称:Hypertext Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP 通道,简单讲是HTTP 的安全版。即HTTP 下加入SSL 层,HTTPS 的安全基础是SSL,因此加密的详细内容请看SSLhttps 所用的端口号是443

2、https的实现原理

有两种基本的加解密算法类型:

1)对称加密:密钥只有一个,加密解密为同一个密码,且加解密速度快,典型的对称

加密算法有DESAES 等;

2)非对称加密:密钥成对出现(且根据公钥无法推知私钥,根据私钥也无法推知公钥),

加密解密使用不同密钥(公钥加密需要私钥解密,私钥加密需要公钥解密),相对对称加密

速度较慢,典型的非对称加密算法有RSADSA 等。

 

https 通信的优点:

1)客户端产生的密钥只有客户端和服务器端能得到;

2)加密的数据只有客户端和服务器端才能得到明文;

3)客户端到服务端的通信是安全的。

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值