更多精彩内容请关注微信公众号:新猿技术生态圈html
1. 什么是http协议?具体是干什么用的 http又称之为超文本传输协议,主要用来从服务器传输超文本到本地浏览器的传送协议 2. 什么又是超文本? 超文本最大的特征就是能够超连接文本文档or图片等内容(超连接即经过点击进行跳转网页) 'http协议是基于TCP协议来传递数据的,另外咱们如今经常使用的http协议版本号为1.1'
更多精彩内容请关注微信公众号:新猿技术生态圈
更多精彩内容请关注微信公众号:新猿技术生态圈
更多精彩内容请关注微信公众号:新猿技术生态圈python
针对于http1.1版本主要须要说明两点内容----HTTP无链接以及HTTP无状态nginx
# http无链接是什么意思? (1)无链接指的是tcp三次握手后创建的双向连接只能支持一次数据的传输,即便用一次就断开 (2)若是一直处于无链接状态那么用户每次请求就会从新创建tcp的双向链路,此时的访问速度就有优化的空间 '解决办法即须要在服务端开启长连接' 1. 长连接意思为http数据传输后将tcp连接保持在打开的状态,以便将来的http请求继续使用。 2. 长连接即需设置服务器的keepalive(保持连接)选项 '我的感受应该是要改nginx配置文件里的keepalive有效,具体就不晓得改哪一个了' [root@client ~]# vim /proc/sys/net/ipv4/tcp_keepalive_time # 更改里面数值便可 '有益就有弊,简单看下长连接的优势以及缺点' 优: keepalive长连接模式更加高效,避免了连接创建和释放的资源开销 缺: 长时间的tcp连接容易致使系统资源无效占用,浪费系统资源,因此上面的配置根据自身状况来就好
# http无状态又是什么意思? (1) 官方定义: http无状态是指协议对于交互性场景没有记忆能力 (2) 白话解释: 其实就是默认状况下http没有缓存功能,假设此时咱们输入帐户密码,刷新一次又须要从新输入 # http无状态的解决办法是什么? '最主要的目的就是让服务器有记忆能力-----如今咱们较为经常使用的方法为Cookie+Session' 1. Cookie 'cookie的工做方式' (1) cookie实际上是一小段的文本信息,客户端请求服务器,若是服务器须要记录该用户状态,就会在响应请求是使用set-cookie将用户状态信息写入到客户端浏览器文件中去 (2) 当浏览器下次请求访问该网站时会将cookie信息添加到request请求的数据当中来代替用户验证 'cookie的弊端' (1) 因为cookie保存的数据信息是存在于客户端的浏览器目录下,因此此文件会有被篡改的风险,基于此种缘由,出现了一种基于cookie的机制Session. 2. Session (1) Session是另一种记录客户端状态的机制,不一样的是cookie保存在客户端浏览器中,而Session保存在服务器上 (2) 客户端浏览器访问服务器时,服务器把客户端信息以某种形式记录在服务器上。这就是Session '为何说Session基于cookie呢?' # session不只会将客户端信息存储在服务器上,还会有一小部分信息存储在浏览器的cookie中,此时存储在cookie的内容至关于一把用来打开服务器对应信息的钥匙 '再来讲说Seesion的优缺点。。' 优: 解决了纯cookie可能被篡改文件的风险(就算你要改,改的也就是开锁的内容,并不触及到真正的用户信息) 缺: 在集群环境下读取服务器存储的信息会有速度问题(存放到数据库--硬盘速度不够,存放到缓存服务器---内存空间不够....) 3. jwt # 简单粗暴,对cookie所产生的客户端本地文件进行加密便可,使用服务器的私钥进行解密便可 # 据说暂时用的较少 4. 番外 'Session和Cookie的关系' (1) cookie 是一个实际存在的、具体的东西,http 协议中定义在 header 中的字段。 (2) session 是一个抽象概念、开发者为了实现中断和继续等操做,将client和server之间一对一的交互,抽象为“会话”,进而衍生出“会话状态”,也就是 session 的概念。 (3)即session描述的是一种通信会话机制,而cookie只是目前实现这种机制的主流方案里面的一个参与者,它通常是用于保存session ID。
1. 什么是URL,什么又是URI URI---统一资源标志符(在某一规则下能把一个资源独一无二地标识出来) URL---统一资源定位符(一种具体的URI,URL不只用来标识一个资源,并且还指明了如何定位这个资源) # 跟着大佬栗子解释一波URI与URL的区别 # URI: 假设全部的Html文档都有惟一的编号,记做html:xxxx, xxxx是一串数字,即html文档的身份证号,这个能惟一标识一个html文档,那么这个号码就是一个URI # URL: 而URL则是经过描述是哪一个主机上哪一个路径上的文件来惟一肯定一个资源,也就是定位的方式来实现的URI 因此----- 不管是用定位的方式仍是用编号的方式,咱们均可以肯定惟一的一个资源,都是URI的一种实现方式,而URL就是用定位的方式实现的URI # 跟着网上大佬再看一遍 https://www.zhihu.com/question/21950864 2. Request请求的格式 客户端发送一个HTTP请求到服务器的请求消息格式为如下四部分组成: 请求行(request line)----请求头部(header)----空行----请求数据 GET /linhaifeng/p/7278389.html HTTP/1.1 # 请求行--请求类型;须要访问的资源;http版本号 # 如下皆为请求头部信息----get请求没有请求数据的主体 Host: www.cnblogs.com Connection: keep-alive Cache-Control: max-age=0 Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8 Accept-Encoding: gzip, deflate Accept-Language: zh-CN,zh;q=0.9 3. http协议请求的方法 '常常用的只有两个' # get------请求指定的页面信息,并返回实体主题 # post-----向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。post请求可能会致使新资源的创建和/或已有资源的修改 'get和post使用上的区别??' (1) 参数的组织方式不一样 get 提交的数据会放在url以后,以?分割url和传输数据,参数之间以&相连 post 是把提交的数据放在http包的body中,不会在地址栏里显示出来 (2) 传输数据大小限制 get 特定浏览器和服务器会对url进行长度限制,因此get请求会有瓶颈 post 不是经过url传值,理论上数据不受限制,但理论毕竟是理论,尽可能不要过大 (3) 安全性 显而易见的post要比get方法安全性要高一些
请求方法 | 请求含义 |
---|---|
GET | 请求读取一个web页面 |
POST | 附加一个命名资源(如web页面) |
DELETE | 删除web页面 |
CONNECT | 用于代理服务器 |
HEAD | 请求读取一个web页面的头部 |
PUT | 请求存储一个web页面 |
TRACE | 用于测试,要求服务器送回收到的请求 |
OPTION | 查询特定选项 |
# HTTP响应也有四个部分组成,分别是: 状态行--消息报头--空行--响应正文 状态行: 由http版本号,状态码,状态消息组成 消息报头: 用来讲明客户端要使用的一些附加信息 空行:----\r\n 响应正文: 服务器返回给客户端的文本信息 '响应状态码详解' '印象中写自动化测试脚本会常常用到状态码这个概念用来判断网页是否访问成功' 状态代码有三位数字组成,第一个数字定义了响应的类别,共分五种类别: 1xx:指示信息--表示请求已接收,继续处理 2xx:成功--表示请求已被成功接收、理解、接受 3xx:重定向--要完成请求必须进行更进一步的操做 4xx:客户端错误--请求有语法错误或请求没法实现 5xx:服务器端错误--服务器未能实现合法的请求 常见状态码: 200 OK //客户端请求成功 400 Bad Request //客户端请求有语法错误,不能被服务器所理解 401 Unauthorized //请求未经受权,这个状态代码必须和WWW-Authenticate报头域一块儿使用 403 Forbidden //服务器收到请求,可是拒绝提供服务 404 Not Found //请求资源不存在,eg:输入了错误的URL 500 Internal Server Error //服务器发生不可预期的错误 503 Server Unavailable //服务器当前不能处理客户端的请求,一段时间后可能恢复正常
'我是抄的谢谢' HTTP协议定义Web客户端如何从Web服务器请求Web页面,以及服务器如何把Web页面传送给客户端。HTTP协议采用了请求/响应模型。客户端向服务器发送一个请求报文,请求报文包含请求的方法、URL、协议版本、请求头部和请求数据。服务器以一个状态行做为响应,响应的内容包括协议的版本、成功或者错误代码、服务器信息、响应头部和响应数据。 如下是 HTTP 请求/响应的步骤: 一、客户端链接到Web服务器 一个HTTP客户端,一般是浏览器,与Web服务器的HTTP端口(默认为80)创建一个TCP套接字链接。 二、发送HTTP请求 经过TCP套接字,客户端向Web服务器发送一个文本的请求报文,一个请求报文由请求行、请求头部、空行和请求数据4部分组成。 三、服务器接受请求并返回HTTP响应 Web服务器解析请求,定位请求资源。服务器将资源复本写到TCP套接字,由客户端读取。一个响应由状态行、响应头部、空行和响应数据4部分组成。 四、释放链接TCP链接 若connection 模式为close,则服务器主动关闭TCP链接,客户端被动关闭链接,释放TCP链接;若connection 模式为keepalive,则该链接会保持一段时间,在该时间内能够继续接收请求; 五、客户端浏览器解析HTML内容 客户端浏览器首先解析状态行,查看代表请求是否成功的状态代码。而后解析每个响应头,响应头告知如下为若干字节的HTML文档和文档的字符集。客户端浏览器读取响应数据HTML,根据HTML的语法对其进行格式化,并在浏览器窗口中显示。 例如:在浏览器地址栏键入URL,按下回车以后会经历如下流程: 一、浏览器向 DNS 服务器请求解析该 URL 中的域名所对应的 IP 地址; 二、解析出 IP 地址后,根据该 IP 地址和默认端口 80,和服务器创建TCP链接; 三、浏览器发出读取文件(URL 中域名后面部分对应的文件)的HTTP 请求,该请求报文做为 TCP 三次握手的第三个报文的数据发送给服务器; 四、服务器对浏览器请求做出响应,并把对应的 html 文本发送给浏览器; 五、释放 TCP链接; 六、浏览器将该 html 文本并显示内容;
'基本信息-----General' Request URL: https://www.cnblogs.com/ # 请求的url Request Method: GET # 请求的方式 Status Code: 200 OK # 请求返回的状态以及状态码 Remote Address: 121.40.43.188:443 # 请求的远程主机ip与端口 # 下列选项的做用是为了控制请求头中的referrer的内容 # strict...origin表示不容许refferrer信息显示在从https网站到http网站的请求中 Referrer Policy: strict-origin-when-cross-origin '请求头部-----Request Header' authority: www.cnblogs.com # 请求的域名 method: GET # 请求的方式 path: / # 请求的地址和文件,此时访问的是index文件 scheme: https # 请求的协议 # accept为请求的资源类型 accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9 accept-encoding: gzip, deflate, br # 压缩 accept-language: zh-CN,zh;q=0.9 # 字符类型 cache-control: max-age=0 # 缓存的时间 upgrade-insecure-requests: 1 # 升级 user-agent.... # 表示客户端信息 '响应头部-----Response Header' age: 8 # 当代理服务器用本身缓存的实体去响应请求时,用该头部代表该实体从产生到如今通过了多长时间 cache-control: public,max-age=30 # 表示此页面(资源的有效时间)只能缓存30秒 content-encoding: gzip # 压缩的格式 content-type: text/html; charset=utf-8 # 文件类型和字符集 date: Mon, 09 Aug 2021 07:05:38 GMT # 返回数据的时间 strict-transport-security: max-age=2592000; includeSubDomains; preload # 此选项应该是禁止http连接 vary: Accept-Encoding # 告诉代理服务器缓存两种版本的资源:压缩和非压缩 'CDN服务器的经常使用参数' #CDN缓存是否命中 x-cache: MISS TCP_MISS dirn:-2:-2 #缓存版本号 x-powered-by: PHP/7.1.21 #缓存时间 x-swift-cachetime: 0 #保存时间 x-swift-savetime: Sat, 03 Aug 2019 06:30:33 GMT
1. 客户端发起http请求,请求会先到达防火墙 2. 防火墙识别用户身份,正常的请求经过内部交换机经过tcp连接后端的负载均衡,传递用户的http请求 3. 负载均衡收到请求,会根据请求的内容进行下发任务,经过tcp链接后端的web,转发用户的http请求 4. web接收到用户的http请求后,会根据用户请求的内容进行解析,解析分为以下: 静态请求:web直接返回给负载均衡-->防火墙-->用户 动态请求:web向后端的动态程序创建tcp链接,将用户的动态http请求传递至动态程序->由动态程序进行解析 5. 动态程序在解析的过程当中,若是碰到查询数据库请求,则优先与缓存创建tcp链接,并发起数据查询操做 6. 若是缓存没有对应的数据,动态程序再次向数据库创建tcp链接,并发起查询操做 7. 最后数据由 : 数据库->缓存->动态程序->web服务->负载均衡->防火墙->用户
# 1. SOA松耦合架构 面向服务的架构(SOA)是一个组件模型,它将应用程序的不一样功能单元(服务)进行拆分,并经过这些服务之间定义良好的接口和契约联系起来。接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台,操做系统和变成语言。这使得构建在各类各样的系统中的服务能够以一种统一和通用的方式进行交互 '将一个服务拆分红多个小型服务,方便每个小型服务进行迭代更新以及减缓请求压力' '其中一个服务出现问题的话不会影响其余服务的正常运行' '好比将登陆与注册拆分,若是注册服务器挂掉了,不会影响已经注册的用户正常登陆' # 2. websocket协议 (1) websocket是基于TCP的应用层协议,用于在C/S架构的应用中实现双向通讯 (2) 虽然websocket协议在创建链接时会使用http协议,但这并不意味着websocket是基于http实现的 详情请点击----https://www.cnblogs.com/nuccch/p/10947256.html # 3. http的请求头之User-Agent User-Agent中文名为用户代理,他是一个特殊的字符串头,主要用于可以让服务器识别客户端使用的操做系统、浏览器版本等内容 # 4. pv和uv的共同点和区别是什么 PV(访问量): 即Page view---页面浏览量或点击量,用户每次刷新即被计算一次 UV(独立访客): 即Unique Visitor---访问你网站的每个客户端为一个访客,24小时内相同的客户端只被计算一次 '一个UV能够有不少PV,一个PV也只能对应一个IP'
更多精彩内容请关注微信公众号:新猿技术生态圈
更多精彩内容请关注微信公众号:新猿技术生态圈
更多精彩内容请关注微信公众号:新猿技术生态圈web