1、什么是Http协议

HTTP(Hyper Text Transfer Protocol,超文本传输协议)是一个简单的请求-响应协议。它通常运行在TCP之上,默认使用80端口。

它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。

http请求与响应

注:

  • **文本:**如:html、字符串等。
  • **超文本:**如:图片、音乐、视频、定位、地图等。

附:HTTPS

HTTPS (Hypertext Transfer Protocol Secure ),是以安全为目标的 HTTP 通道,在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性,默认使用443端口。它被广泛用于万维网上安全敏感的通讯,例如交易支付等方面。

2、Http的三个时代

2.1、Http1.0时代

Http/1.0协议:客户端与Web服务器连接后,只能获得一个Web资源。

2.2、Http1.1时代

Http/1.1协议:客户端与Web服务器连接后,可以获得多个Web资源。

2.3、Http2.0时代

Http/2.0协议:是下一代HTTP协议,正在逐渐覆盖市场。

3、Http工作流程

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

(1)客户机与服务器建立TCP连接。只要单击某个超级链接/输入网址/提交表单等。
(2)建立连接后,客户机发送http请求给服务器。
(3)服务器接到请求后,响应信息。
(4)客户端接收服务器所返回的信息,然后客户机与服务器断开TCP连接

4、Http消息格式

4.1、Http请求消息格式(请求协议)

客户端发送一个HTTP请求到服务器的请求消息包括以下格式:请求行(request line)、请求头部(header)、空行和请求数据四个部分组成,如下图所示。

请求消息格式

例:

请求消息示例

4.2、Http响应消息格式(响应协议)

HTTP响应也由四个部分组成,分别是:**状态行、消息报头、空行和响应正文。**如下图所示:

响应消息格式

例:

响应消息示例

5、Http消息(报文)头分析示例

下面,我们以访问百度为例,分析Http请求和响应消息的格式(协议)。

baidu

5.1、通用报文头

1
2
3
4
5
Request URL: https://www.baidu.com/				//请求地址
Request Method: GET //请求方式
Status Code: 200 OK //响应状态码
Remote Address: 14.215.177.38:443 //远程地址+端口
Referrer Policy: unsafe-url //请求报文头中Referer字段的处理策略

5.2、Http请求报文头

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Accept: text/html,application/xhtml+xml,application/xml					//支持的文件类型
Accept-Encoding: gzip, deflate, br //支持的编码方式
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,zh-TW;q=0.7 //支持的语言
Cache-Control: max-age=0 //缓存控制
Connection: keep-alive //请求完成后是断开还是保持连接
Cookie: BIDUPSID=6F8249769F46B0E2A1372BF9C0E8FA2C; PSTM=1615993610; //Cookie
__yjs_duid=1_d1bcd19f86fcdb9111817fd8d96280ec1620133642846; MCITY=-3623A; BAIDUID=65AB258777BBCD9901405B1CD680E117:SL=0:NR=10:FG=1; BD_UPN=12314753; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598; BAIDUID_BFESS=65AB258777BBCD9901405B1CD680E117:SL=0:NR=10:FG=1; BA_HECTOR=012g8g802l240h208h80qirs1hhnvof19; ZFY=MRAM:A3C9SsQ8sgDSQt:AoiM6SQ7acXCiADDL33VxhTz8:C; B64_BOT=1; BD_HOME=1; BDRCVFR[feWj1Vr5u3D]=I67x6TjHwwYf0; delPer=0; BD_CK_SAM=1; PSINO=6;
Host: www.baidu.com //主机名称
Referer: https://www.baidu.com/s?wd=HTTP&rsv_spt=1 //指定该请求是从哪个页面跳转页来的(用于分析用户来源)
sec-ch-ua: " Not;A Brand";v="99", "Google Chrome";v="97", "Chromium";v="97"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "Windows"
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: same-origin
Sec-Fetch-User: ?1
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36

5.3、Http响应报文头

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Bdpagetype: 2
Bdqid: 0xc9e45461001382cf
Cache-Control: private //缓存控制
Connection: keep-alive //连接
Content-Encoding: gzip //内容编码
Content-Type: text/html;charset=utf-8 //内容类型
Date: Sun, 11 Sep 2022 01:59:41 GMT //日期
Expires: Sun, 11 Sep 2022 01:59:41 GMT //有效期
Isprivate: 1
Server: BWS/1.1
Set-Cookie: BDSVRTM=67; path=/ //Cookie
Set-Cookie: BD_HOME=1; path=/
Set-Cookie: H_PS_PSSID=37151_36548_36461_37354_37300_36885_37273_36786_37281_37261_26350_22159; path=/; domain=.baidu.com
Strict-Transport-Security: max-age=172800
Traceid: 1662861581042247425014547845471903384271
Transfer-Encoding: chunked
X-Frame-Options: sameorigin
X-Ua-Compatible: IE=Edge,chrome=1

6、Http请求方式

根据HTTP标准,HTTP请求可以使用多种请求方式。

  • HTTP1.0定义了三种请求方式: GET、POSTHEAD方式。
  • HTTP1.1新增了六种请求方式:OPTIONS、PUT、PATCH、DELETE、TRACECONNECT 方式。

常用的Http请求方式主要有:

序号 请求方式 描述
1 GET 一次请求能够携带的参数比较少,数据大小有限制,会在浏览器的URL地址栏显示数据内容。不安全,但高效。
2 POST 一次请求能够携带的参数没有限制,数据大小没有限制,不会在浏览器的URL地址栏显示数据内容。安全,但效率相对较低。
3 HEAD 类似于 GET 请求,只不过返回的响应中没有具体的内容,用来获取报文头。用于确定客户端输入的URI的有效性和资源更新的日期时间。
4 OPTIONS 客户端查询服务器针对特定资源所支持的HTTP请求方式,查看服务器的性能。
5 PUT 从客户端向服务器传送数据取代指定的文档的内容。
6 DELETE 请求服务器删除服务器上的某资源。

7、HTTP响应状态码

状态代码有三位数字组成,第一个数字定义了响应的类别,共分五种类别:

  • 1xx:【指示信息】表示请求已接收,继续处理。
  • 2xx:【成功】表示请求已被成功接收、理解、接受。
  • 3xx:【重定向】要完成请求必须进行更进一步的操作。
  • 4xx:【客户端错误】请求有语法错误或请求无法实现。
  • 5xx:【服务器端错误】服务器未能实现合法的请求。

HTTP响应状态码列表:

状态码 状态码英文名称 中文描述
100 Continue 继续。客户端应继续其请求
101 Switching Protocols 切换协议。服务器根据客户端的请求切换协议。只能切换到更高级的协议,例如,切换到HTTP的新版本协议
200 OK **请求成功。**一般用于GET与POST请求
201 Created 已创建。成功请求并创建了新的资源
202 Accepted 已接受。已经接受请求,但未处理完成
203 Non-Authoritative Information 非授权信息。请求成功。但返回的meta信息不在原始的服务器,而是一个副本
204 No Content 无内容。服务器成功处理,但未返回内容。在未更新网页的情况下,可确保浏览器继续显示当前文档
205 Reset Content 重置内容。服务器处理成功,用户终端(例如:浏览器)应重置文档视图。可通过此返回码清除浏览器的表单域
206 Partial Content 部分内容。服务器成功处理了部分GET请求
300 Multiple Choices 多种选择。请求的资源可包括多个位置,相应可返回一个资源特征与地址的列表用于用户终端(例如:浏览器)选择
301 Moved Permanently 永久移动。请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI。今后任何新的请求都应使用新的URI代替
302 Found 临时移动。与301类似。但资源只是临时被移动。客户端应继续使用原有URI
303 See Other 查看其它地址。与301类似。使用GET和POST请求查看
304 Not Modified 未修改。所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。客户端通常会缓存访问过的资源,通过提供一个头信息指出客户端希望只返回在指定日期之后修改的资源
305 Use Proxy 使用代理。所请求的资源必须通过代理访问
306 Unused 已经被废弃的HTTP状态码
307 Temporary Redirect 临时重定向。与302类似。使用GET请求重定向
400 Bad Request 客户端请求的语法错误,服务器无法理解
401 Unauthorized 请求要求用户的身份认证
402 Payment Required 保留,将来使用
403 Forbidden 服务器理解请求客户端的请求,但是拒绝执行此请求
404 Not Found 服务器无法根据客户端的请求找到资源(网页)。通过此代码,网站设计人员可设置"您所请求的资源无法找到"的个性页面
405 Method Not Allowed 客户端请求中的方法被禁止
406 Not Acceptable 服务器无法根据客户端请求的内容特性完成请求
407 Proxy Authentication Required 请求要求代理的身份认证,与401类似,但请求者应当使用代理进行授权
408 Request Time-out 服务器等待客户端发送的请求时间过长,超时
409 Conflict 服务器完成客户端的 PUT 请求时可能返回此代码,服务器处理请求时发生了冲突
410 Gone 客户端请求的资源已经不存在。410不同于404,如果资源以前有现在被永久删除了可使用410代码,网站设计人员可通过301代码指定资源的新位置
411 Length Required 服务器无法处理客户端发送的不带Content-Length的请求信息
412 Precondition Failed 客户端请求信息的先决条件错误
413 Request Entity Too Large 由于请求的实体过大,服务器无法处理,因此拒绝请求。为防止客户端的连续请求,服务器可能会关闭连接。如果只是服务器暂时无法处理,则会包含一个Retry-After的响应信息
414 Request-URI Too Large 请求的URI过长(URI通常为网址),服务器无法处理
415 Unsupported Media Type 服务器无法处理请求附带的媒体格式
416 Requested range not satisfiable 客户端请求的范围无效
417 Expectation Failed 服务器无法满足Expect的请求头信息
500 Internal Server Error 服务器内部错误,无法完成请求
501 Not Implemented 服务器不支持请求的功能,无法完成请求
502 Bad Gateway 网关错误。作为网关或者代理工作的服务器尝试执行请求时,从远程服务器接收到了一个无效的响应
503 Service Unavailable 由于超载或系统维护,服务器暂时的无法处理客户端的请求。延时的长度可包含在服务器的Retry-After头信息中
504 Gateway Time-out 充当网关或代理的服务器,未及时从远端服务器获取请求
505 HTTP Version not supported 服务器不支持请求的HTTP协议的版本,无法完成处理

(本讲完,系列博文持续更新中…… )

阿汤笔迹微信公众平台

关注**“阿汤笔迹”** 微信公众号,获取更多学习笔记。
原文地址:http://www.atangbiji.com/2022/09/11/HttpInDetail
博主最新文章在个人博客 http://www.atangbiji.com/ 发布。