ToB企服应用市场:ToB评测及商务社交产业平台

标题: 第二单元 Http 概述 [打印本页]

作者: 大连密封材料    时间: 2024-2-5 04:15
标题: 第二单元 Http 概述
1. C/S 与 B/S

C/S结构系统是什么
Client/Server结构(C/S结构)是大家熟知的客户机和服务器结构。它是软件系统体系结构,通过它可以充分利用两端硬件环境的优势,将任务合理分配到Client端和Server端来实现,降低了系统的通讯开销
 
B/S结构系统是什么
B/S结构(Browser/Server,浏览器/服务器模式),是WEB兴起后的一种网络结构模式,WEB浏览器是客户端最主要的应用软件。这种模式统一了客户端,将系统功能实现的核心部分集中到服务器上,简化了系统的开发、维护和使用。客户机上只要安装一个浏览器,就可以使用B/S结构的系统。其实B/S结构的系统也可以看做是一种特殊的C/S结构。
 
C/S结构的优点
1.能充分发挥客户端的处理能力,可控性强 2.形式多样,可以充分满足客户自身的个性化要求 3.容易保证安全性
 
C/S结构的缺点
1.用户群固定。由于程序需要安装才可使用,因此不适合面向一些不可知的用户 2.维护成本高
 
B/S结构的优点
1.分布性强,客户端零维护。只要有网络、浏览器,就可以随时随地进行使用系统 2.业务扩展简单方便,维护简单方便。只需要在服务器端做相应的修改,客户端就会在下次访问获取最新版本
 
B/S结构的缺点
1.个性化特点明显降低,无法实现具有个性化的功能要求。集成诸如指纹仪、摄像头、调用播放器变得困难 2.在跨浏览器上,BS架构不尽如人意 3.请求/响应模式带来的性能问题 4.安全性上需要花费巨大的设计成本。因为B/S客户端是基于浏览器的,通过简单修改URL参数、篡改POST字段值就会产生安全性方面的问题。
 
常用的B/S应用程序
1.MVC 2.WebForms 3.WebAPI
 
常用的C/S应用程序
1.Windows窗体应用程序 2.WPF应用程序 3.控制台应用程序
 
2. 为什么需要Http协议


 
 
 
 
客户端与服务端之间的通讯是否也需要某种协议?
答:http 协议. http协议是一种未进行加密处理,由服务器传输超文本到本地浏览器传输协议。
特点:
 
 
3. Http的前世今生


 
1960年美国人Ted Nelson构思了一种通过计算机处理文本信息的方法,并称之为超文本(hypertext),这成为了HTTP超文本传输协议标准架构的发展根基。Ted Nelson组织协调万维网协会(World Wide Web Consortium)和互联网工程工作小组(Internet Engineering Task Force )共同合作研究,最终发布了一系列的RFC,其中著名的RFC 2616定义了HTTP 1.1。
 
4. Http 的通信流程

 
一般情况下,一旦Web服务器向浏览器发送了请求数据,它就要关闭TCP连接,然后如果浏览器或者服务器在其头信息加入了这行代码: Connection:keep-alive  TCP连接在发送后将仍然保持打开状态,于是,浏览器可以继续通过相同的连接发送请求。保持连接节省了为每个请求建立新连接所需的时间,还节约了网络带宽。
 
5. URL与URI的区别

什么是URI
URI 统一资源标识符(Uniform Resource Identifiers, URI),用来唯一识别一个资源,可以把它理解为你的身份证号。
作用:Web上可用的资源如HTML文档,图像,视频等都是以URI来定位的。
 
什么是URL
URL 统一资源定位符( Uniform Resource Locator ),可以把它理解为你身份证上地址。 是互联网上用来标识某一处资源的地址。
 
作用:
 
区别
 
6. 消息数据格式

请求消息格式

 
响应数据格式

响应消息:服务器端发送给客户端的数据
响应行
  1. 协议/版本 响应状态码 状态码描述
复制代码
响应状态码:服务器告诉客户端浏览器本次请求和响应的一个状态,状态码都是3位数字。
 
分类
 
响应头
格式:
  1. 头名称: 值
复制代码
常见的响应头:
 
响应体
服务器返回的数据
 
响应字符串格式:
  1. HTTP/1.1 200 OK
  2. Content-Type: text/html;charset=UTF-8
  3. Content-Length: 101
  4. Response对象
  5. Date: Wed, 06 Jun 2018 07:08:42 GMT
  6. <html>
  7. <head>
  8. <title></title>
  9. </head>
  10.     <body>
  11.         hello , response
  12.     </body>
  13. </html>
复制代码
 
 
 
7. HTTP 各版本简介

HTTP 1.0: 规定浏览器与服务器只保持短暂的连接,浏览器的每次请求都需要与服务器建立一个TCP连接,服务器完成请求处理后立即断开TCP连接,服务器不跟踪每个客户也不记录过去的请求 。连接无法复用
HTTP1.1:
HTTP 1.1状态代码及其含义
状态代码有三位数字组成,第一个数字定义了响应的类别,且有五种可能取值:
1xx:指示信息--表示请求已接收,继续处理
2xx:成功--表示请求已被成功接收、理解、接受
3xx:重定向--要完成请求必须进行更进一步的操作
4xx:客户端错误--请求有语法错误或请求无法实现
5xx:服务器端错误--服务器未能实现合法的请求
HTTP2.0:
 
HTTP 3.0 HTTP3.0,也称作HTTP over QUIC。HTTP3.0的核心是QUIC(读音quick)协议,由Google在 2015年提出的SPDY v3演化而来的新协议,传统的HTTP协议是基于传输层TCP的协议,而QUIC是基于传输层UDP上的协议,可以定义成:HTTP3.0基于UDP的安全可靠的HTTP2.0协议。
QUIC 协议针对基于TCP和TLS的HTTP2.0协议解决了下面的问题。
8 . 什么是HTTPS

HTTP协议传输的数据都是未加密的.为了保证这些隐私数据能加密传输,于是网景公司设计了SSL(Secure Sockets Layer)协议用于对HTTP协议传输的数据进行加密,从而就诞生了HTTPS。现在的HTTPS都是用的TLS协议,但是由于SSL出现的时间比较早,并且依旧被现在浏览器所支持,因此SSL依然是HTTPS的代名词。
HTTPS 默认端口号是443.(http协议默认端口号是80)
HTTPS与HTTP的一些区别
 
9. HttpContext上下文

1. 什么是应用程序上下文

我们先举个例子:
小张,我现在有点口渴,帮我去倒杯水来。
虽然只有短短几个字,却清楚的交待了请求的“来龙” 与 “去脉” 。口渴是你的上文,小张把水给你递来了就是你的下文。如果你只是说“小张,我现在有点口渴” 你只交待了上文却没有了下文,或者 你突然来了句 “帮我去倒杯水来” 没有交待上文,只有下文也是不对的,没有上文确实会让人觉得很懵B的。
在此跟各位吐槽一下没有上文的苦水,属实让人很难受(5555..。。。。)。。。。
很多同学找我帮忙找bug的时候,直接给我截了一张报错的图给我,然后报错的图也不全,然后就没有然后了。小伙子真把我们当会算命的神了,看一眼报错就知道哪儿报错。首先你得交待一下你的上文是啥(干嘛用的),就是代码的来龙去脉,最好把相关的代码都截图给我们看,这样我们才能有把握解决掉这个bug.
 
所谓的应用程序的上下文:其实就是交待了当前请求的环境信息,当前上下文中包含了你的请求信息(Request) 与 请求响应(Response) 。 也就是当前请求的来龙去脉
 
2. IHttpContextAccessor 接口

提供对当前 HttpContext的访问权限(如果有)。 应谨慎使用此接口。 它依赖于 AsyncLocal 对异步调用产生负面影响的性能。 它还会创建一个依赖于“环境状态”的依赖项,这使得测试更加困难。
解决办法,将 IHttpContextAccessor 设置为单例。
  1. builder.Services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
  2. // 或者
  3. builder.Services.AddHttpContextAccessor(); // 同样也是单例
复制代码
 
属性
HttpContext获取或设置当前 HttpContext。 如果没有活动HttpContext状态,则返回 null 。  HttpContext 上下文中包含了一些非常重要的对象信息:
 
3. HttpRequest 请求

表示单个 HTTP 请求的传入端。
Body获取或设置请求正文 StreamBodyReader获取请求正文 PipeReaderContentLength获取或设置 Content-Length 标头。ContentType获取或设置 Content-Type 标头。Cookies获取此请求的 Cookie 集合。Form获取或设置请求正文作为Form表单。HasFormContentType检查Form表单类型的 Content-Type 标头。Headers获取请求标头。Host获取或设置 Host 标头。 可以包含端口。HttpContext获取 HttpContext 此请求。IsHttps如果 RequestScheme 为 https,则返回 true。Method获取或设置 HTTP 方法。Path获取或设置 RequestPath 中的请求路径。PathBase获取或设置请求的基本路径。 路径基不应以尾部斜杠结尾。Protocol获取或设置请求协议 (,例如 HTTP/1.1) 。Query获取从 Request.QueryString 分析的查询值集合。QueryString获取或设置用于在 Request.Query 中创建查询集合的原始查询字符串。RouteValues获取此请求的路由值的集合。Scheme获取或设置 HTTP 请求方案。
  1. <form method="get" action="/home/query">
  2.     <label for="username">姓名:</label><input name="username" id="username"/>
  3.     <label for="studentNo">学号:</label><input name="studentno" id="studentNo"/>
  4.     <input type="submit" value="查询"/>
  5. </form>
复制代码
 

 
  1. public IActionResult Query()
  2. {
  3.     var username = HttpContext.Request.Query["username"];
  4.     var studentNo = HttpContext.Request.Query["studentNo"];
  5.     _logger.LogInformation($"姓名:{username}");
  6.     _logger.LogInformation($"学号:{studentNo}");
  7.     // 获取所有的请求头
  8.     foreach (var header in Request.Headers)
  9.     {
  10.         Console.WriteLine($"头名:{header.Key},值:{header.Value}");
  11.     }
  12.     return Content("查询完毕");
  13. }
  14. info: WebApplication2.Controllers.HomeController[0]
  15.       姓名:任我行
  16. info: WebApplication2.Controllers.HomeController[0]
  17.       学号:1310734881
  18.       
  19. 头名:Accept,值:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
  20. 头名:Host,值:localhost:7096
  21. 头名:User-Agent,值:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.134 Safari/537.36 Edg/103.0.1264.77
  22. 头名::method,值:GET
  23. 头名:Accept-Encoding,值:gzip, deflate, br
  24. 头名:Accept-Language,值:zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6
  25. 头名:Cookie,值:.AspNetCore.Session=CfDJ8JezZrvMRBVHqdn1GbTI%2B3bdZuPW2P971ifEekAO%2BfcIEIYo4vpUwD5bHRtEspZHmgyzMYyNAp8u5r8PZaPdwiij2jjPmksoigF8yIwuEuJBGe5zmq1zN0gqgGwSaYmIBw328xN5fzrxbkl92Xo5te4cOHy6GRwKKZMd4YjAbRlk,.AdventureWorks.Session=CfDJ8JezZrvMRBVHqdn1GbTI%2B3ZqwisKw1CqoPT5%2Fbb6V8VD%2BYE%2B7ytbOjCy1%2BB%2BqkuaWL3%2B4GpuM2%2BACge3ahqhKRfp7utYMtYdsICYKzEM7o5qzNQkdv1U5JnLbbvZlJM2MDp6GFkjfeAQFae%2FB29PeYYM3tfhIGu0wNmAtdDZTIkg
  26. 头名:Referer,值:https://localhost:7096/
  27. 头名:Upgrade-Insecure-Requests,值:1
  28. 头名:sec-ch-ua,值:" Not;A Brand";v="99", "Microsoft Edge";v="103", "Chromium";v="103"
  29. 头名:sec-ch-ua-mobile,值:?0
  30. 头名:sec-ch-ua-platform,值:"Windows"
  31. 头名:sec-fetch-site,值:same-origin
  32. 头名:sec-fetch-mode,值:navigate
  33. 头名:sec-fetch-user,值:?1
  34. 头名:sec-fetch-dest,值:document
复制代码
 
 
4. HttpResponse 响应

表示单个 HTTP 请求的传出端。
Body获取或设置响应正文 StreamBodyWriter获取响应正文 PipeWriterContentLength获取或设置 Content-Length 响应标头的值。ContentType获取或设置 Content-Type 响应标头的值。Cookies获取可用于管理此响应的 Cookie 的对象。HasStarted获取一个值,该值指示是否已将响应标头发送到客户端。Headers获取响应标头。HttpContextHttpContext获取此响应。StatusCode获取或设置 HTTP 响应代码。一、Header属性

属性备注例如Access-Control-Allow-Origin该站点可以被哪些网站进行 跨域资源共享Access-Control-Allow-Origin: http://example.com:8080 http://foo.example.com Access-Control-Allow-Origin:*Accept-Ranges服务器是否支持资源范围请求,资源范围请求:指按byte为单位,请求资源的某一段数据例如请求一个文件的200byte—400byte的数据 Accept-Ranges:bytes 表示该资源支持byte形式资源范围请求 Accept-Ranges:none则表示不支持Content-Range如果当前这个响应数据是整个资源的一部分时,是具体的哪一部分(从第几byte到第几byte)。在请求中,客户端可以通过设定”Range”头域来通知服务器其只想请求整个资源中某一段数据,而对应的,当服务器响应这种请求,并发送某一段数据到客户端的时候,必须通过Content-Range头来告诉客户端当前的响应数据是整个资源的第几byte到第几byte。这个在资源的分段下载和续点下载应用中很有用。Content-Range:500-900Allow一个资源允许哪些HTTP方法进行请求Allow: GET, HEAD Allow:*Connection连接方式Connection:keep-alive Connection:closeContent-Encoding服务器对响应数据的编码方式,但这里的编码方式不同于编码字符集(GB2312,UTF-8等),而是(通常)指压缩方式Content-Encoding:gzipContent-Language响应数据的自然语言Content-Language:ZH-CN、 en-USContent-Length响应数据的数据长度,单位是byteContent-Length:1024Content-Disposition当客户端请求的资源是一个可下载的资源(这里的“可下载”是指浏览器会弹出下载框或者下载界面)时,对这个可下载资源的描述(例如下载框中的文件名称)就是来源于该头域。Content-Disposition: attachment; filename=”some_app.exe”Server服务器的名称Server: KestrelContent-Type服务器告诉浏览器它发送的数据属于什么文件类型,也就是响应数据的MIME类型Content-Type: text/html; charset=utf-8,让浏览器把接收到的实体内容以HTML格式解析 Content-Type: text/plain; charset=utf-8,让浏览器把接收到的实体内容以普通文本解析 octet-stream 响应流date响应消息发送的GMT格式日期Date: Tue, 15 Nov 1994 08:12:31 GMT 
 
配套视频链接:什么是Mvc (cctalk.com)

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4