• 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状态码

  • 相关阅读:
    买瓜(dfs+剪枝)
    java毕业生设计新型冠状病毒防控咨询网站2020计算机源码+系统+mysql+调试部署+lw
    wpf devexpress Property Grid创建属性定义
    【无标题】
    计算机毕业设计(附源码)python自动出卷考试系统
    Java方法的返回值及注意事项
    XSS 跨站点脚本漏洞详解
    自研、好用、够快、稳定、代码可读性强的ORM
    RabbitMQ学习总结(11)—— RabbitMQ 核心概念与架构
    Rowset 的元数据一直存储在内存中
  • 原文地址:https://blog.csdn.net/weixin_43880061/article/details/126216296