当前位置: 首页 > java >正文

2.2 Web和Http

1.Web简介

2.Http简介

3.Http的报文

4.Http的状态码


1.Web

1).Web是由无数个网页通过超链接构成的庞大信息空, 通俗的理解Web理解为我们日常看到的一个个网页的集合2).网页由一些对象组成, 对象可以是html文件, jpeg图像, 声音剪辑文件等3).通过url(通用对象访问符)对每个对象进行引用- 访问协议, 用户名, 口令, 端口等4).url格式

在这里插入图片描述


2.Http

1).Http协议简介Http表示超文本传输协议, 表示为了传输超文本而制定的规则; 超文本表示一份包含超链接的文件(点击超链接从一个地方跳到另一个地方)a.Web的应用层协议b.客户端/服务器模式- 客户: 请求, 接收和显示web对象的浏览器- 服务器: 对请求进行响应, 发送对象的web服务器

2).Http短连接和无状态简介a.短连接(http/1.0默认方式), 一个连接只用于一次请求-响应b.无状态: 协议本身不会为了下一次通信而记住本次通信的任何内容, 每一次http请求都是完全独立的, 自包含的, 服务器不会默认记录任何之前的请求信息c.http/1.1后http是持久性连接(长连接)

在这里插入图片描述

Http的下层协议使用的是tcpa.客户发起一个与服务器的tcp连接(建立套接字), 端口号为80b.服务器接受客户的tcp连接c.在浏览器(http客户端)与web服务器(http服务器server)交换http报文d.tcp连接关闭

3).持久性http和非持久性httpa.区别: 一次事务完成后, 下层的传输层(tcp)连接是否断开b.事务: 客户端发送请求, 服务器处理请求, 客户端接收响应c.Http/1.0使用非持久性连接, Http/1.1默认使用持久性连接d.如下是非持久性http的实例: 

在这里插入图片描述

在这里插入图片描述

持久性Httpa.服务器在发送响应后, 仍保持tcp连接b.在相同客户端和服务器之间的后续请求和响应报文通过相同的连接进行传送c.持久性Http分为两种方式:- 非流水方式的持久Http客户端只能在前一个响应后才能发出新的请求- 流水方式的持久HttpHttp/1.1的默认方式, 客户端无需收到前一个响应可以立即产生一个请求

3.Http的报文

Http报文就是用于在Http协议中发送和接收数据的数据块a.Http协议: 两个人约定好的对话规则(比如: 先说请求行, 再说头部, 空一行, 再说正文)b.Http报文: 按照这个规则写出来的具体的一封信, 里面包含了所有要传递的信息c.Http报文分为两种:- 请求报文(Request Message): 写给服务器的信- 响应报文(Response Message): 服务器回给你的信

1).http请求报文的格式请求报文有三个必有的核心部分组成a.请求行(The Request Line) - 信封上的一句话摘要; 这是信的第一行, 告诉服务器你想干什么, 它又包含三部分:- 方法(Method), 你想做的动作Get表示你想获取点东西, 比如: 获取网页, 图片Post表示你想提交点东西给服务器, 比如: 提交登录信息, 下单数据等- URL(路径)你想要的动作施加在哪个资源上, 比如: /product/12345.html- Http版本用的什么写信格式, 比如: Http/1.1b.请求头(Request Headers) - 信的附加说明从第二行开始, 是一行行的"键值对", 就像在信纸上写一些附加信息, 告诉服务器更多细节- Host: www.taobao.com(你要寄给谁?)- User-Agent: Mozilla/5.0(你用什么浏览器写的这封信)- Accept: text/html(我希望你回信用html格式)- Cookie: user_id = abc123(这是你的身份凭证, 告诉服务器你是谁)c.请求体(Request Body) - 信的主要内容一个空行之后, 才是信的具体内容; 不是所有信都有内容- Get请求通常没有Body, 参数通常在url中- Post请求通常有Body, 里面装着你提交的数据; 比如你登录时写的username=xiaoming&password=123456就在这里

在这里插入图片描述


2).http响应报文的格式服务器回的信结构也非常类似, 同样由三部分核心组成a.状态行(Status Line) - 回信的第一句话告诉你请求的结果如何了, 也包含三部分:- Http版本- 状态码(Status Code), 一个三位数字, 快速告诉你结果- 原因短语: 对状态码的简短文字描述, 比如OK比如: HTTP/1.1 200 OK, 表示你请求的事情办成了b.响应头(Response Headers) - 回信的附加说明同样是键值对, 服务器告诉你一些关于这封回信的说明- Content-Type: text/html(我回信的主要内容是HTML格式的)- Content-Length: 1024(内容有1024字节)- Set-Cookie: new_session=def456(给你一张新的会员卡, 下层记得带上)c.响应体(Response Body) - 回信的主要内容/你要的东西空行之后, 服务器返回的真实数据

在这里插入图片描述


Http协议中最常用的方法Methdoa.Get - 获取(查看)从服务器查询资源, 只读操作, 不应该修改服务器状态; 参数在urlb.Delete - 删除请求服务器删除指定的资源c.Head - 头部(获取元信息)只向服务器获取资源的响应头(Header), 不要响应体(Body); 也就是说, 只要元信息, 不要数据本身d.Post - 用于创建和触发复杂更新比如1: 领取每日奖励, 服务器发生了什么 ?- 创建了一条新的奖励领取记录- 修改了你的金币数量(给你加钱)- 修改了你的任务状态(标记为“已领取”)- 你看: 这个请求创建了新数据, 并顺带修改了其他数据; 但其核心是创建了一个“领取动作”的记录比如2: 触发复杂更新, 服务器发生了什么?- 从你的背包里删除这个道具(修改)- 给你的角色增加经验值(修改)- 可能会触发其他效果(如更新成就进度)- 你看: 这个请求没有“创建”一个显而易见的新东西, 但它触发了一个有多个步骤的“使用”动作, 导致多处数据被修改e.Put - 用于简单地更新比如: 更新个人资料, 服务器发生了什么?用你发过来的完整新数据, 直接替换掉旧的个人资料数据; 你看: 这个请求非常直接, 就是“更新”, 而且是“完整替换”; 它不涉及复杂的业务逻辑

3.Http的响应状态码

Http的响应状态码位于服务器, 客户端的响应报文中首行; 常见的状态码如下:a.200 Ok请求成功, 请求对象包含在响应报文的后续部分b.301 Moved Permanently- 请求的对象被永久转移了, 新的url在响应报文的首部行中指定- 客户端软件自动用新的url去获取对象 c.400 Bad Request一个通用的差错代码, 表示该请求不能被服务器解读d.404 Not Found请求的文档在该服务器上没有找到e.505 Http version not supported
http://www.xdnf.cn/news/20379.html

相关文章:

  • 从0死磕全栈第五天:React 使用zustand实现To-Do List项目
  • MySQL事务日志类型及作用解析
  • Eigen中Eigen::Affine3d和Eigen::Isometry3d详解
  • 得物前端二面面经总结
  • LeetCode_数学
  • 解析、创建Excel文件的开源库OpenXLSX介绍
  • ES06-SpringData集成
  • Valgrind检测内存泄漏入门指南
  • ClickHouse 中的物化列与物化视图
  • SpringBoot01-配置文件
  • 未来教育行业的 Go 服务开发解决方案与实践
  • 【PyTorch实战:Tensor】4、NumPy与PyTorch Tensor指南:深度学习中的数据操作与转换
  • Python基础(①⑧Queue)
  • 机床夹具设计 +选型
  • 持续集成和持续交付 (CI/CD) 工具——Jenkins
  • `objdump`与`addr2line`工具详解
  • 新服务器初始化:Git全局配置与SSH密钥生成
  • 【Canvas与图标】古铜色“HTML”图标
  • eclipse 安装 lombok
  • 【基础-单选】下列哪一项不属于ArkUI组件的公共事件?
  • JVM调优总结
  • ECharts Gallery:Apache官方数据可视化模板库,助你快速制作交互图表并实现深度定制
  • 微服务的编程测评系统22-项目部署结束
  • 基于Echarts+HTML5可视化数据大屏展示-图书馆大屏看板
  • 软考 系统架构设计师系列知识点之杂项集萃(142)
  • JVM中如何调优新生代和老生代?
  • 基于LSTM深度学习的网络流量测量算法matlab仿真
  • C++ 内存模型:用生活中的例子理解并发编程
  • linux C 语言开发 (三) 建立云服务器
  • C++ 小游戏:拍桌子