http协议简介

简介

HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写。它是一个应用层且无状态的协议,由请求和响应构成,是标准的客户端服务器(C/S)模型。

http位置图

http协议基于tcp协议之上,有时也在tls或ssl协议层之上,变成https:

http协议简介_第1张图片

默认端口:
http -> 80
https -> 443

https的实现原理

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

  1. 对称加密:密钥只有一个,加密解密为同一个密码,且加解密速度快,典型的对称加密算法有DES、AES等;
  2. 非对称加密:密钥成对出现(且根据公钥无法推知私钥,根据私钥也无法推知公钥),加密解密使用不同密钥(公钥加密需要私钥解密,私钥加密需要公钥解密),相对对称加密速度较慢,典型的非对称加密算法有RSA、DSA等。
    下面看一下https的通信过程:
http协议简介_第2张图片

https通信的优点:

  1. 客户端产生的密钥只有客户端和服务器端能得到;
  2. 加密的数据只有客户端和服务器端才能得到明文;
  3. 客户端到服务端的通信是安全的。

请求-响应模型

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

http协议简介_第3张图片

工作流程

一次http操作,其工作原理可分为四步:

  1. 客户端与服务端建立tcp连接,这个过程会经历tcp的三次握手,简单叙述就是:
    一:SYN
    二:SYN,ACK
    三:SYN,ACK
  2. 客户端发送一个标准格式的http请求。
  3. 服务端给予相应的http响应信息。
  4. 断开连接。

请求/响应头域

头域 = 域名 + 冒号 + 域值 (三部分组成),其中,域名无大小写之分,头域可以有多个。除了常用标准的头域,也可以自定义自己的头域。

比如,请求头格式:

Host: www.baidu.com\r\n
Cookie: k=v\r\n

响应头格式也一样:

Content-Type: image/gif\r\n
Set-Cookie: k=v\r\n

http请求格式

http方法 [空格] 请求url [空格] http版本号 [回车换行]
头域
[回车换行]
实体内容

举例:

GET /hello.htm HTTP/1.1
Accept: */*
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)

hello world

http响应格式

http版本号 [空格] 状态码 [空格] 原因 [回车换行]
头域
[回车换行]
实体内容

举例:

HTTP/1.1 400 bad request
Server: Apache-Coyote/1.1

hello world

http状态码

状态代码有三位数字组成,第一个数字定义了响应的类别,且有五种可能取值:

  1. 1xx:指示信息--表示请求已接收,继续处理
    100——客户必须继续发出请求
    101——客户要求服务器根据请求转换HTTP协议版本

  2. 2xx:成功--表示请求已被成功接收、理解、接受
    200——交易成功
    201——提示知道新文件的URL
    202——接受和处理、但处理未完成
    203——返回信息不确定或不完整
    204——请求收到,但返回信息为空
    205——服务器完成了请求,用户代理必须复位当前已经浏览过的文件
    206——服务器已经完成了部分用户的GET请求

  3. 3xx:重定向--要完成请求必须进行更进一步的操作
    300——请求的资源可在多处得到
    301——删除请求数据
    302——在其他地址发现了请求数据
    303——建议客户访问其他URL或访问方式
    304——客户端已经执行了GET,但文件未变化
    305——请求的资源必须从服务器指定的地址得到
    306——前一版本HTTP中使用的代码,现行版本中不再使用
    307——申明请求的资源临时性删除

  4. 4xx:客户端错误--请求有语法错误或请求无法实现
    400——错误请求,如语法错误
    401——未授权
    HTTP 401.1 - 未授权:登录失败
      HTTP 401.2 - 未授权:服务器配置问题导致登录失败
      HTTP 401.3 - ACL 禁止访问资源
      HTTP 401.4 - 未授权:授权被筛选器拒绝
    HTTP 401.5 - 未授权:ISAPI 或 CGI 授权失败
    402——保留有效ChargeTo头响应
    403——禁止访问
    HTTP 403.1 禁止访问:禁止可执行访问
      HTTP 403.2 - 禁止访问:禁止读访问
      HTTP 403.3 - 禁止访问:禁止写访问
      HTTP 403.4 - 禁止访问:要求 SSL
      HTTP 403.5 - 禁止访问:要求 SSL 128
      HTTP 403.6 - 禁止访问:IP 地址被拒绝
      HTTP 403.7 - 禁止访问:要求客户证书
      HTTP 403.8 - 禁止访问:禁止站点访问
      HTTP 403.9 - 禁止访问:连接的用户过多
      HTTP 403.10 - 禁止访问:配置无效
      HTTP 403.11 - 禁止访问:密码更改
      HTTP 403.12 - 禁止访问:映射器拒绝访问
      HTTP 403.13 - 禁止访问:客户证书已被吊销
      HTTP 403.15 - 禁止访问:客户访问许可过多
      HTTP 403.16 - 禁止访问:客户证书不可信或者无效
    HTTP 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. 5xx:服务器端错误--服务器未能实现合法的请求
    HTTP 500 - 内部服务器错误
      HTTP 500.100 - 内部服务器错误 - ASP 错误
      HTTP 500-11 服务器关闭
      HTTP 500-12 应用程序重新启动
      HTTP 500-13 - 服务器太忙
      HTTP 500-14 - 应用程序无效
      HTTP 500-15 - 不允许请求 global.asa
      Error 501 - 未实现
    HTTP 502 - 网关错误

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

HTTP协议的GET方法,支持只请求某个资源的某一部分;
206 Partial Content 部分内容响应;
Range 请求的资源范围;
Content-Range 响应的资源范围;
在连接断开重连时,客户端只请求该资源未下载的部分,而不是重新请求整个资源,来实现断点续传。
分块请求资源实例:
eg1:Range: bytes=306302- :请求这个资源从306302个字节到末尾的部分;
eg2:
Content-Range: bytes 306302-604047/604048
:响应中指示携带的是该资源的第306302-604047的字节,该资源共604048个字节;
客户端通过并发的请求相同资源的不同片段,来实现对某个资源的并发分块下载。从而达到快速下载的目的。目前流行的FlashGet和迅雷基本都是这个原理。

多线程下载的原理:

  1. 下载工具开启多个发出HTTP请求的线程;
  2. 每个http请求只请求资源文件的一部分:Content-Range: bytes 20000-40000/47000;
  3. 合并每个线程下载的文件。


你可能感兴趣的:(http协议简介)