3-知识补充-HTTP协议
文章目录
- 3-知识补充-HTTP协议
- HTTP协议基础
- 什么是HTTP?
- HTTP协议的会话方式
- HTTP1.0和HTTP1.1的区别
- 请求和响应报文
- 报文的格式
- 报文解析实例-请求百度官网
- 请求报文-GET请求
- 请求报文-POST请求-学习用-非请求百度官网
- 响应报文
- 响应状态码
- 有代表性的响应状态码
- 更多的响应状态码
HTTP协议基础
什么是HTTP?
HTTP 超文本传输协议 (HTTP-Hyper Text transfer protocol),是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过十几年的使用与发展,得到不断地完善和扩展。它是一种详细规定了浏览器和万维网服务器之间互相通信的规则,通过因特网传送万维网文档的数据传送协议。客户端与服务端通信时传输的内容我们称之为报文。HTTP协议就是规定报文的格式。HTTP就是一个通信规则,这个规则规定了客户端发送给服务器的报文格式,也规定了服务器发送给客户端的报文格式。实际我们要学习的就是这两种报文。客户端发送给服务器的称为"请求报文",服务器发送给客户端的称为"响应报文"
HTTP协议的会话方式
- 浏览器与服务器之间的通信过程要经历四个步骤:
- 浏览器与WEB服务器的连接过程是短暂的,每次连接只处理一个请求和响应。对每一个页面的访问,浏览器与WEB服务器都要建立一次单独的连接。
- 浏览器到WEB服务器之间的所有通讯都是完全独立分开的请求和响应对。
HTTP1.0和HTTP1.1的区别
- HTTP1.0版本中,浏览器请求一个带有图片的网页,会由于下载图片而与服务器之间开启一个新的连接,即每个连接都是短连接
- 在HTTP1.1版本中,允许浏览器在拿到当前请求对应的全部资源后再断开连接,提高了效率,即支持长连接
- 当下应用最广泛的HTTP版本,还是HTTP1.1
请求和响应报文
报文的格式
整体组成 | 细分组成-请求报文 | 细分组成-响应报文 |
---|---|---|
报文首部 | 请求行 | 响应行 |
请求体(请求首部字段、通用首部字段、实体首部字段、其他) | 响应体(响应首部字段、通用首部字段、实体首部字段) | |
其他 | 其他 | |
空行(CR+LF) | ||
报文主体 |
报文解析实例-请求百度官网
请求报文-GET请求
客户端发送给服务端的报文
原始
GET / HTTP/1.1
Host: www.baidu.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/119.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Cookie: BAIDUID=E547C9FD5BA39A532836EA39C72269E7:FG=1; BIDUPSID=E547C9FD5BA39A53BCC466D017AAE936; PSTM=1682137733; BDUSS=BTcEJUSU01czY2RGtRcXZpTlE2WklxOVVkSkpBdldmWDlrUm10cUJMNDJVVXRsRVFBQUFBJCQAAAAAAAAAAAEAAAA7vpnkuqPD5sfgxOoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADbEI2U2xCNlVX; ZFY=wy8domKcULfRypD8LQe1p47Vqhj7JY1O7oSUIzppwvI:C; COOKIE_SESSION=152902_2_6_6_8_8_1_0_5_3_0_4_152901_1616_5_0_1685672471_1685446700_1685672466%7C9%231618_6_1685446695%7C4; __bid_n=187a73adaee86322304207; FPTOKEN=+382R3H/SngSoMLUj5ZlN3Mv8crD7/ToHdl4w7tweGoGWNOFqbV6SdLpcjSRgPKl6rKrtKasV0dbufhyuOeB+QW7ahG8QEXFrh0XQInJPNGBAbDAHNi1oSCj5aDS9LrZdUChuHHkZqbn4ZHwph/lSbYOEiKPcAUA0fxxfcGdt2EF23MDGcEdtWB+uZEm9N5V/+8HJdDhlMaC/VfDDJnfvskNNikr0gIgAiFgaxSn0v0lI59EGRWi6V3VHk6GAHlOGIuJjfBj9AD5LR+15mtK91VLbXCpobGmTvSD7x4BcB3CODogORAMR29jcbXE3By+JHnsfOLNOeatUmg4yjR4JbsjiwPkmOV+TVNWeBaW7AySqOCkfbBKwguoNdGbraNR56B5L1JolS3c4kkifzZMfw==|KqXDJcj+ZHu2MhqDlKwYjwCKXlNV5xRFVQ20CWKkzmA=|10|87efce1e55907ab7f7c5b6ca1a1f95bb; BAIDU_WISE_UID=wapp_1686639223063_47; MCITY=-198%3A131%3A; BD_LAST_QID=13742169835500460478
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: none
Sec-Fetch-User: ?1
解析
- 请求行:请求方式 / HTTP版本号
GET / HTTP/1.1
- 请求头
- 主机虚拟地址
Host: www.baidu.com
- 用户系统信息
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/119.0
- 浏览器支持的文件类型
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
- 浏览器支持的语言
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
- 浏览器支持的压缩格式
Accept-Encoding: gzip, deflate, br
- 连接方式:长连接
Connection: keep-alive
- Cookie信息
Cookie: BAIDUID=E547C9FD5BA39A532836EA39C72269E7:FG=1; BIDUPSID=E547C9FD5BA39A53BCC466D017AAE936; PSTM=1682137733; BDUSS=BTcEJUSU01czY2RGtRcXZpTlE2WklxOVVkSkpBdldmWDlrUm10cUJMNDJVVXRsRVFBQUFBJCQAAAAAAAAAAAEAAAA7vpnkuqPD5sfgxOoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADbEI2U2xCNlVX; ZFY=wy8domKcULfRypD8LQe1p47Vqhj7JY1O7oSUIzppwvI:C; COOKIE_SESSION=152902_2_6_6_8_8_1_0_5_3_0_4_152901_1616_5_0_1685672471_1685446700_1685672466%7C9%231618_6_1685446695%7C4; __bid_n=187a73adaee86322304207; FPTOKEN=+382R3H/SngSoMLUj5ZlN3Mv8crD7/ToHdl4w7tweGoGWNOFqbV6SdLpcjSRgPKl6rKrtKasV0dbufhyuOeB+QW7ahG8QEXFrh0XQInJPNGBAbDAHNi1oSCj5aDS9LrZdUChuHHkZqbn4ZHwph/lSbYOEiKPcAUA0fxxfcGdt2EF23MDGcEdtWB+uZEm9N5V/+8HJdDhlMaC/VfDDJnfvskNNikr0gIgAiFgaxSn0v0lI59EGRWi6V3VHk6GAHlOGIuJjfBj9AD5LR+15mtK91VLbXCpobGmTvSD7x4BcB3CODogORAMR29jcbXE3By+JHnsfOLNOeatUmg4yjR4JbsjiwPkmOV+TVNWeBaW7AySqOCkfbBKwguoNdGbraNR56B5L1JolS3c4kkifzZMfw==|KqXDJcj+ZHu2MhqDlKwYjwCKXlNV5xRFVQ20CWKkzmA=|10|87efce1e55907ab7f7c5b6ca1a1f95bb; BAIDU_WISE_UID=wapp_1686639223063_47; MCITY=-198%3A131%3A; BD_LAST_QID=13742169835500460478
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: none
Sec-Fetch-User: ?1
- 请求空行
- 请求体
- GET请求数据不放请求体,请求都在连接里面体现
请求报文-POST请求-学习用-非请求百度官网
客户端发送给服务端的报文
解析
- 请求行:请求方式 / HTTP版本号
POST /05_web_tomcat/login_success.html HTTP/1.1
- 请求头
Host: localhost:8080
Connection: keep-alive
-请求体内容的长度
Content-Length: 31
-无缓存
Cache-Control: max-age=0
Origin: http://localhost:8080
-协议的自动升级
Upgrade-Insecure-Requests: 1
-请求体内容类型[服务器根据类型解析请求体参数]
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.75 Safari/537.36
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Referer: http://localhost:8080/05_web_tomcat/login.html
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7
Cookie:JSESSIONID-
- 请求空行
- 请求体:浏览器提交给服务器的数据
username=admin&password=1232131
响应报文
服务端发送给客户端的报文
原始
HTTP/1.1 200 OK
Connection: keep-alive
Content-Encoding: gzip
Content-Security-Policy: frame-ancestors 'self' https://chat.baidu.com http://mirror-chat.baidu.com https://fj-chat.baidu.com https://hba-chat.baidu.com https://hbe-chat.baidu.com https://njjs-chat.baidu.com https://nj-chat.baidu.com https://hna-chat.baidu.com https://hnb-chat.baidu.com http://debug.baidu-int.com;
Content-Type: text/html; charset=utf-8
Date: Wed, 01 Nov 2023 01:50:05 GMT
Isprivate: 1
Server: BWS/1.1
Traceid: 1698803405020669338615241818633959571691
X-Ua-Compatible: IE=Edge,chrome=1
Transfer-Encoding: chunked
解析
- 响应行:响应协议为HTTP1.1,响应状态码为200,表示请求成功;
HTTP/1.1 200 OK
- 响应头
- 连接方式:长连接
Connection: keep-alive
Content-Encoding: gzip
Content-Security-Policy: frame-ancestors 'self' https://chat.baidu.com http://mirror-chat.baidu.com https://fj-chat.baidu.com https://hba-chat.baidu.com https://hbe-chat.baidu.com https://njjs-chat.baidu.com https://nj-chat.baidu.com https://hna-chat.baidu.com https://hnb-chat.baidu.com http://debug.baidu-int.com;
- 响应体数据的类型
Content-Type: text/html; charset=utf-8
- 响应体内容的字节数。作为理解用,本次响应没有该行
Content-Length: 157
- 响应时间
Date: Wed, 01 Nov 2023 01:50:05 GMT
Isprivate: 1
- 服务器的版本信息
Server: BWS/1.1
Traceid: 1698803405020669338615241818633959571691
X-Ua-Compatible: IE=Edge,chrome=1
Transfer-Encoding: chunked
- 空行
- 响应体
- 响应体是HTML文件(很长)
- 下图是HTML文件对应的预览图
响应状态码
响应码对浏览器来说很重要,它告诉浏览器响应的结果
有代表性的响应状态码
状态码 | 内容 |
---|---|
200 | 请求成功,浏览器会把响应体内容(通常是html)显示在浏览器中 |
302 | 重定向,当响应码为302时,表示服务器要求浏览器重新再发一个请求,服务器会发送一个响应头Location指定新请求的URL地址 |
304 | 使用了本地缓存 |
404 | 请求的资源没有找到,说明客户端错误的请求了不存在的资源 |
405 | 请求的方式不允许 |
500 | 请求资源找到了,但服务器内部出现了错误 |
更多的响应状态码
状态码 | 状态码英文描述 | 中文含义 |
---|---|---|
1** | ||
100 | Continue | 继续。客户端应继续其请求 |
101 | Switching Protocols | 切换协议。服务器根据客户端的请求切换协议。只能切换到更高级的协议,例如,切换到HTTP的新版本协议 |
2** | ||
200 | OK | 请求成功。一般用于GET与POST请求 |
201 | Created | 已创建。成功请求并创建了新的资源 |
202 | Accepted | 已接受。已经接受请求,但未处理完成 |
203 | Non-Authoritative Information | 非授权信息。请求成功。但返回的meta信息不在原始的服务器,而是一个副本 |
204 | No Content | 无内容。服务器成功处理,但未返回内容。在未更新网页的情况下,可确保浏览器继续显示当前文档 |
205 | Reset Content | 重置内容。服务器处理成功,用户终端(例如:浏览器)应重置文档视图。可通过此返回码清除浏览器的表单域 |
206 | Partial Content | 部分内容。服务器成功处理了部分GET请求 |
3** | ||
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请求重定向 |
4** | ||
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的请求头信息 |
5** | ||
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协议的版本,无法完成处理 |