HTTP协议之基本知识

什么是HTTP协议

HTTP(HyperText Transfer Protocol, 超文本传输协议)。Web使用该协议作为规范,完成客户端到服务器端一系列运作流程。Web是建立在HTTP协议上通信的。

当我们在网页浏览器输入URL时,WEB是如何呈现的?

在这里插入图片描述
Web浏览器从Web服务器获取文件资源等信息,从而显示在Web页面。

这种通过发送请求获取服务器资源的Web浏览器等,都可称为客户端。
在这里插入图片描述

HTTP协议的演变

  1. HTTP 1.0

HTTP协议的第二个版本,第一个在通讯中指定版本号的HTTP协议版本,至今仍被广泛采用。相对于HTTP 0.9 增加了如下主要特性:

  • 请求与响应支持头域
  • 响应对象以一个响应状态行开始
  • 响应对象不只限于超文本
  • 开始支持客户端通过POST方法向Web服务器提交数据,支持GET、HEAD、POST方法
  • 支持长连接(但默认还是使用短连接),缓存机制,以及身份认证
  1. HTTP 1.1
    HTTP协议的第三个版本是HTTP 1.1,是目前使用最广泛的协议版本 。HTTP 1.1是目前主流的HTTP协议版本,因此这里就多花一些笔墨介绍一下HTTP 1.1的特性。

HTTP 1.1引入了许多关键性能优化:keepalive连接,chunked编码传输,字节范围请求,请求流水线等

Persistent Connection(keepalive连接)
允许HTTP设备在事务处理结束之后将TCP连接保持在打开的状态,一遍未来的HTTP请求重用现在的连接,直到客户端或服务器端决定将其关闭为止。
在HTTP1.0中使用长连接需要添加请求头 Connection: Keep-Alive,而在HTTP 1.1 所有的连接默认都是长连接,除非特殊声明不支持( HTTP请求报文首部加上Connection: close )

参考:https://www.cnblogs.com/andashu/p/6441271.html

HTTP协议格式

HTTP协议是用于客户端与服务器端之间的通信。与TCP/IP一样协议族内的其他协议一样。

请求访问文本或图像资源的一段是客户端,提供资源响应的一端是服务器端。HTTP协议能够明确区分客户端和服务器端。

  1. HTTP请求

在这里插入图片描述
请求报文是由请求方法、请求URI、协议版本、可选的请求首部字段和内容实体构成的。

  • 首行:请求方法 + URI + 协议版本。
  • Header:请求的属性,冒号分割的键值对;每组属性之间使用\n分隔;遇到空行表示Header部分结束
  • Body:空行后面的内容都是Body. Body允许为空字符串. 如果Body存在, 则在Header中会有一个Content-Length属性来标识Body的长度;
  1. HTTP响应
    在这里插入图片描述
    响应报文是由响应版本、状态码、解释状态码的原因短语、可选的响应首部字段以及实体主体构成。
  • 首行: [版本号] + [状态码] + [状态码解释]
  • Header: 请求的属性, 冒号分割的键值对;每组属性之间使用\n分隔;遇到空行表示Header部分结束
  • Body: 空行后面的内容都是Body. Body允许为空字符串. 如果Body存在, 则在Header中会有一个Content-Length属性来标识Body的长度; 如果服务器返回了一个html页面, 那么html页面内容就是在body中。
  1. HTTP 常见header
  • Content-Type: 数据类型(text/html等)
  • Content-Length: Body的长度
  • Host: 客户端告知服务器, 所请求的资源是在哪个主机的哪个端口上;
  • User-Agent: 声明用户的操作系统和浏览器版本信息;
  • referer: 当前页面是从哪个页面跳转过来的;
  • location: 搭配3xx状态码使用, 告诉客户端接下来要去哪里访问;
  • Cookie: 用于在客户端存储少量信息. 通常用于实现会话(session)的功能

HTTP请求方法

  1. GET:获取资源

GET方法用来请求那些已经被URI识别的资源,指定的资源经服务器端解析之后返回响应内容。

也就是说,如果请求的资源是本文,保持原样返回,如果是像 CGI(Common Gateway Interface, 通用网关接
口) 那样的程序, 则返回经过执行后的输出结果。
在这里插入图片描述

在这里插入图片描述

  1. POST:传输实体主体

POST 方法用来传输实体的主体。
在这里插入图片描述
在这里插入图片描述

  1. PUT:传输文件

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

  1. HEAD:获得报文首部

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

  1. DELETE:删除文件

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

  1. OPTIONS:询问支持的方法

OPTIONS 方法用来查询针对请求 URI 指定的资源支持的方法。

  1. TRACE:追踪路径

TRACE 方法是让 Web 服务器端将之前的请求通信环回给客户端的方法。客户端通过 TRACE 方法可以查询发送出去的请求是怎样被加工修改/ 篡改的。 这是因为, 请求想要连接到源目标服务器可能会通过代理中转, TRACE 方法就是用来确认连接过程中发生的一系列操作。

  1. CONNECT:要求用隧道协议连接代理

CONNECT 方法要求在与代理服务器通信时建立隧道, 实现用隧道协议进行 TCP 通信。 主要使用 SSL(Secure Sockets Layer, 安全套接层) 和 TLS(Transport Layer Security, 传输层安全) 协议把通信内容加密后经网络隧道传输。

HTTP状态码

状态码的职责是当客户端向服务器端发送请求时, 描述返回的请求结果。 借助状态码, 用户可以知道服务器端是正常处理了请求, 还是出现了错误。

响应类别有以下5种。
在这里插入图片描述

2XX 请求成功

  1. 200 OK

表示从客户端发来的请求在服务器端被正常处理了。
在响应报文内, 随状态码一起返回的信息会因方法的不同而发生改变。 比如, 使用 GET 方法时, 对应请求资源的实体会作为响应返回; 而使用 HEAD 方法时, 对应请求资源的实体首部不随报文主体作为响应返回(即在响应中只返回首部, 不会返回实体的主体部分) 。

  1. 204 No Content

表示请求已成功处理,但是在响应报文中不包含实体的主体部分。

一般在只需要从客户端往服务器发送信息, 而对客户端不需要发送新信息内容的情况下使用。

  1. 206 Partial Content

该状态码表示客户端进行了范围请求, 而服务器成功执行了这部分的GET 请求。 响应报文中包含由 Content-Range 指定范围的实体内容。

3XX 重定向

3XX 响应结果表明浏览器需要执行某些特殊的处理以正确处理请求。

  1. 301 Moved Permanently

永久性重定向。 该状态码表示请求的资源已被分配了新的 URI, 以后应使用资源现在所指的 URI。 也就是说, 如果已经把资源对应的 URI保存为书签了, 这时应该按Location 首部字段提示的 URI 重新保存。

  1. 302 Found

临时性重定向。 该状态码表示请求的资源已被分配了新的 URI, 希望用户(本次) 能使用新的 URI 访问。

  1. 303 See Other

该状态码表示由于请求对应的资源存在着另一个 URI, 应使用 GET方法定向获取请求的资源。

  1. 304 Not Modified

该状态码表示客户端发送附带条件的请求时, 服务器端允许请求访问资源, 但未满足条件的情况。 304 状态码返回时, 不包含任何响应的主体部分。 304 虽然被划分在 3XX 类别中, 但是和重定向没有关系。

4XX 客户端错误

  1. 400 Bad Request

该状态码表示请求报文中存在语法错误。 当错误发生时, 需修改请求的内容后再次发送请求。 另外, 浏览器会像 200 OK 一样对待该状态码。

  1. 401 Unauthorrized

该状态码表示发送的请求需要有通过 HTTP 认证(BASIC 认证、DIGEST 认证) 的认证信息。 另外若之前已进行过 1 次请求, 则表示用 户认证失败。

返回含有 401 的响应必须包含一个适用于被请求资源的 WWWAuthenticate 首部用以质询(challenge) 用户信息。 当浏览器初次接收到 401 响应, 会弹出认证用的对话窗口。

  1. 403 Forbidden

该状态码表明对请求资源的访问被服务器拒绝了。 服务器端没有必要给出拒绝的详细理由, 但如果想作说明的话, 可以在实体的主体部分对原因进行描述, 这样就能让用户看到了。

未获得文件系统的访问授权, 访问权限出现某些问题(从未授权的发送源 IP 地址试图访问) 等列举的情况都可能是发生 403 的原因。

  1. 404 Not Found

该状态码表明服务器上无法找到请求的资源。 除此之外, 也可以在服务器端拒绝请求且不想说明理由时使用。

5XX 服务器错误

  1. 500 Internal Server Error

该状态码表明服务器端在执行请求时发生了错误。 也有可能是 Web应用存在的 bug 或某些临时的故障。

  1. 503 Service Unavailable

该状态码表明服务器暂时处于超负载或正在进行停机维护, 现在无法处理请求。 如果事先得知解除以上状况需要的时间, 最好写入RetryAfter 首部字段再返回给客户端。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值