13.计算机网络---应用层之HTTP协议

传输层的协议我主要学习的是http协议和https协议,https是建立在http协议的基础之上的。

HTTP协议

http也就是超文本传输协议(hyper text transfer protocol),是在网上传输web页面的。http协议一般是在浏览器和web服务器之间使用的,用来传输网页的。

什么是超文本?

包含有超链接(Link)和各种多媒体元素标记(Markup)的文本。这些超文本文件彼此链接,形成网状(Web),因此又被称为网页(Web Page)。这些链接使用URL表示。最常见的超文本格式是超文本标记语言HTML。
几乎所有的浏览器都能够读取http协议,但是不同的浏览器所展示出来的页面可能会有所不同。

什么是URL?

URL即统一资源定位符(Uniform Resource Locator),用来唯一地标识万维网中的某一个文档。URL由协议、主机和端口(默认为80)以及文件名三部分构成。如:
在这里插入图片描述

什么是超文本传输协议HTTP?

是一种按照URL指示,将超文本文档从一台主机(Web服务器)传输到另一台主机(浏览器)的应用层协议,以实现超链接的功能。
http协议是基础tcp协议进行传输的,默认使用的端口是80端口
所有的web服务器: nginx,tomcat,IIS,python web,go web框架,java web框架都能读懂http协议

HTTP的工作原理

也就是在浏览器中输入了www.baidu.com背后发生了什么

更加详细的步骤可以查看我另外一篇博客:08.计算机网络—在浏览器中输入一个网址背后发生了什么

在这里插入图片描述

如果访问不了www.baidu.com可能是什么原因?

1、物理层面 网线,路由器(光猫)是不是使用正常(ping 网关)
2、如果能ping通网关,但是还是访问不了
2.1、中间运营商问题
2.2、DNS本地域名服务器的问题
2.3、百度服务本身的问题

HTTP的连接方式和无状态性

tcp是面向连接的,在三次握手完成后,就会建立连接,连接又分为长连接(持久连接)和短连接(非持久连接)

  • 非持久连接
    即浏览器每请求一个Web文档,就创建一个新的连接,当文档传输完毕后,连接就立刻被释放。事情完成后,就会进行四次挥手。
    > HTTP1.0、HTTP0.9采用此连接方式。
    > 对于请求的Web页中包含多个其他文档对象(如图像、声音、视频等)的链接的情况,由于请求每个链接对应的文档都要创建新连接,效率低下。
  • 持久性连接
    即在一个连接中,可以进行多次文档的请求和响应。服务器在发送完响应后,并不立即释放连接,浏览器可以使用该连接继续请求其他文档,保持一段时间后,再进行四次挥手。连接保持的时间可以由双方进行协商。HTTP1.1和HTTP2.0使用持久性连接

http协议:
0.9–》只支持短连接,不支持长连接
1.1—》支持长连接,传输的数据是文本格式
2.0–》比较新,速度更快,传输的数据的数据格式是二进制,并且支持多路复用(提升效率)
现在使用的比较多的HTTP版本是1.1和2.0

  • 无状态性
    是指同一个客户端(浏览器)第二次访问同一个Web服务器上的页面时,服务器无法知道这个客户曾经访问过,每次请求都是独立的。HTTP的无状态性简化了服务器的设计,使其更容易支持大量并发的HTTP请求。
  • 状态记录
    服务器收集了客户端的数据,记录了它的信息,通过这些信息可以判断你是老用户还是新用户
    session和cookie技术: 可以保留用户的信息
    会员卡: cookie : web服务器让浏览器保存用户的信息–》信息保存到客户端–》放到浏览器的cookie(存放数据的地方)
    人脸识别系统:session :用户的信息保存在服务器端–》数据库–》内存里的一个数据结构

HTTP的请求报文和响应报文

HTTP请求报文的格式(request包)

在这里插入图片描述
首部字段: 就是请求报文的头部封装里需要封装的内容,是可以自己调整的,可增加也是可以减少
抓包查看请求报文中首部字段主要有:
在这里插入图片描述
常见的几个:

  • cookie:浏览器中存放登录数据的
  • Accept- Encoding:客户端能接受的字符编码
  • Accept- Language:客户端能识别的语言
  • Connection:连接方式,可以使keep-alive长连接,也可以是closed
  • Host:域名或者主机名和端口号
  • User- Agent:浏览器信息

HTTP响应报文(response包)

在这里插入图片描述
抓包查看响应报文中首部字段主要有:
在这里插入图片描述
常见的几个:

  • Accept- Ranges:告知客户端服务器是否能处理范围请求,以指定获取服务器端某个部分的资源
  • Age:告知客户端,源服务器在多久前创建了响应。字段值的单位为秒。
  • Connection:连接方式,可以使keep-alive长连接,也可以是closed
  • Content- Encoding:告知客户端服务器对实体的主体部分选用的内容编码方式
  • Content- Type:说明了实体主体内对象的媒体类型
  • Date:发送响应报文的时间
  • Last- Modified:指明资源最终修改的时间
  • Server:服务器的版本型号
    在这里插入图片描述
    注意:F5刷新(或者通过浏览器页面上的刷新按钮刷新)跟F5+Ctrl强制刷新的状态码以及响应报文内容是不一样的。
    Ctrl+F5 强制刷新 不使用浏览器缓存里的内容,重新从服务器获取新的数据 200
    F5 发起新的请求,但是从缓存里拿数据 304
    请求报文里是否有下面的2个首部字段来判断是否曾经访问过(按F5会有下面两个,证明index.html没有更改,直接从缓存拿内容)
    If-Modified-Since:Wed, 03 Aug 2022 12:25:30 GMT
    If-None-Match:“62ea693a-12db”
    在这里插入图片描述

HTTP的方法

方法(Method)是对所请求对象所进行的操作,也就是一些命令。请求报文中的操作有:GET、POST、DELETE、PUT、HEAD等
在这里插入图片描述
其中使用最多的是GET和POST,它们二者的区别有:
1.传参的方式不同
get是通过url来传参的,按照name=value的方式,各个参数之间通过&符号连接。post是通过http请求包的body部分来传参的。
2.安全性不同
因为get通过url来传参,所以它的参数可以在地址栏中看到,这样非常不安全。post是传递的参数不容易被人看到,安全性会更加高
3.传输数据的大小不同
由于URL长度是有限的,所以get传递参数的大小也是有限制的,不能传递很多个参数。但是post是通过request包的body部分传参,大小不受限制。
4.作用不同
get请求通常是用来从服务器上获取资源的,而post是用来向服务器提交数据的。

HTTP状态码

在这里插入图片描述
常见的举例:
301 永久重定向 www.360buy.com—>www.jd.com
302 临时重定向
304 使用缓存里的数据 not modified
400 客户端语法错误
401 用户验证失败,例如要求提交用户名和密码不正确导致认证失败
403 用户禁止访问
404 url找不到,网页不存在
405 方法不被允许
499 client has closed connection --nginx定义状态码 不一定是客户端的问题,有可能是你的服务器处理不过来了[四次握手没完成][客户端点了叉掉页面,但是服务器端还在连接中]
500 Internal Server Error 服务器内部错误,无法完成请求,服务器奔溃了
501 Not Implemented 服务器不支持请求的功能,无法完成请求
502 Bad Gateway 作为网关或者代理工作的服务器尝试执行请求时,从远程服务器接收到了一个无效的响应[负载均衡器运行正常,但是后端服务器都挂了]
503 Service temporarily Unavailable 服务临时不可用,由于超载或系统维护,服务器暂时的无法处理客户端的请求。延时的长度可包含在服务器的Retry-After头信息中[控制某个时间段只能访问多少次,访问次数、并发数][服务器不可用,过载了]
504 Gateway Time-out 响应超时,充当网关或代理的服务器,未及时从远端服务器获取请求[后端服务器太慢或者后端服务器防火墙错误]
505 HTTP Version not supported

关于HTTP状态码更加的详细的内容可以查看:HTTP状态码

猜你喜欢

转载自blog.csdn.net/weixin_43880061/article/details/126216296