NET品质优化小技巧,Android品质优化

.NET 质量优化小技巧

Redis听到最多的一句话便是Redis的选用难啊?不难,Redis用好简单吗?不易于,有时候觉得这句话说的挺好,但又是让读者挺心里咯噔一下的,还不比不说!

在上1篇中牵线了质量优化的定义、内部存款和储蓄器泄漏和总体性优化措施Android品质优化我们几次三番说说Android品质优化

一、Http协议

Intro

以前做了短信发送速度的升官,在活佛的点拨下,发送短信的速度有了高大的升级换代,学到了有个别升迁.NET 质量的部分小技巧

概述简介

Redis是贰个开源(BSD许可)的内部存款和储蓄器数据结构存款和储蓄,用作数据库,缓存和消息代理。它扶助数据结构,如字符串,哈希,列表,集合,具有限定查询的排序集,位图,一流日志和装有半径查询的地理空间引得。Redis具有内置复制,Lua脚本,LRU逐出,交易和见仁见智级其他磁盘持久性,并经过Redis
Sentinel提供高可用性,并透过Redis Cluster自动分区。
往简单的讲正是:Redis是1个开源的Key-Value存款和储蓄,它装有以下特征:

  • 速度一点也非常快(各个人都清楚)
  • 添加的数据结构,包含String,List,Hash,Set,Sorted Set等
  • 单线程,免了线程切换和锁的脾气消耗(搞不懂,整天商讨的面世编制程序在此间不适用?)
  • 原子操作(作为数据库都有)
  • 可持久化(揽胜极光DB与AOF)
  • 颁发/订阅
    (个人觉得RabbitMQ那地方可比优越,在微服务HavalPC调用那里,作服务的意识)
  • 支持Lua脚本
  • 分布式锁 (集群的显要)
  • 事务 (作为数据库都有)
  • NET品质优化小技巧,Android品质优化。主从复制与高可用(Redis Sentinel)
  • 集群(3.0版本以上)

索引

粗略的说,索引就如书本的目录,目录能够长足找到所在页数,数据库中索引能够协理快速找到数据,而不用全表扫描,合适的目录能够大大升高数据库查询的功能。

.
优点大大加快了数据库检索的速度,包罗对单表查询、连表查询、分组查询、排序查询。日常是一到多个数据级的习性升高,且随着数据数量级增进。.
缺点索引的始建和保证存在消耗,索引会占用物理空间,且随着数据量的充实而扩充。在对数据库实行增加和删除改时须要敬重索引,所以会对增删改的习性存在影响。

A.当某字段数据更新频率较低,查询频率较高,日常有限定查询(>, <, =,
>=, <=)或order by、group
by发生时提出采用索引。并且选开支越大,建索引越有优势,那里选拔度指二个字段中唯一值的数额/总的数量。

B. 常常还要存取多列,且每列都带有重复值可怀想成立复合索引

  • 直白创制索引和直接创设索引直接开立:
    使用sql语句创造,Android中能够在SQLiteOpenHelper的onCreate或是onUpgrade中间接excuSql创立语句,语句如CREATE
    INDEX mycolumn_index ON mytable 直接创造:
    定义主键约束依旧唯一性键约束,能够直接创制索引,主键私下认可为唯一索引。
  • 普通索引和唯1性索引普通索引:CREATE INDEX mycolumn_index ON
    mytable
    唯1性索引:保障在索引列中的全体数据是绝无仅有的,对聚簇索引和非聚簇索引都能够使用,语句为CREATE
    UNIQUE COUSTERED INDEX myclumn_cindex ON mytable
  • 单个索引和复合索引单个索引:索引建立语句中仅包蕴单个字段,如上边的家常索引和唯一性索引创立示范。复合索引:又叫组合索引,在目录建立语句中还要涵盖多个字段,语句如:CREATE
    INDEX name_index ON username(firstname,
    lastname),当中firstname为前导列。
  • 聚簇索引和非聚簇索引(聚集索引,群集索引)聚簇索引:物理索引,与基表的物理顺序相同,数据值的依次总是遵照顺序排列,语句为:CREATE
    CLUSTERED INDEX mycolumn_cindex ON mytable WITH
    ALLOW_DUP_ROW,其中WITH
    ALLOW_DUP_ROW代表同意有重复记录的聚簇索引非聚簇索引:CREATE
    UNCLUSTERED INDEX mycolumn_cindex ON mytable索引暗中认可为非聚簇索引

  • 对此复合索引,把施用最频繁的列做为前导列。倘若查询时前导列不在查询条件中则该复合索引不会被接纳。如create
    unique index PK_GRADE_CLASS on student (grade, class)select *
    from student where class = 贰未使用到索引select * from dept where
    grade = 3使用到了目录
  • 制止对索引列进行测算,对where子句列的其余总计假诺无法被编写翻译优化,都会招致查询时索引失效select *
    from student where tochar=’2′
  • 比较值制止采纳NULL
  • 多表查询时要专注是挑选适当的表做为内表。连接条件要充份思索富含索引的表、行数多的表,内外表的挑选可由公式:外层表中的合作行数
  • 内层表中每叁次搜索的次数分明,乘积最小为顶级方案。实际多表操作在被实际执行前,查询优化器会依照连年条件,列出几组或许的连日方案并从中找出连串开发非常的小的特等方案。
  • 查询列与索引列次序一致
  • 用多表连接代替EXISTS子句
  • 把过滤记录数最多的原则放在最前头
  • 善用运用存款和储蓄进度,它使sql变得特别灵活和急速(Sqlite不支持存储进度::>_<::
    )
  1. 网络协议:客户端与服务端之间的说道

  2. 主流协议:http、socket、ftp、pop叁

  3. http协议

    1)多用与b/s架构

    2)问题

     短连接:每次客户端与服务端交互时,先建立连接,交互完毕后,关闭连接
    
     无状态:服务端只能记得住当次请求状态
    

    3)http:一.0 – 近年来主流版本
    http:壹.一 – 较新本子(向下包容)
    http:2.0 – 最新版本

HttpClient 优化

至于使用 HttpClient ,大致很五人都知晓尽量采用单例以升级 HttpClient
的性能。

由于 HttpClient
在出殡和埋葬请求时索要实行域名解析,使用的时候第贰回一般的话会慢一些,大家在
HttpClient 初叶化达成之后,向目的地址发送贰个 HEAD
请求,那样会把域名解析结果有2个缓存,实际去乞请的时候所需用的域名解析的时间就会回落了,那样就足以升官第2遍实际上发送请求的进程。

HttpClient 的逾期时间设置尽量短以制止超长等待升高响应时间

Redis数据结构

建议直接看Redis官网的数据结构,因为尚未想看2手Redis数据结构,那里大概介绍:

  • String
    那是最简易的Redis类型。尽管只行使这种类型,Redis就如一个可持久化的Memcached服务器。
  • List
    亚洲必赢官网 ,Redis的List是依照双向链表完成的,能够支持反向寻找和遍历。
    常用案例:聊天系统、社交互联网中获得用户最新刊登的帖子、简单的消息队列、音信的分页列表、博客的褒贬系统。
  • Hash
    Hash是3个String类型的田野和value之间的映射表,请见下图,类似于.NET中的Hashtable和Dictionary。主要用来储存对象,可以免止种类化的费用和出现修改决定的题目。
  • Set
    Set也是2个列表,不过它的出色之处在于它是足以自行排重的:当须求仓库储存一个列表数据,而又不愿意出现重复的时候,Set是2个很好的接纳(比如ID的集纳)。并且Set提供了判断有些成员是不是在一个Set集合内的接口,那也是List所未有的。
  • Sorted Set
    Sorted Set和Set的利用处境类似,差距是Sorted
    Set会依照提供的score参数来拓展机动排序。当你必要八个稳步的还要不另行的聚众列表,那么就能够挑选Sorted
    Set数据结构。常用案例:游戏中的排名榜。

事务

应用工作的两大利益是原子提交和更优品质。

原子提交代表同一业务内的全数修改可能都形成恐怕都不做,假设有些修改退步,会活动回滚使得全数修改不见效。

Sqlite暗中认可会为每一个插入、更新操作创立叁个业务,并且在历次插入、更新后及时付给。

如此那般倘使老是插入100回数据实际上是创办工作->执行语句->提交那一个历程被另行执行了玖十六回。如若我们显式的创制工作->执行100条语句->提交会使得那个创立工作和提交这些历程只做叁次,通过那种二回性事务能够使得质量大幅升级。尤其当数据库位于sd卡时,时间上能省掉七个数据级左右。

Sqlte展现应用工作,示例代码如下:

public void insertWithOneTransaction() { SQLiteDatabase db = sqliteOpenHelper.getWritableDatabase(); //开始一个事务 db.beginTransaction(); try { for (int i = 0; i < 100; i++) { db.insert(yourTableName, null, value); } // 设置当前事务成功 db.setTransactionSuccessful(); } catch (Exception e) { e.printStackTrace(); } finally { //结束事务 db.endTransaction(); }}

中间sqliteOpenHelper.getWritableDatabase()表示收获写表权限。

2、http请求协议

同步操作优化

原本的同步操作,能够改为异步处理的接纳异步方法处理,

如查询数据库等操作大多能够改为异步操作,收缩线程阻塞,进一步提升 CPU
的利用率。

八个职责的调度,能够不供给关怀贰个职责调度的话就可以而且运营职责而且不用等待。

Redis重要特色

  • 管道
    Redis服务是1种C/S模型,提供请求-响应式协议的TCP服务,所以当客户端请求发出,服务端处理并赶回结果到客户端,一般是以堵塞格局等待服务端的响应,但那在批量拍卖连接时延迟难点相比较严重,所以Redis为了进步或弥补这些标题,引进了管道技术:能够做到服务端未及时响应的时候,客户端也能够连续发送命令请求,做到客户端和服务端互不干涉影响,服务端并最后回到全体服务端的响应,这在促进原有C/S模型交互的响应速度上有了质的抓好。
    特色:在C/S交互中,客户端可发送任意数请求命令,不需求等服务端响应后再行发送请求;而服务端能够3遍性达成并赶回全体客户端请求结果,也足以分批次回到请求结果,这关键看服务端处理结果的速度而定。
  • 事务
    Redis事务是1组命令的集结。1个作业中的命令要么都履行,要么都不实行。假职务令在运行期间出现谬误,不会自动回滚。
    管道与事务的界别:管道首倘诺互连网上的优化,客户端缓冲一组命令,一遍性发送到服务器端执行,不过并不能够保险命令是在同1个工作里面实践;而事情是原子性的,能够确定保证命令执行的时候不会有出自其余客户端的通令插入到命令种类中。

其他Sqlite的优化

  • 言语的拼凑使用StringBuilder代替String简单的String相加会导致成立四个一时对象消耗品质。StringBuilder的上空预分配品质好得多。假诺您对字符串的长短有大约领悟,如100字符左右,能够直接new
    StringBuilder钦赐初阶大小,减弱空间不够时的再一次分配。
  • 查询时再次回到越来越少的结果集及更加少的字段。查询时只取必要的字段和结果集,更加多的结果集会消耗更加多的时光及内部存款和储蓄器,愈多的字段会造成更加多的内部存款和储蓄器消耗。
  • 少用cursor.getColumnIndex根据品质调优进程中的阅览cursor.getColumnIndex的小时开支跟cursor.getInt相差无几。能够在建表的时候用static变量记住某列的index,直接调用相应index而不是每一回查询。

public static final String HTTP_RESPONSE_TABLE_ID = _ID;public static final String HTTP_RESPONSE_TABLE_RESPONSE = "response";public List<Object> getData() { …… cursor.getString(cursor.getColumnIndex(HTTP_RESPONSE_TABLE_RESPONSE)); ……}//优化为 public static final String HTTP_RESPONSE_TABLE_ID = _ID;public static final String HTTP_RESPONSE_TABLE_RESPONSE = "response";public static final int HTTP_RESPONSE_TABLE_ID_INDEX = 0;public static final int HTTP_RESPONSE_TABLE_URL_INDEX = 1;public List<Object> getData() { …… cursor.getString(HTTP_RESPONSE_TABLE_RESPONSE_INDEX); ……}
  1. 客户端发送三个呼吁,应该有如下八个部分:

    请求行: 请求方法、请求url 状态码、(http协议版本)

    请求底部: 表明服务器要采用的增大音信

    呼吁主体: 提交给服务器的呼吁数据

  2. HTTP客户端请求内容详解

    一)请求行 – 请求的音讯

     请求类型 - get、post、put等
    
     请求地址 
    
        如果是get请求,参数应该拼到url的后面url?key=value,但请求体为空
    
        如果是post请求,url后面不拼参数,参数放在请求体中
    

数据结构优化

在动用较多的 Model 处考虑 Model
中是还是不是有较多的无用字段,假设有可以设想用一个新的轻量级的 Model ,优化
Model 数据结构优化内部存款和储蓄器存款和储蓄。

常见应用难点

  • 缓存穿透处理
    怎么样是缓存穿透?当依照Redis
    key在缓存中询问后,不存在对应Value,就应当会在后端系统如DB中去寻觅,该Key的面世请求量壹旦变大,那么就会对DB造成十分的大的下压力。化解办法有:a.前端风险控制,将恶意穿透情形消除在外;b.对查询结果为空的景色如故举行缓存,但缓存时间会设置得极短,一般是几分钟。
  • 缓存雪崩处理
    什么是缓存雪崩?当缓存服务珍视启或许大批量缓存集中在某贰个时刻段失效,那样在失效的时候,也会给后端系统(比如DB)带来极大压力。消除办法有:后端连接数限制,错误阈值限制,超时处理,缓存失效时间均匀分布,前端永不失效及后端主动创新。
  • 缓存时间长度
    策略定位复杂,需求多维度的乘除。
  • 缓存失效
    按时失效,事件失效,后端主动革新。
  • 缓存Key
    Hash、规则、前缀+Hash,十分情状可人工干预。
  • Lua脚本
    服务端批量处理及业务能力,有条件逻辑的可扩张脚本。使用它的好处有:裁减互联网开发、原子操作、可复用。
  • Limit
    可滑动时间窗口,如应用于Session,Memcached需每一遍传Key和Value。

异步线程

Sqlite是常用于嵌入式开发中的关系型数据库,完全开源。与Web常用的数据库Mysql、Oracle
db、sql
server不一致,Sqlite是一个内嵌式的数据库,数据库服务器就在您的次序中,无需网络安插和保管,数据库服务器端和客户端运转在同样进程内,减少了互联网访问的损耗,简化了数据库管理。可是Sqlite在产出、数据库大小、网络方面存在局限性,并且为表级锁,所以也没供给四线程操作。

Android中数量不多时表查询可能源消耗费时间不多,不会招致AN途达,不过当先十0ms时壹样会让用户感到到延时和卡顿,能够置身线程中运作,但Sqlite在产出方面存在局限,四线程控制较麻烦,那时候可利用单线程池,在职分中实施db操作,通过Handler重回结果和UI线程交互,既不会影响UI线程,同时也能防患出现带来的丰硕。

可采纳Android提供的AsyncQueryHandler或看似如下代码完结:

ExecutorService singleThreadExecutor = Executors.newSingleThreadExecutor();singleThreadExecutor.execute(new Runnable() { @Override public void run() { db.insert("你的表名", null, value); handler.sendEmptyMessage;

贰个网络请求能够大概分为连接服务器 ->
获取数据三个部分。当中连接服务器前还包蕴DNS解析的进度;获取数据后恐怕会对数码实行缓存。

     状态码 - 服务器端的状态

2)请求头 - 反映给服务端的信息

     格式为 key:value,key:value,...

     accept - 表示浏览器可接受的MIME类型
     accept-Encoding - 浏览器能够进行解码的数据编码方式

     accept-language - 表示服务端接受的语言

       zh-cn:简体中文
       zh-tw:繁体中文
       zh - 中文
       us -英文

     connection - 表示当前链接状态

       keep-alive - 保持连接

     host - 请求的服务器网址;

     referer - 表示当前的请求来源

       实现防盗链接

     user-agent 获取到用户浏览器信息

     cache-control -缓存控制

       max-age 设置最大活动周期,设置缓存保存的最大时间的单位为秒,为0代表不缓存

     cookie - 将cookie自动携带到请求头

     content-type:互联网媒体类型;使用post请求必须设置这个属性

         也叫做MIME类型,在Http协议消息头中,使用Content-Type来表示具体请求中的媒体类型信息。

         <form>元素提交时默认的类型
        一般文件上传时默认为application/x-www.form-urlencoded

     Content-Length:请求内容的长度

        对于POST请求来说Content-Length必须出现

3)请求体 - 存放请求参数

如果为post请求,有值,如果为get请求为空

缓存

重复使用的值缓存起来(依照数量要求接纳选用缓存类型,变量缓存或内部存款和储蓄器缓存或redis等分布式缓存),裁减数据库查询次数

Redis不难介绍安装(Centos)

下载地址,提出生产环境使用稳定版
一、 确定保障已经安装有编写翻译工具make

亚洲必赢官网 1

未曾安装make能够接纳:

yum install make -y

二、起初设置
RedisDesktopManage:页面效果:

亚洲必赢官网 2

RedisDesktopManage下载地址:https://redisdesktop.com/
Redis官网:https://redis.io/
Redis安装推荐博客:http://blog.csdn.net/lc1010078424/article/details/78295482
众多别的博客写的是当真垃圾!

连日服务器优化策略

节约 DNS 解析进程,DNS 全名 Domain Name
System,解析意指根据域名获得其对应的 IP 地址。如:
的域名解析结果就是10四.23六.1四七.7陆。

第四回域名解析1般需求几百纳秒,可透过直接向IP而非域名请求,节省掉那1部分时辰,同时能够幸免域名威迫等推动的风险。

当然为了安全和扩展思虑,这几个IP恐怕是3个动态更新的IP列表,并在IP不可用情状下通过域名访问。

合营地点聊起的动态 IP
列表,帮助优先级,每一趟依据地点、互连网项目等接纳最优的服务器IP实行一连。对于服务器端还足以调优服务器的TCP拥挤堵塞窗口大小、重传超时时间、最大传输单元等。

三、http响应协议

Sql 优化

  1. 借使需求同时插入许多数额,尽大概采用 BulkCopy 操作以升级品质

  2. 立异/查询条件优化,使用更确切的尺度,尽大概选取主键查询和换代

  3. 批量更新数据的累累操作能够联合为1次操作的就集合为贰次操作,不可能合为二回操作就二次提交,注意防
    Sql 注入

  4. 复杂 Sql 使用事务时,能在 Sql
    中动用工作就在Sql中选取不然在代码中选取。使用事务时仅在要求敞开事务的地点开启事务,事务甘休就付给业务,不要在业务中混合不要求放在工作中处理的数据库操作

获取数据优化策略

节省连接建立即间,如开启keep-aliveHttp 一.壹私下认可运营了keep-alive。对于Android来说暗中认可情况下HttpU大切诺基LConnection
和HttpClient都敞开了keep-alive。

其余网络请求框架也足以开始展览对应布置

快要五个请求合并为三个进行呼吁,相比普遍的正是网页中的CSS Image
Coca Colas。 假如某些页面内呼吁过多,也足以思量做肯定的呼吁合并。

  • 对于 POST 请求,Body 可以做 Gzip 压缩,如日志。

  • 对请求头实行压缩那一个http 壹.一不补助,spdy及http 二.0支撑。http 一.壹能够透过服务端对前三个请求的请求头实行缓存,后边同样请求头用md5之类的id来表示即可。

缓存常见的图纸、JS、CSS 等静态能源。

  • 裁减一般API数据运用Gzip压缩
  • 切中时弊数量格式如JSON代替 XML,WebP代替其余图片格式
  • 对此分裂的配备差别网络再次回到区别的情节 如分歧分辨率图片大小。
  • 增量更新必要多少更新时,可思考增量更新。如广大的服务端实行bsdiff,客户端进行bspatch。
  • 大文件下载协助断点续传,并缓存Http
    Resonse的ETag标识,下次呼吁时带上,从而明确是否数据变动过,未变更则一贯回到304。

缓存获取到的数量,在早晚的有效性时间内再也伸手能够平素从缓存读取数据。

今昔的网络请求框架都可举办对应的缓存配置

今日周末,就说这样多,祝我们周末Happy

  1. 服务端给客户端响应消息,应该有如下三片段

    响应行:协议版本 状态码 原因短语

    1呼百应尾部:

    响应核心: 重临给客户端的响应数据,恐怕是字符数据,也说不定是字节数据

  2. HTTP服务端响应内容详解

    1)响应行

      状态码
      协议版本
    

    2)响应头

      Allow:服务器支持哪些请求方法
    
         GET、POST
    
      Content-Encoding 文档的编码(Encode)
    
      Cache-Control: 告诉客户端,服务端的缓存配置
    
      Connection - 表示当前的连接状态
    
        keep-alive 表示保持连接
    
      content-length 响应数据的长度(大小)
    
      content-type - 响应数据的mime类型
    
         一般情况下:text/html
    
      Date - 当前响应的日期时间
    
      keep-alive 设置保持连接的超时和最大存活时间
         timeout=5 max=99
    
      server - 服务器端的信息
    

    3)响应体

      服务器返回给客户端的数据主体
    

End

多谢大师,跟着法师展开三次质量优化,确实学到好多,自个儿对1部分定义也是领会的一发深远了。

四、扩展内容

1. 请求类型

     get/post/head/put/delete/options/trace

2. 标准API - 标准的请求方式

      get - 获取数据
      post - 修改数据
      put - 新增数据
      delete - 删除数据

3. 状态码

      1XX - 服务器的信息
      2XX - 表示请求成功
        200:请求成功
        201:成功创建连接
        202:接受请求            
      3XX - 表示重定向
        302:表示重定向
        304:表示服务端资源没有变化,访问缓存
          问题 - 这次请求没有真正低访问服务器端
        305:使用代理
      4XX - 客户端错误
        400:错误的请求
        404:网页找不到
        403:拒绝访问
        405:请求类型不允许
      5XX - 服务端错误
        500:服务端错误
        502:路径错误
        504:请求超时
        505:http版本不支持

4. MIME类型 - 文件类型

     MIME类型是如何定义的

        //定义MIME类型
        <mime-mapping>
            //文件的扩展名
            <extension>jpg</extension>
            //对应的MIME类型
            <mime-type>image/jpeg</mime-type>
         </mime-mapping>

       常见的MIME类型

        html - text/html
        htm  - text/html
        css  - text/css
        js   - text/javascript
        json - application/json
        jpg  - image/jpeg
        text - text/plain

5. 请求参数

     1)get请求类型

         将请求数据 - url?key=value(浏览器地址)

         安全性低

         请求地址的长度是有限制的

         请求数据中包含中文的话,需要转码

     2)post请求类型

         浏览器地址栏url,不包含请求类型

         安全性相对比较高

         对请求数据的长度没有要求

         请求数据中包含中文的话,可以不转码,对中文的处理相对比较好

6. 控制HTTP头部方法

    可以配置每个HTML文件的HTTP-EQUIV标签控制缓存

      <meta http-equiv="Cache-Control" content="no-cache">


    在PHP页面中控制响应头

       header("Content-Type: image/jpeg");

五、缓存工作原理

  1. 客户端能够自行保存已经访问过的文书档案的副本,那么些副本就变成“文档缓存”

  2. 当客户端再度发送针对同三个U奥迪Q3L的央求时,假使地点有“已缓存的副本”,就能够平昔从地点存款和储蓄设备而不是远程服务器提取该文书档案了。

  3. 多少缓存有下列优点

    削减了冗余的多少传输,节省客户端流量成本
    缓解服务器带宽瓶颈的题材,服务器能够节省出越来越多的带宽
    下降了对服务器的资源消耗和周转需求
    降低了由于中远距离而招致的加载延时

  缓存原理:发送请求->是否有缓存->
  有缓存,判断是否过期,如果过期不用,如果不过期跟服务器进行验证,判断是否是最新的数据;如果不是,需要更新缓存,更新缓存后,从缓存中获取。

  没有缓存,从服务器中获取

6、http基本优化

网站质量优化最关键的正是要缩减HTTP请求及每一趟响应中剧情的长度。能够从延续进度中的下列方面加以思考:

一、域名解析

尽可能减少域名解析次数——减少跨站外部资源的引用

二、创造连接

努力减少连接创建次数——使用Keep-Alive避免重复连接

3、发送请求
铆劲裁减请求次数——合理设置Expires时间、财富统壹

四、等待响应
增强服务器端运营速度——提升数据运算及查询速度

5、接收响应
尽量减小响应数据长度——启用压缩

七、安全的HTTP协议

  1. HTTP协议本质上属于“明文字传递输”,或然被窃听和曲解,政府、银行等秘密应用必要须求“安全版本的HTTP”:http协议暗许端口80

  2. HTTPS协议将音信发送给TCP层在此以前,先交付了3个安全层(由SSL或TLS协议落实),安全层负责对音讯举行加密和解密操作。https协议暗中同意端口4四3

网站地图xml地图