【HTTP协议与网络编程】HTTP概念和消息

一. HTTP概念

1. HTTP是什么

  • HTTP即超文本传输协议(HyperText Transfer Protocol),是网络中使用最广泛的一种网络协议。

  • HTTP是一种“客户端—服务端”的协议,可以理解成端到端的协议。

  • 最初的http协议是为了提供一种发布和接收HTML页面的方法。发展历史:

    版本
    HTTP/0.91991年制定,有严重缺陷,只支持GET方法,不支持MIME类型
    HTTP/1.01996年制定,支持多种请求方法,支持多媒体对象,广泛应用
    HTTP/1.0+支持持久连接、虚拟主机、代理链接等,成为非官方的实际标准
    HTTP/1.11999年制定,修正HTTP中的设计缺陷,优化性能,去除糟粕
    HTTP/2.0 (或HTTP-NG)大幅度的提升了 web 性能,进一步减少网络延迟。HTTP 2.0只用于https://网址
  • HTTP请求与响应消息:

    • 游览器(也就是客户端)发出的消息叫做请求(requests)
    • 服务器回应的消息叫响应(responses)
  • HTTP基本原理:

    HTTP是一种可扩展的协议,是应用层的协议,通过TCP或TLS加密的TCP连接来发送,理论来说任何可靠传输都能使用。HTTP可以根据网页需求,获取部分WEB文档内容更新网页。

2. 基于HTTP的组件系统

  • 请求会通过一个实体(用户代理)发送。大多数情况用户代理是浏览器。

    • 每一个发到服务器的请求都会被服务器处理并返回一个消息,也就是响应。在请求和响应之间有很多称为Proxy的实体,它们的作用和表现都不一样。
    • 客户端发送消息和服务端接收消息都是通过各自的代理接收的。
  • 客户端:

    user-agent: 是任何能够为用户发起行为的工具。通常是游览器,也有特殊情况如web调试应用程序

    • 游览器经常作为一个发送请求的实体,但有些机制可以模拟由服务器发起的请求信息。如NodeJS

    游览器是如何加载页面:

    • 游览器首先向指定的服务器发送请求获取页面的HTML文档。
    • 然后解析HTML文档中的资源信息发送其他请求,来获取可执行脚本或CSS样式进行页面渲染。包括(图片和视频)
    • 最后游览器将这些资源整合到一起,就是完整的网页
  • 服务端:

    Web服务器响应客户端的请求,如提供所请求的文档。

    • 一个服务器上可以装载多个服务

    服务器只是虚拟意义上代表的一个机器:

    • 它可以是共享负载(负载均衡)的一组服务器组成的计算机集群
    • 也可以是一种复杂的软件,通过向其他计算机(如缓存,数据库服务器等)发送请求来获取部分或全部资源。
  • 代理(Proxies)

    代理可以是很多概念,对于前段来说客户端的代理就是游览器

    • 代理既可以表现的透明,又可以不透明(‘改变请求’会通过它们)。
    • 代理的作用:
      1. 缓存(可以是公开的也可以私有,像游览器的缓存)
      2. 过虑(像反病毒扫描,家长控制)
      3. 负载均衡(让多个服务器服务不同的请求)
      4. 认证(对不同的资源进行权限管理)
      5. 日志记录(允许储存历史信息)

3. HTTP的相关概念

  • HTTP的基本特性

    HTTP是简单的:http大体上被设计的简单易读,http报文能够被人读懂,还允许简单测试,降低了门槛

    HTTP是可扩展的:http/1.0中的HTTP headers让协议扩展变得非常容易

    HTTP是无状态,有会话的:在同一个连接中,两个执行成功的请求之间没有关系。这样有个问题,用户不能在同一个网站中进行连续交互

    HTTP和链接:连接是由传输层来控制,这从根本上不属于HTTP的范围

  • HTTP能控制什么

    • 缓存
    • 开发同源限制(跨域问题)
    • 认证:基本认证功能可以直接通过HTTP提供,或用HTTP Cookies来设置指定会话
    • 代理和隧道:通常服务器或客户端是内网的,对外网隐藏真实IP地址。因此HTTP请求要通过代理越过这个网络屏障
    • 会话
  • HTTP流

    1. 打开一个TCP连接:TCP连接被用来发送一条或多条请求,以接受回应消息
    2. 发送一个HTTP报文: HTTP报文(在HTTP/2.0之前)是可读的
    3. 读取服务器端返回的报文消息
    4. 关闭连接或为后续请求重新连接

二. HTTP消息

1. HTTP消息是什么

  • HTTP报文(HTTP消息):是服务器和客户端直接交换数据的方式。

    有两种类型的消息

    • 请求:客户端发送来触发服务器上的一个动作
    • 响应:来自服务器的应答
  • HTTP消息由采用ASCII编码的多行文本构成。

    • HTTP/1.1和之前版本中,消息通过连接公开发送
    • HTTP/2.0中为了优化和性能改进,消息被分到多个HTTP帧中
  • HTTP请求报文和响应报文

    • 请求报文的组成

      请求方式(method)—资源路径(Path)—协议版本号(Version of the protocol)—请求头部信息(header)

    • 响应报文的组成

      协议版本号(Version of the protocol)—状态码(Status code)—状态信息(Status message)—响应头部信息(header)

2. HTTP消息的基本结构

  • HTTP请求和响应消息有相似的结构,如下:

    1. 起始行(start line): 描述要执行的请求,或状态。起始行总是单行的
    2. HTTP头(头部信息)(HTTP headers): 指明请求或描述消息正文
    3. 空行(empty line): 表示所有关于请求的数据发送完毕
    4. 正文(body): 可选的包含请求相关数据的正文,或相应相关的文档。正文大小由起始行的HTTP头决定
    • 起始行和HTTP头统称为"请求头"
    • 空行和正文统称为“消息正文”

3. 起始行

  • 起始行(start line)包含三个元素

    1. 请求方法:描述要执行的动作
    2. 请求地址:通常是URL,或是协议、端口和域名的绝对路径
    3. HTTP版本:定义了剩余报文的结构,作为对期望的响应版本的指示符
  • HTTP协议中的请求方法

    请求方法描述
    GET请求一个指定资源的表示形式。应只用于获取数据
    HEAD请求一个与GET请求的响应相同的响应,但没有响应体。
    POST用于将尸体提交到指定的资源,通常导致状态或服务器上的副作用的更改。
    PUT用于请求有效载荷替换目标资源的所有当前表示
    DELETE用于删除指定的资源
    CONNECT建立一个到目标资源标识的服务器的隧道
    OPTION用于描述目标资源的通信选项
    TRACE沿着到目标资源的路径执行一个信息环回测试
    PATCH用于对资源应用部分修改
    • 最常用的请求是GET和POST
    • 常见的请求方法至少有七种,请求方法不止七种

4. 请求头与请求主体

  • 请求头:可以让客户端向服务器端传递附加信息

    组成:

    • 请求头名(不区分大小写)----冒号(:)----具体的值(不带换行符)
      • 值如果有多个,之间用逗号(,)分隔

    根据不同上下文,请求头可分为:

    • 通用头: 同时适用于请求和响应消息,但与最终消息主体中传输的数据无关的信息头
    • 请求头: 包含更多关于获取的资源和客户端本身的信息
    • 实体头: 包含有关实体主体的更多信息,如主体长(Content-Length)度或其MIME类型。
    消息头描述
    Accept显示服务器端接收数据类型
    Accept-Encoding接收编码格式
    Accept-Language接收的语言
    Connection链接方式
    Cookie缓存
    Host当前客户端所在地址
    Referer发送当前的地址
    User-Agent发送当前客户端信息
  • 请求主体: 请求消息的最后一部分是请求主体,也就是发送给服务器端的内容

    • 不是所有的请求都要请求主体,获取资源的请求如GET、HEAD、DELETE、OPTIONS通常不要请求主体
    • 有的请求将数据发送到服务器以便更新数据,如POST请求
    • 请求主体大致分两类
      1. 单一资源主体: 由一个单文件组成。该类型请求主体由两个header定义: Content-Type和Content-Length
      2. 多资源主体: 由多部分请求主体组成,每一部分包含不同的信息位。通常和HTML表单联系在一起

5. 状态行与状态码

HTTP响应消息的起始行叫做状态行(status line),包含信息:

  1. 协议版本:通常为HTTP/1.1
  2. 状态码:表明请求是成功或失败。常见状态码200,404或302
  3. 状态文本:一个简短的,纯粹的信息。通过状态码的文本描述,帮人们理解该HTTP消息
  • 状态码:

    • 信息响应

      状态码描述
      100 Continue该状态码表明到此为止所有内容都是可行的,客户端应继续请求,如果已完成则忽略
      101 Switching Protocol该代码是响应客户端的Upgrade标头发送的,并指示服务器也正切换的协议
      102 Processing该代码表示服务器已收到并正在处理该请求,但没有响应可用
    • 成功响应

      状态码描述
      200 OK请求成功
      201 Created该请求已成功,并创建了一个新资源.通常是PUT请求之后发送的响应
      202 Accepted请求已收到,但还未响应,没有结束
      203服务器已成功处理了请求,但返回的实体头部元信息不是在初始服务器上有效的确定集合,而是自本地或第三方的拷贝
      204 No Content服务器成功处理了请求,但不需要返回任何实体内容,并且希望返回更新了的源信息
      205 Reset Content服务器成功处理了请求,且没有返回任何内容。该响应主要是被用于接收用户输入后,立即重置表单
      206 Partial Content服务器已经成功处理了部分GET请求
    • 重定向

      状态码描述
      300 Multiple Choice被请求的资源有一系列可供选择的回馈消息
      301 Moved Permanently被请求的资源已永久移动到新位置
      302 Found请求的资源现在临时从不同的URL响应请求
      303 See Other对应当前请求的响应可以在另一个URL上被找到,而且客户端应当采用GET的方式访问那个资源
      304 Not Modified如果客户端发送了一个带条件的GET请求且该请求已被允许,而文档的内容(自上次访问以来或根据请求的条件) 并没有改变
    • 客户端响应

      状态码描述
      400 Bad Request语义有误,当前请求无法被服务器理解
      401Unauthorized当前请求需要用户验证
      403 Forbidden服务器已经理解请求,但是拒绝执行
      404 Not Found请求失败,请求所希望得到的资源未被在服务器上发现
      405 Method Not Allowed请求行中指定的请求方法不能被用于请求相应的资源
    • 服务器端响应

      状态码描述
      500 Internal Server Error服务器遇到了内部错误
      501 Not Implement此请求方法不被服务器支持且无法被处理
      502 Bad Gateway此错误响应表明服务器作为网关需要得到一个处理这个请求的响应
      503 Service Unavailable服务器没有准备好处理请求
      504 Gateway Timeout当服务器作为网关,不能及时得到响应时返回此错误代码
      505 HTTP Version Not Supported服务器不支持请求中所使用的HTTP协议版本

6. 响应头与响应主体

  • 响应头:允许服务器向客户端传递附加信息

    组成和请求头一致:

    • 请求头名(不区分大小写)----冒号(:)----具体的值(不带换行符)
      • 值如果有多个,之间用逗号(,)分隔

    根据不同上下文,请求头可分为:

    • 通用头: 同时适用于请求和响应消息,但与最终消息主体中传输的数据无关的信息头
    • 响应头: 包含有关响应的补充信息,如其位置或服务器本身的消息头
    • 实体头: 包含有关实体主体的更多信息,如主体长(Content-Length)度或其MIME类型。
    消息头描述
    cache-control控制缓存
    content-length响应主体的大小
    content-type响应主体的MIME类型
    date当前日期
    last-modified最后的修改日期
    server服务器信息
    x-开头的自定义响应头
  • 响应主体:响应的最后一部分是响应主体。有的响应不需要主体(如201或204)

    分为两类:

    1. 单一资源主体:
      • 由已知长度的单个文件组成。通过两个header定义:Content-type和Content-Length
      • 由未知长度的单个文件组成。通过将Transfer-Encoding设置为chunked来使用chunks编码
    2. 多资源主体:由多部分响应主体组成,每部分包含不同的信息段。但这是比较少见的

7. MIME类型

MIME类型全称为Multipurpose Internet Mail Extensions,被译为多用途Internet邮件扩展类型,是一种标准化的方式来表示文档的性质和格式

  • 游览器通常使用MIME类型来确定如何处理文档
  • 服务器把正确的MIME类型附加到响应对象的头部是非常重要的
类型描述示例
text表明文件是普通文本text/plain,text/html,text/css
image表明是某种图像image/gif,image/png,image/jpeg
audio表明是某种音频文件audio/midi,audio/mpeg,audio/wav
video表明是某种视频文件video/webm,video/ogg
application表明是某种二进制数据application/json,application/xml,application/pdf

8. HTTP1.x缺点

  • HTTP/1.x报文有一些性能上的缺点:
    • 消息头不像消息主体一样会被压缩
    • 两个报文之间的header通常非常相似,但他们仍然在连接中重复传输。
    • 无法复用。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值