• [问题求助] devcloud访问不了,报http 500错误
  • [话题讨论] 【活动已下线】11.11上云嘉年华推广CPS冲刺奖励,最高返利34%叠加P40 Pro手机
    活动时间:11.01——11.30奖励介绍*请您先加入推广成为云推官,如果已经加入,则可以开启推广拿好礼,奖品数量有限,先到先得,按照推荐合计金额排序领奖,如对应档位奖品领完,则顺延领取下一奖励。活动说明:1、请添加华为云官方企业微信报名活动2、仅限在活动期限内,有效推荐客户≥3个且每个客户产生消费≥1000元,方可满足领奖条件3、订单需为新购订单,且单客户实际消费金额需大于100元。4、推广下单的产品需在可参加返利产品的列表中。查看可参与返利产品明细需要注意:1、额外奖励活动的推广业绩核算与CPS奖励推广计划活动核算规则一致,以最终实际结算为准2、礼品预计在活动结束后20天(预计12月)发放此奖励,随现金一同发放3、全球SIM联接服务、AppCube (应用魔方)产品的推广不参与本活动额外奖励核算4、 高额订单专项奖励计划不参与本次活动额外奖励核算,如有需要,请移步查看。 常见高效推广手段:借助社群推广:相关群聊(站长群、技术分享交流群等):可以在QQ群搜索相关关键词,寻找目标客户群。也可以论坛网站、博客社区、新媒体、电商平台等各个渠道推广。 内容营销推广:分享发软文推广,让潜在用户享受到实惠,如信息获取的便利,技术知识的获取。可以发布华为云最新活动的产品优惠,相关上云的技术攻略等文章,与潜在客户建立关联进行推广。技术服务推广:适用于有一定云计算技术的推广者,可以给客户提供一定技术指导或服务,来推广转化。自建网站:学习云计算等IT知识,如懂软件编写与开发,使用华为云的主机建站或有个人网站(博客),可以嵌入广告或持续写文章发软文; 相关文档:-----华为云奖励推广计划活动规则-----推广指南——三步获得华为云高额返利-----华为云奖励推广计划经验分享 小白也能月入过万 如有更多疑问,扫描下方二维码添加奖励推广计划活动负责人企业微信进行咨询
  • [技术干货] PHP RESTful
    REST(英文:Representational State Transfer,简称REST) ,指的是一组架构约束条件和原则。符合REST设计风格的Web API称为RESTful API。它从以下三个方面资源进行定义:直观简短的资源地址:URI,比如:http://example.com/resources/。传输的资源:Web服务接受与返回的互联网媒体类型,比如:JSON,XML,YAM等。对资源的操作:Web服务在该资源上所支持的一系列请求方法(比如:POST,GET,PUT或DELETE)。本教程我们将使用 PHP(不用框架) 来创建一个 RESTful web service,在文章末尾你可以下载本章节使用到的代码。通过本教程你将学习到以下内容:创建一个 RESTful Webservice。使用原生 PHP, 不依赖任何框架。URI 模式需要遵循 REST 规则。RESTful service 接受与返回的格式可以是 JSON, XML等。根据不同情况响应对应的 HTTP 状态码。演示请求头的使用。使用 REST 客户端来测试 RESTful web service。RESTful Webservice 实例以下代码是 RESTful 服务类 Site.php:实例<?php /* * 教程 RESTful 演示实例 * RESTful 服务类 */ Class Site { private $sites = array( 1 => 'TaoBao', 2 => 'Google', 3 => 'Runoob', 4 => 'Baidu', 5 => 'Weibo', 6 => 'Sina' ); public function getAllSite(){ return $this->sites; } public function getSite($id){ $site = array($id => ($this->sites[$id]) ? $this->sites[$id] : $this->sites[1]); return $site; } } ?>RESTful Services URI 映射RESTful Services URI 应该设置为一个直观简短的资源地址。Apache 服务器的 .htaccess 应设置好对应的 Rewrite 规则。本实例我们将使用两个 URI 规则:1、获取所有站点列表:http://localhost/restexample/site/list/2、使用 id 获取指定的站点,以下 URI 为获取 id 为 3 的站点:http://localhost/restexample/site/list/3/项目的 .htaccess 文件配置规则如下所示:# 开启 rewrite 功能Options +FollowSymlinksRewriteEngine on# 重写规则RewriteRule ^site/list/$   RestController.php?view=all [nc,qsa]RewriteRule ^site/list/([0-9]+)/$   RestController.php?view=single&id=$1 [nc,qsa]RESTful Web Service 控制器在 .htaccess 文件中,我们通过设置参数 'view' 来获取 RestController.php 文件中对应的请求,通过获取 'view' 不同的参数来分发到不同的方法上。RestController.php 文件代码如下:实例<?php require_once("SiteRestHandler.php"); $view = ""; if(isset($_GET["view"])) $view = $_GET["view"]; /* * RESTful service 控制器 * URL 映射 */ switch($view){ case "all": // 处理 REST Url /site/list/ $siteRestHandler = new SiteRestHandler(); $siteRestHandler->getAllSites(); break; case "single": // 处理 REST Url /site/show/<id>/ $siteRestHandler = new SiteRestHandler(); $siteRestHandler->getSite($_GET["id"]); break; case "" : //404 - not found; break; } ?>简单的 RESTful 基础类以下提供了 RESTful 的一个基类,用于处理响应请求的 HTTP 状态码,SimpleRest.php 文件代码如下:实例<?php /* * 一个简单的 RESTful web services 基类 * 我们可以基于这个类来扩展需求 */ class SimpleRest { private $httpVersion = "HTTP/1.1"; public function setHttpHeaders($contentType, $statusCode){ $statusMessage = $this -> getHttpStatusMessage($statusCode); header($this->httpVersion. " ". $statusCode ." ". $statusMessage); header("Content-Type:". $contentType); } public function getHttpStatusMessage($statusCode){ $httpStatus = array( 100 => 'Continue', 101 => 'Switching Protocols', 200 => 'OK', 201 => 'Created', 202 => 'Accepted', 203 => 'Non-Authoritative Information', 204 => 'No Content', 205 => 'Reset Content', 206 => 'Partial Content', 300 => 'Multiple Choices', 301 => 'Moved Permanently', 302 => 'Found', 303 => 'See Other', 304 => 'Not Modified', 305 => 'Use Proxy', 306 => '(Unused)', 307 => 'Temporary Redirect', 400 => 'Bad Request', 401 => 'Unauthorized', 402 => 'Payment Required', 403 => 'Forbidden', 404 => 'Not Found', 405 => 'Method Not Allowed', 406 => 'Not Acceptable', 407 => 'Proxy Authentication Required', 408 => 'Request Timeout', 409 => 'Conflict', 410 => 'Gone', 411 => 'Length Required', 412 => 'Precondition Failed', 413 => 'Request Entity Too Large', 414 => 'Request-URI Too Long', 415 => 'Unsupported Media Type', 416 => 'Requested Range Not Satisfiable', 417 => 'Expectation Failed', 500 => 'Internal Server Error', 501 => 'Not Implemented', 502 => 'Bad Gateway', 503 => 'Service Unavailable', 504 => 'Gateway Timeout', 505 => 'HTTP Version Not Supported'); return ($httpStatus[$statusCode]) ? $httpStatus[$statusCode] : $status[500]; } } ?>RESTful Web Service 处理类以下是一个 RESTful Web Service 处理类 SiteRestHandler.php,继承了上面我们提供的 RESTful 基类,类中通过判断请求的参数来决定返回的 HTTP 状态码及数据格式,实例中我们提供了三种数据格式: "application/json" 、 "application/xml" 或 "text/html":SiteRestHandler.php 文件代码如下:实例<?php require_once("SimpleRest.php"); require_once("Site.php"); class SiteRestHandler extends SimpleRest { function getAllSites() { $site = new Site(); $rawData = $site->getAllSite(); if(empty($rawData)) { $statusCode = 404; $rawData = array('error' => 'No sites found!'); } else { $statusCode = 200; } $requestContentType = $_SERVER['HTTP_ACCEPT']; $this ->setHttpHeaders($requestContentType, $statusCode); if(strpos($requestContentType,'application/json') !== false){ $response = $this->encodeJson($rawData); echo $response; } else if(strpos($requestContentType,'text/html') !== false){ $response = $this->encodeHtml($rawData); echo $response; } else if(strpos($requestContentType,'application/xml') !== false){ $response = $this->encodeXml($rawData); echo $response; } } public function encodeHtml($responseData) { $htmlResponse = "<table border='1'>"; foreach($responseData as $key=>$value) { $htmlResponse .= "<tr><td>". $key. "</td><td>". $value. "</td></tr>"; } $htmlResponse .= "</table>"; return $htmlResponse; } public function encodeJson($responseData) { $jsonResponse = json_encode($responseData); return $jsonResponse; } public function encodeXml($responseData) { // 创建 SimpleXMLElement 对象 $xml = new SimpleXMLElement('<?xml version="1.0"?><site></site>'); foreach($responseData as $key=>$value) { $xml->addChild($key, $value); } return $xml->asXML(); } public function getSite($id) { $site = new Site(); $rawData = $site->getSite($id); if(empty($rawData)) { $statusCode = 404; $rawData = array('error' => 'No sites found!'); } else { $statusCode = 200; } $requestContentType = $_SERVER['HTTP_ACCEPT']; $this ->setHttpHeaders($requestContentType, $statusCode); if(strpos($requestContentType,'application/json') !== false){ $response = $this->encodeJson($rawData); echo $response; } else if(strpos($requestContentType,'text/html') !== false){ $response = $this->encodeHtml($rawData); echo $response; } else if(strpos($requestContentType,'application/xml') !== false){ $response = $this->encodeXml($rawData); echo $response; } } } ?>
  • [安装] 1.3.0windows cpu版pip安装出现HTTP error 404报错
    【功能模块】安装过程中保证了网络畅通【操作步骤&问题现象】1、安装出现报错2、【截图信息】【日志信息】(可选,上传日志内容或者附件)
  • [基础组件] 【FI集群】【Apache http server】apache官方发布HTTP Server安全更新,如何对升级apache组
    【功能模块】FI集群依赖Apache http server2.4.39FI版本:6.5.1风险说明:xEngine产品团队监测到apache官方发布HTTP Server安全更新,修复了堆溢出漏洞(CVE-2021-26691/CVSS:9.8):由源服务器发送的特制 SessionHeader 可能会导致堆溢出。拒绝服务漏洞(CVE-2021-26690/ CVSS:7.5):由mod_session处理的巧尽心思构建的Cookie标头可能会导致NULL指针取消引用和崩溃,从而导致可能的拒绝服务。目前暂未检测到业界有曝出该漏洞利用代码POC。风险规避措施:将升级到Apache http server2.4.39升级到2.4.48,有没有大神指导下如何升级
  • [问题求助] 【devcloud】【代码仓库功能】登录后显示HTTP STATUS: 403
    【功能模块】代码仓库【操作步骤&问题现象】1、代码仓库登录以后就显示4032、【截图信息】【日志信息】(可选,上传日志内容或者附件)
  • [新手课堂] http协议的状态码
    500 Internal Server Error(内部服务器错误)501 Not Implemented(未实现)客户端发起的请求超出服务器的能力范围(比如,使用了服务器不支持的请求方法)时,使用此状态码)。 一般的Web服务器只支持GET和POST方法。实例: 使用Fiddler Composer 给www.qq.com, 发送一个OPTIONS 方法的Request. 服务器就能返回501了。502 Bad Gateway(网关故障)代理使用的服务器遇到了上游的无效响应。Fiddler本身就是代理服务器。 当我们访问www.facebook.com,这网站被我们天朝屏蔽了。 所以我们可以得到502
  • [技术干货] PHP 表单
    PHP 表单处理有一点很重要的事情值得注意,当处理 HTML 表单时,PHP 能把来自 HTML 页面中的表单元素自动变成可供 PHP 脚本使用。实例下面的实例包含了一个 HTML 表单,带有两个输入框和一个提交按钮。form.html 文件代码:<html><head><meta charset="utf-8"><title>huaweiyun(huaweiyun.com)</title></head><body> <form action="welcome.php" method="post">名字: <input type="text" name="fname">年龄: <input type="text" name="age"><input type="submit" value="提交"></form> </body></html>当用户填写完上面的表单并点击提交按钮时,表单的数据会被送往名为 "welcome.php" 的 PHP 文件:welcome.php 文件代码:欢迎<?php echo $_POST["fname"]; ?>!<br>你的年龄是 <?php echo $_POST["age"]; ?>  岁。通过浏览器访问演示如下:我们将在下一章中讲解 PHP 中的 $_GET 和 $_POST 变量。PHP 获取下拉菜单的数据PHP 下拉菜单单选以下实例我们设置了下拉菜单三个选项,表单使用 GET 方式获取数据,action 属性值为空表示提交到当前脚本,我们可以通过 select 的 name 属性获取下拉菜单的值:php_form_select.php 文件代码:<?php$q = isset($_GET['q'])? htmlspecialchars($_GET['q']) : '';if($q) {        if($q =='RUNOOB') {                echo '华为云<br>http://www.huaweiyun.com';        } else if($q =='GOOGLE') {                echo 'Google 搜索<br>http://www.google.com';        } else if($q =='TAOBAO') {                echo '淘宝<br>http://www.taobao.com';        }} else {?><form action="" method="get">     <select name="q">    <option value="">选择一个站点:</option>    <option value="RUNOOB">Runoob</option>    <option value="GOOGLE">Google</option>    <option value="TAOBAO">Taobao</option>    </select>    <input type="submit" value="提交">    </form><?php}?>PHP 下拉菜单多选如果下拉菜单是多选的( multiple="multiple"),我们可以通过将设置 select name="q[]" 以数组的方式获取,以下使用 POST 方式提交,代码如下所示:php_form_select_mul.php 文件代码:<?php$q = isset($_POST['q'])? $_POST['q'] : '';if(is_array($q)) {    $sites = array(            'RUNOOB' => '华为云: http://www.华为云.com',            'GOOGLE' => 'Google 搜索: http://www.google.com',            'TAOBAO' => '淘宝: http://www.taobao.com',    );    foreach($q as $val) {        // PHP_EOL 为常量,用于换行        echo $sites[$val] . PHP_EOL;    }      } else {?><form action="" method="post">     <select multiple="multiple" name="q[]">    <option value="">选择一个站点:</option>    <option value="RUNOOB">Runoob</option>    <option value="GOOGLE">Google</option>    <option value="TAOBAO">Taobao</option>    </select>    <input type="submit" value="提交">    </form><?php}?>单选按钮表单PHP 单选按钮表单中 name 属性的值是一致的,value 值是不同的,代码如下所示:php_form_radio.php 文件代码:<?php$q = isset($_GET['q'])? htmlspecialchars($_GET['q']) : '';if($q) {        if($q =='RUNOOB') {                echo '华为云<br>http://www.huaweiyun.com';        } else if($q =='GOOGLE') {                echo 'Google 搜索<br>http://www.google.com';        } else if($q =='TAOBAO') {                echo '淘宝<br>http://www.taobao.com';        }} else {?><form action="" method="get">     <input type="radio" name="q" value="RUNOOB" />Runoob    <input type="radio" name="q" value="GOOGLE" />Google    <input type="radio" name="q" value="TAOBAO" />Taobao    <input type="submit" value="提交"></form><?php}?>checkbox 复选框PHP checkbox 复选框可以选择多个值:php_form_select_checkbox.php 文件代码:<?php$q = isset($_POST['q'])? $_POST['q'] : '';if(is_array($q)) {    $sites = array(            'RUNOOB' => 'huawieyun: http://www.huaweiyun.com',            'GOOGLE' => 'Google 搜索: http://www.google.com',            'TAOBAO' => '淘宝: http://www.taobao.com',    );    foreach($q as $val) {        // PHP_EOL 为常量,用于换行        echo $sites[$val] . PHP_EOL;    }      } else {?><form action="" method="post">     <input type="checkbox" name="q[]" value="RUNOOB"> Runoob<br>     <input type="checkbox" name="q[]" value="GOOGLE"> Google<br>     <input type="checkbox" name="q[]" value="TAOBAO"> Taobao<br>    <input type="submit" value="提交"></form><?php}?>
  • [技术干货] Yang模型简介
    概述:现有的SNMP模型的MIB由于是平铺的表、不能区分配置和状态,XML模型的Schema是标签语言,对人不直观;在这种情况下,YANG语言应运而生,本期我们从YANG模型的定义、YANG文件与XML之间的关系、YANG模型的语法结构、标准YANG的开发步骤这4个方面来简单聊聊YANG模型。  YANG模型的定义  YANG是一种数据建模语言,一种非标签语言,在YANG模型之前,建模语言一直存在,因此YANG只能定义为Yet Another Next Generation,即称为另一代的新模型。YANG有标准语法定义,基于RFC6020标准,最早由Tail-F提出,2016年IETF发布1.1版本。  YANG文件与XML之间的关系  YANG文件就类似模板,填上数据,就可以生成一致的XML,设备使用YANG文件,校验XML、解析出数据。  YANG模型的语法结构  YANG模型是一种树形结构,是由无数的叶子、列表、叶列表、容器组成的描述整个设备的一棵树。下面介绍YANG模型的四种主要类型的数据节点,包括叶节点(leaf)、列表节点(list)、叶列表节点(leaf-list)和容器节点(container): 基础数据类型 在定义叶节点和叶列表节点时,须指定值类型。YANG原生支持的基础数据类型有binary、bits、boolean、decimal64、empty、enumeration、instance-identifier、int8/16/32/64、leafref、string、uint8/16/32/64、union。 叶(leaf)叶子包含简单的数据,如整数和字符串。它只有一个特定类型的值并且没有子节点。定义了一个名为host-name的leaf。type表示host-name的值是string类型的。description是对host-name的描述。 列表(list)列表为一系列数据节点的集合,由key标识,并由unique定义哪些数据节点需保持唯一。子节点可以是容器、叶节点、叶列表。定义了一个名为user的list。这个list包含了三个leaf,分别为name、first-name和full-name。其中name为key,即name是唯一值,其他值(first-name和full-name)可以相同。 叶列表(leaf-list)叶列表定义了特定类型的值序列。它是只有一个叶子的列表,只能创建和删除。作用相当于只有一个节点的表。定义了一个名为domain-search的leaf-list。domain-search可以赋值为多个不同的值,但是值的类型都是string。 容器(container)容器节点用于在子树中组织相关的节点。容器只有子节点而没有具体值。容器可以包含任何数量的任何类型(包括叶节点,列表节点,叶列表节点和容器)的子节点。定义了一个名为system的container。且system中包含一个名为login的container。login中还包含一个名为message的leaf。除了以上四种主要类型的数据节点外,组(grouping)、分支(choice)、派生类型(typedef)也是YANG模型其中一部分的相关功能定义语句。我们接着往下看: 组(grouping)如果一组节点可以在不同的模块或节点中重复使用,可以将这一组节点定义为可重用节点组,然后在需要引用的模块或节点中使用uses关键字进行引用。定义了一个grouping endpoint的A模块,它包含两个名为ip和port的leaf。B模块是一个名为http-server的container,它包含一个名为name的leaf,以及引用了一个grouping endpoint。当<http-server>实例化的时候,需要对name以及endpoint中的ip和port进行赋值。 分支(choice)choice定义了一系列替代选择,同一时间只能有一项存在。一个choice节点包含许多分支,分支用case定义声明。有点像C语言中的case语句。一个名为food的container,包含一个choice snack。choice snack有2个case,case1为sports-arena,其包含两个子节点leaf pretzel和leaf beer。case2为late-night,只包含一个子节点leaf chocolate。 派生类型(typedef)除此之外,还可以使用typedef语句从基本类型定义派生新类型。基本类型可以是基础数据类型也可以是派生类型,允许一个层次化的派生类型。派生类型可以作为参数的类型声明。通过typedef定义派生类型percent——取值范围为0到100的无符号整数。随后,定义了一个名为completed的leaf,其类型为上面定义的派生类型percent。  标准YANG的开发步骤  总体来说,标准yang开发整个过程如下: 标准yang--->需要映射的主机复杂类-->主机映射yin文件---->devation文件--->app脚本 (1)首先要拿到标准yang文件,可以直接去网上下载,根据yang文件的节点建模块的主机复杂类,和schema的复杂类建模一致。(2)参考标准YANG开发指南修改yang文件,该yang文件只是临时文件,为了转yin文件。(3)使用pyang将yang文件转为yin文件,可直接使用以前私有yang转换工具xsd2yang,转换过程中出现报错可以不用理会,不影响yin文件的生成,yin文件生成后需要做一些小处理,yin文件里只转出了类和字段的id,未生成类和字段名,需要自己手动添加上去。yin文件归档在和主机schema文件一样的目录即可。(4)生成devation.yang文件和devation.yin文件,归档于多产品目录下(5)完成app lua脚本编写,和shcema app脚本类似。(6)标准yang的调试手段和私有yang一致,使用MG-SOFT NetConf Browser调试验证。  智能云网  智能云网社区是华为专为开发者打造的“学习、开发、验证、交流”一站式支持与服务平台,该平台涵盖多领域知识。目前承载了云园区网络,云广域网络,数通网络开放可编程,超融合数据中心网络,数通网络设备开发社区共五个场景。为了响应广大开发者需求,还提供了开发者交流、API 体验中心、多媒体课件、SDK工具包、开发者工具以及远程实验室共六大工具,让开发者轻松开发。数通网络开放可编程社区里的数通网络开放可编程系统以YANG模型驱动力为基础,提供端到端的开发可编程能力;设备驱动可编程、网络业务可编程、开发设备和业务北向接口,并且提供了安全可靠的保障机制。欢迎各位前来体验。欢迎大家来智能云网社区进行体验学习:《戳我戳我》*注:部分文档来源于网络
  • [交流吐槽] 【如鱼得水】加载http图片会自动转化为https
    你好,接口返回的图片是http的,但是请求图片的时候,会自动变成https,转成https之后无法访问成功
  • [技术干货] AICC软件接口网关http修改为https和去掉token认证方法
    CMS:Rest接口鉴权开关是否启用(控制WebRouter转发的REST请求鉴权,true表示启用,false表示未启用,默认为true)/home/cmsapp/webapps/cmsapp/WEB-INF/classes/config/servicecloud.base.propertiesauth.token.enabledCCUCS:鉴权模式开关可以在CCUCS接口服务器上的配置文件(was/apache-tomcat/webapps/ccucs/WEB-INF/auth/auth.xml)中进行配置,修改配置后重启CCUCS程序生效。(开启token鉴权模式,还需要在WEB配置台中开启CCUCS鉴权开关。)CCgateway:/home/elpis/tomcat/webapps/agentgateway/WEB-INF/config/basic.properties静态鉴权(AUTHMODE = 1)签入接口返回的Guid;动态鉴权(AUTHMODE = 2)轮询事件接口返回的GuidCMS和CCgateway的http放开可以参考帖子https://bbs.huaweicloud.com/forum/thread-153829-1-1.htmlCCUCS的http在V300R008C23版本不建议这么放开HTTP
  • [技术干货] prometheus标签管理
    Prometheus中的标签管理:1. 标签的作用Prometheus中存储的数据为时间序列,是由Metric的名字和一系列的标签(键值对)唯一标识的,不同的标签代表不同的时间序列,即通过指定标签查询指定数据。标签有点像操纵数据对象的handle,方便后面的数据处理和展示。2. Metadata标签Prometheus系统自带的标签,包含一些默认的Metadata标签信息。可以通过Prometheus UI的Targets页面中查看这些实例的Metadata标签的内容:• __address__:当前Target实例的访问地址<host>:<port>• __scheme__:采集目标服务访问地址的HTTP Scheme,HTTP或者HTTPS• __metrics_path__:采集目标服务访问地址的访问路径上面这些标签将会告诉Prometheus如何从该Target实例中获取监控数据。除了这些默认的标签以外,我们还可以为Target添加自定义的标签。3. 自定义标签在config文件中自定义标签,内容为:标签名:标签4. 重新标记标签重新标记目的:为了更好的标识监控指标。在两个阶段可以重新标记:• relabel_configs :在采集之前• metric_relabel_configs:在存储之前准备抓取指标数据时,可以使用relabel_configs添加一些标签、也可以只采集特定目标或过滤目标。已经抓取到指标数据时,可以使用metric_relabel_configs做最后的重新标记和过滤。重新标记标签一般用途:• 动态生成新标签• 过滤采集的Target• 删除不需要或者敏感标签• 添加新标签
  • [交流分享] 计算机网络
    资源缓存的位置浏览器的缓存位置分为:memory cache(内存) 和 disk cache(磁盘)区别:memory cache    disk cache相同点    只能存储一些派生类资源文件    只能存储一些派生类资源文件不同点    退出进程时数据会被清除    退出进程时数据不会被清除存储资源    一般脚本、字体、图片会存在内存当中    一般非脚本会存在磁盘当中,如css等三级缓存原理先去内存看,如果有,直接加载如果内存没有,择取硬盘获取,如果有直接加载如果硬盘也没有,那么就进行网络请求加载到的资源缓存到硬盘和内存比如:访问图片-> 200 -> 退出浏览器再进来-> 200(from disk cache) -> 刷新 -> 200(from memory cache)浏览器缓存的分类强缓存协商缓存浏览器向服务器请求资源时,首先判断是否命中强缓存,再判断是否命中协商缓存强缓存浏览器在加载资源是,会现根据本地缓存资源的header中的信息判断是否命中强缓存,如果命中则直接使用浏览器缓存中的资源。这里 header 中的信息指的是 expires 和 cache-control。Expires该字段是 http1.0 时的规范,它的值为一个绝对时间的 GMT 格式的时间字符串,比如 Expires:Mon,18 Oct 2066 23:59:59 GMT。这个时间代表着这个资源的失效时间,在此时间之前,即命中缓存。这种方式有一个明显的缺点,由于失效时间是一个绝对时间,所以当服务器与客户端时间偏差较大时,就会导致缓存混乱。Cache-ControlCache-Control 是 http1.1 时出现的 header 信息,主要是利用该字段的 max-age 值来进行判断,它是一个相对时间,例如 Cache-Control:max-age=3600,代表着资源的有效期是 3600 秒。cache-control 除了该字段外,还有下面几个比较常用的设置值:no-cache:需要进行协商缓存,发送请求到服务器确认是否使用缓存。no-store:禁止使用缓存,每一次都要重新请求数据。public:可以被所有的用户缓存,包括终端用户和 CDN 等中间代理服务器。private:只能被终端用户的浏览器缓存,不允许 CDN 等中继缓存服务器对其缓存。Cache-Control 与 Expires 可以在服务端配置同时启用,同时启用的时候 Cache-Control 优先级高。协商缓存当强缓存没有命中的时候,浏览器会发送一个请求到服务器,服务器根据 header 中的部分信息来判断是否命中缓存。如果命中,则返回 304 ,告诉浏览器资源未更新,可使用本地的缓存。这里的 header 中的信息指的是 Last-Modify/If-Modify-Since 和 ETag/If-None-Match.Last-Modify/If-Modify-Since浏览器第一次请求一个资源的时候,服务器返回的 header 中会加上 Last-Modify,Last-modify 是一个时间标识该资源的最后修改时间。当浏览器再次请求该资源时,request 的请求头中会包含 If-Modify-Since,该值为缓存之前返回的 Last-Modify。服务器收到 If-Modify-Since 后,根据资源的最后修改时间判断是否命中缓存。如果命中缓存,则返回 304,并且不会返回资源内容,并且不会返回 Last-Modify。缺点:短时间内资源发生了改变,Last-Modified 并不会发生变化。周期性变化。如果这个资源在一个周期内修改回原来的样子了,我们认为是可以使用缓存的,但是 Last-Modified 可不这样认为,因此便有了 ETag。ETag/If-None-Match与 Last-Modify/If-Modify-Since 不同的是,Etag/If-None-Match 返回的是一个校验码。ETag 可以保证每一个资源是唯一的,资源变化都会导致 ETag 变化。服务器根据浏览器上送的 If-None-Match 值来判断是否命中缓存。与 Last-Modified 不一样的是,当服务器返回 304 Not Modified 的响应时,由于 ETag 重新生成过,response header 中还会把这个 ETag 返回,即使这个 ETag 跟之前的没有变化。Last-Modified 与 ETag 是可以一起使用的,服务器会优先验证 ETag,一致的情况下,才会继续比对 Last-Modified,最后才决定是否返回 304。浏览器缓存的优点减少了冗余的数据传输;减少了服务器的负担,大大提升了网站的性能;加快了客户端加载网页的速度DNS什么是DNS全称 Domain Name System ,即域名系统万维网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。DNS协议运行在UDP协议之上,使用端口号53。DNS解析DNS解析过程就是将输入的域名解析成ip地址的过程。比如访问 www.baidu.com首先,会向浏览器缓存查找是否有域名对应的 ip地址,如果有则返回;如果浏览器缓存中没有,则查找本地 hosts文件中是否存在域名对应的 ip地址,如果有则返回;如果 hosts文件中没有,则查找本地 DNS 服务器,如果有则返回;如果本地 DNS 服务器中没有,则向根域名服务器查询,根域名服务器会返回 .com的ip地址;本地DNS服务器根据.com的ip地址到顶级域名服务器查询 baidu.com的ip地址并返回;本地 DNS 服务器根据 baidu.com的 ip 地址到权威域名服务器查询 www.baidu.com的 ip 地址,到此,域名 ip 地址 找到了,返回给本地 DNS 服务器;本地 DNS 服务器再将查询到的 ip 地址返回给浏览器,由浏览器根据 ip 地址发送请求。浏览器向本地DNS服务器查询的过程一般是 递归查询,本地DNS服务器向其他DNS服务器之间的查询一般是 迭代查询
  • [交流分享] java面试--http和https的区别
    一.HTTPHTTP:超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。设计 HTTP 最初的目的是为了提供一种发布和接收 HTML 页面的方法。它可以使浏览器更加高效。HTTP 协议是以明文方式发送信息的,如果黑客截取了 Web 浏览器和服务器之间的传输报文,就可以直接获得其中的信息。HTTP 原理:① 客户端的浏览器首先要通过网络与服务器建立连接,该连接是通过 TCP 来完成的,一般 TCP 连接的端口号是80。 建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源定位符(URI)、协议版本号,后边是 MIME 信息包括请求修饰符、客户机信息和许可内容。② 服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是 MIME 信息包括服务器信息、实体信息和可能的内容。二.HTTPSHTTPS:是以安全为目标的 HTTP 通道,是 HTTP 的安全版。HTTPS 的安全基础是 SSL。SSL 协议位于 TCP/IP 协议与各种应用层协议之间,为数据通讯提供安全支持。SSL 协议可分为两层**:SSL 记录协议(SSL Record Protocol),它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能**的支持。SSL 握手协议(SSL Handshake Protocol),它建立在 SSL 记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。HTTPS 设计目标:(1) 数据保密性:保证数据内容在传输的过程中不会被第三方查看。就像快递员传递包裹一样,都进行了封装,别人无法获知里面装了什么 。(2) 数据完整性:及时发现被第三方篡改的传输内容。就像快递员虽然不知道包裹里装了什么东西,但他有可能中途掉包,数据完整性就是指如果被掉包,我们能轻松发现并拒收 。(3) 身份校验安全性:保证数据到达用户期望的目的地。就像我们邮寄包裹时,虽然是一个封装好的未掉包的包裹,但必须确定这个包裹不会送错地方,通过身份校验来确保送对了地方 。HTTPS 相对于 HTTP 的改进双向的身份认证客户端和服务端在传输数据之前,会通过基于X.509证书对双方进行身份认证 。具体过程如下:客户端发起 SSL 握手消息给服务端要求连接。服务端将证书发送给客户端。客户端检查服务端证书,确认是否由自己信任的证书签发机构签发(客户端内置了所有受信任 CA 的证书)。 如果不是,将是否继续通讯的决定权交给用户选择 ( 注意,这里将是一个安全缺陷 )。如果检查无误或者用户选择继续,则客户端认可服务端的身份。服务端要求客户端发送证书,并检查是否通过验证。失败则关闭连接,认证成功则从客户端证书中获得客户端的公钥,一般为 1024 位或者 2048 位。到此,服务器客户端双方的身份认证结束,双方确保身份都是真实可靠的。注意:(1) 采用 HTTPS 协议的服务器必须要有一套数字证书,可以自己制作,也可以向组织申请。区别就是自己颁发的证书需要客户端验证通过,才可以继续访问。这套证书其实就是一对公钥和私钥。(2) 互联网有太多的服务需要使用证书来验证身份,以至于客户端(操作系统或浏览器等)无法内置所有证书,需要通过服务端将证书发送给客户端。(3) 客户端内置的是 CA 的根证书(Root Certificate),HTTPS 协议中服务器会发送证书链(Certificate Chain)给客户端。数据传输的机密性客户端和服务端在开始传输数据之前,会协商传输过程需要使用的加密算法。 客户端发送协商请求给服务端, 其中包含自己支持的非对成加密的密钥交换算法 ( 一般是RSA),数据签名摘要算法 ( 一般是SHA或者MD5) ,加密传输数据的对称加密算法 ( 一般是DES),以及加密密钥的长度。 服务端接收到消息之后,选中安全性最高的算法,并将选中的算法发送给客户端,完成协商。客户端生成随机的字符串,通过协商好的非对称加密算法,使用服务端的公钥对该字符串进行加密,发送给服务端。 服务端接收到之后,使用自己的私钥解密得到该字符串。在随后的数据传输当中,使用这个字符串作为密钥进行对称加密。防止重放攻击SSL 使用序列号来保护通讯方免受报文重放攻击。这个序列号被加密后作为数据包的负载。在整个 SSL 握手中,都有一个唯一的随机数来标记 SSL 握手。 这样防止了攻击者嗅探整个登录过程,获取到加密的登录数据之后,不对数据进行解密,而直接重传登录数据包的攻击手法。可以看到,鉴于电子商务等安全上的需求,HTTPS 对比 HTTP 协议,在安全方面已经取得了极大的增强。总结来说,HTTPS 的改进点在于创造性的使用了非对称加密算法,在不安全的网路上,安全的传输了用来进行非对称加密的密钥,综合利用了非对称加密的安全性和对称加密的快速性。HTTPS 的优点1、使用 HTTPS 协议可认证用户和服务器,确保数据发送到正确的客户机和服务器。2、HTTPS 协议是由SSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,要比 HTTP 协议安全,可防止数据在传输过程中不被窃取、修改,确保数据的完整性。3、HTTPS 是现行架构下最安全的解决方案,虽然不是绝对安全,但它大幅增加了中间人攻击的成本。HTTPS 的缺点(对比优点)1、HTTPS 协议握手阶段比较费时,会使页面的加载时间延长近。2、HTTPS 连接缓存不如 HTTP 高效,会增加数据开销,甚至已有的安全措施也会因此而受到影响。3、HTTPS 协议的安全是有范围的,在黑客攻击、拒绝服务攻击和服务器劫持等方面几乎起不到什么作用。4、SSL 证书通常需要绑定 IP,不能在同一 IP 上绑定多个域名,IPv4 资源不可能支撑这个消耗。5、成本增加。部署 HTTPS 后,因为 HTTPS 协议的工作要增加额外的计算资源消耗,例如 SSL 协议加密算法和 SSL 交互次数将占用一定的计算资源和服务器成本。6、HTTPS 协议的加密范围也比较有限。最关键的,SSL 证书的信用链体系并不安全,特别是在某些国家可以控制 CA 根证书的情况下,中间人攻击一样可行。SSL 提供服务(1) 认证用户和服务器,确保数据发送到正确的客户机和服务器;(2) 加密数据以防止数据中途被窃取;(3) 维护数据的完整性,确保数据在传输过程中不被改变。SSL 工作流程服务器认证阶段:(1) 客户端向服务器发送一个开始信息 “Hello” 以便开始一个新的会话连接;(2) 服务器根据客户的信息确定是否需要生成新的主密钥,如需要则服务器在响应客户的 “Hello” 信息时将包含生成主密钥所需的信息;(3) 客户根据收到的服务器响应信息,产生一个主密钥,并用服务器的公开密钥加密后传给服务器;(4) 服务器回复该主密钥,并返回给客户一个用主密钥认证的信息,以此让客户认证服务器。用户认证阶段:在此之前,服务器已经通过了客户认证,这一阶段主要完成对客户的认证。经认证的服务器发送一个提问给客户,客户则返回(数字)签名后的提问和其公开密钥,从而向服务器提供认证。SSL 协议提供的安全通道有以下三个特性:机密性:SSL 协议使用密钥加密通信数据。可靠性:服务器和客户都会被认证,客户的认证是可选的。完整性:SSL 协议会对传送的数据进行完整性检查。服务器证书(server certificates)是 SSL 数字证书的一种形式,意指通过提交数字证书来证明您的身份或表明您有权访问在线服务。再者简单来说,通过使用服务器证书可为不同站点提供身份鉴定并保证该站点拥有高强度加密安全。是组成 Web 服务器的 SSL 安全功能的唯一的数字标识。通过相互信任的第三方组织获得,并为用户提供验证您 Web 站点身份的手段。服务器证书包含详细的身份验证信息,如服务器内容附属的组织、颁发证书的组织以及称为公开密钥的唯一的身份验证文件。三.HTTP与HTTPS的区别安全性上,HTTPS是安全超文本协议,在HTTP基础上有更强的安全性。简单来说,HTTPS是使用TLS/SSL加密的HTTP协议申请证书上,HTTPS需要使用ca申请证书传输协议上, HTTP是超文本传输协议,明文传输;HTTPS是具有安全性的 SSL 加密传输协议连接方式与端口上,http的连接简单,是无状态的,端口是 80; https 在http的基础上使用了ssl协议进行加密传输,端口是 443
  • [已解决问题归档] AICC软件接口网关http修改为https和去掉token认证方法
    【功能模块】华为AICC_CMS,CCUCS,ccGateway局点:长沙银行AICC解决方案:AICC 8.15.0SP1CTI :V300R008C23SPC001【问题求助】长沙银行信息技术中心反馈,软件内网环境不可用使用https请求方式,要求全部整改为http(用户答复在之前碰到过升级操作系统会导致https访问出问题)请华为这边截图或文字答复说明下如何把ccgateway、ccucs、cms对外提供服务的访问模式修改为http; 并且文字回复下如何去掉token认证!