• [技术干货] 在逃小姐的读书笔记——《图解HTTP》第八章、第九章
    完整目录  >>    第八章 确认访问用户身份的认证        何为认证           1.核对信息                 • 密码:只有本人才会知道的字符串信息。                 • 动态令牌:仅限本人持有的设备内显示的一次性密码。                 • 数字证书:仅限本人(终端)持有的信息。                 • 生物认证:指纹和虹膜等本人的生理信息。                 • IC 卡等:仅限本人持有的信息。           2. HTTP/1.1 使用的认证方式                 ▶ BASIC 认证(基本认证)                 ▶ DIGEST 认证(摘要认证)                 ▶ SSL 客户端认证                 ▶ FormBase 认证(基于表单认证)                 ▶ 等等    BASIC认证           Web 服务器与通信客户端之间进行的。           认证步骤:(1)客户端发送请求Authorization Required;(2)服务器端返回状态码401,带WWW-Authenticate以告知客户端需要进行的认证;(3)客户端将用户ID和密码以Base64方式编码后发送;(4)服务器端接收包含首部字段Authorization,成功200,认证失败返回401           *注意Base64 是编码方式,不是加密处理           问题:不灵活、不安全    DIGEST认证           同样质询/响应的方式(challenge/response),但不像BASIC认证那样直接发送明文密码。           认证步骤:(1)客户端请求;(2)服务器端发送临时质询码(随机数)及认证状态码401;(3)客户端发送摘要及由质询码计算出的响应码;(4)服务器认证,成功200,失败401    SSL客户端认证           需要客户端安装证书           认证步骤:(1)客户端发送认证资源请求;(2)服务器发送Certificate Request报文,要求客户端提供证书。(3)客户端将证书信息以Client Certificate报文方式发送给服务器。(4)服务器验证后领取证书内客户端的公开密钥,开始HTTPS加密通信。           一般,SSL客户端认证由证书+表单认证的方式,采用双因素认证    基于表单认证(多数)           此方式认证的登录信息及认证过程都无标准化方法,一般用Cookie来管理会话(联系前面),保存用户的登录状态。           客户端会向服务器上的 Web 应用程序发送登录信息(Credential),按登录信息的验证结果认证。           认证步骤:(1)客户端把用户ID和密码放入报文的实体部分,通常用POST方法把请求发送给服务器;(2)服务器在首部字段Set-Cookie内写入Session ID以用于是识别客户;(3)客户端接收Session ID,将其作为Cookie保存在本地。(4)下次想服务器发送请求,Session ID也会发给服务器,浏览器自动发送Cookie    第九章 基于HTTP的功能追加协议        SPDY           产生举例场景:网站上新内容的及时更新,http需要频繁的确认           HTTP问题:   (1) 一条连接一个请求                                 (2)请求只从客户端开始,客户端只接受响应                                 (3)首部信息未经压缩,首部信息越多延迟越大                                 (4)首部冗长,每次发送相同首部造成浪费                                 (5)非强制压缩发送           解决:1. Ajax(Asynchronous JavaScript and XML,异步JavaScript与XML技术):只更新Web局部页面,减少数据传输,但有大量请求产生。                     2. Comet:将响应置于挂起的状态,一旦有更新,服务器立刻返回,但是连接时间变长,浪费资源。                     3. SPDY:没有完全改写HTTP协议,是在 TCP/IP 的应用层与运输层之间通过新加会话层的形式运作。同时,考虑到安全性问题,SPDY 规定通信中使用 SSL。(会话控制数据流动,HTTP建立通信连接)图:SPDY的设计                       使用SPDY后,HTTP获得额外功能:                       • 多路复用流:通过单一的 TCP 连接,可以无限制处理多个HTTP请求。                       • 赋予请求优先级                       • 压缩 HTTP 首部:减少数据包数量和发送字节数                       • 推送功能:服务器主动先客户端推送数据                       • 服务器提示功能:主动提示客户端请求所需的数据                    *SPDY的确是一种可有效消除HTTP瓶颈的技术,但很多Web网站存在的问题并非仅仅是有HTTP瓶颈导致的    WebSocket           解决HTTP瓶颈的新协议及API,是Web浏览器和Web服务器之间全双工通信标准。           主要特点:(1)一旦建立WebSocket协议的通信连接,之后所有的通信都依靠这个专用协议进行。                          (2)无论客户端或者和服务器端都可直接向对方发送报文                              (3)推送功能:支持服务器直接发送数据                          (4)减少通信量:建立连接,保持连接状态,并且WebSocket首部信息很小           有握手▪请求、握手▪响应图:WebSocket通信    HTTP/2.0  推进中,改善使用Web速度体验    Web 服务器管理文件的 WebDAV           WebDAV(即基于万维网的分布式创作和版本控制),是一个可对 Web 服务器上的内容直接进行文件复制、编辑、加解锁等操作的分布式文件系统           拓展概念:集合(统一管理多个资源的概念)                            资源(文件或集合)                            属性(“名称 = 值”的格式)                            锁(文件不可编辑的状态)           新增方法与状态码(书182页)下一章:构建Web内容的技术
  • [技术干货] 正则match, research区别
    1. 使用格式(1)match是 re.match(pattern, string)(2)search是re.search(pattern, string)2. 见下图,可知,(1)match是从一开始便用pattern进行匹配,要是一开始没有匹配成功,那么便停止匹配,返回None;(2)research并不是一开始用pattern进行匹配,而是在string字符串里全部遍历查找。       参考代码:      运行结果:对于某些怪问题:         问题:match岂不是没啥用,只能匹配一开头匹配成功的字符串?         解答:首先,有些情况下的需求就是要一开始匹配字符串,没有匹配到就立马返回结果None,提高效率,此种情况下速度也要优先于research;                   比如,pattern是 'http',string是'sftp://www.huawei.com/........../http',我只想知道开头是否是http,但是用research却要一直查找到最后,                   即使查找到了,也不是我的需求。                   再来,可从上图得知,research返回的结果也是re.Match对象,也就是说research是基于match模块来开发的,如果不要match,那research还怎么玩 ?!!!
  • [技术干货] 在逃小姐的读书笔记——《图解HTTP》第六章(下)、第七章
    完整目录  >>大家早上好,今天是感恩节哦~一路走来,所遇皆温柔,感谢每一位为我们打开世界的人    第六章 HTTP首部(下)        响应首部字段    服务器向客户端响应报文中使用的字段,用于补充附加信息、服务器信息、附加要求等           1.Accept-Ranges :bytes / none  服务器告知的可处理请求范围,不能处理则指定为none           2.Age :数字(单位秒)   回应客户端经历的响应时间           3.ETag  将资源以字符串形式做唯一性标识的方式,比如在URI相同的情况下,如何区分中文版和英文版呢,此时用ETag值来指定资源。强ETag:细变化也改变;弱ETag:根本变化改变。           4.Location  告诉客户端资源位置变更到另一URI           5.Proxy-Authenticate  类似WWW-Authorization,但是是代理服务器对客户端的认证信息           6.Retry-After: 数字(秒)   告知客户端应该在多久之后再次发送请求           7.Server  告知客户端当前服务器上安装的 HTTP 服务器应用程序的信息,包括软件应用名称、版本号、启动可选项等。           8.Vary  可用于对缓存进行控制           9.WWW-Authenticate  用于 HTTP 访问认证,服务器对客户端的,告知客户端适用于访问请求 URI 所指定资源的认证方案(Basic 或是 Digest)。    实体首部字段           1.Allow: GET, HEAD   通知客户端资源可支持的 HTTP 方法。           2.Content-Encoding: gzip   告诉客户端服务器对实体的主体进行压缩的内容编码方式           3.Content-Language: zh-CN   告知客户端,实体主体使用的自然语言           4.Content-Length: 15000   实体主体的大小(字节)           5.Content-Location   替代对应资源的URI           6.Content-MD5   接收的报文主体与首部字段 Content-MD5 的字段值比较,检测完整性。无法验证偶发性改变和恶意篡改。           7.Content-Range   针对范围请求,返回响应           8.Content-Type   说明了实体主体内对象的媒体类型           9.Expires    告知客户端资源失效日期           10.Last-Modified   表明资源最终修改时间    为Cookie服务的首部字段           1.Set-Cookie属性  当服务器开始管理客户端的状态时,会事先告知各种信息           2.Expires 属性   浏览器可发送Cookie的有效期           3.Path属性   限制Cookie发送范围的文件目录           4.Domain属性   相同域名后缀,都可发送Cookie,不太安全           5.Secure属性   仅在 HTTPS 安全连接时,才可以发送Cookie           6.HttpOnly 属性   使 JavaScript 脚本无法获得 Cookie,可防止跨站脚本攻击(Cross-sitescripting,XSS)    其他首部字段           1.X-Frame-Options  属于http响应头部,于控制网站内容在其他 Web 网站的 Frame 标签内的显示问题,防止点击劫持           2.X-XSS-Protection   属于http响应头部,用于控制浏览器XSS防护机制,0 XSS无效,1有效。           3.DNT   属于 HTTP 请求首部,意为拒绝个人信息被收集,0 同意被**,1拒绝被**。           4.P3P  用于保护用户隐私的技术           *X- 前缀表示非标准参数    第七章 确保Web安全的HTTPS        http缺点           1.明文     解决:(1)通信的加密:SSL; (2)内容的加密:可以对报文主体进行加密处理(而通信本身不加密)           2.不验证     解决:SSL不仅可提供加密处理,并有三方机构证书确认各方身份。           3.不保证完整性:导致攻击者拦截和内容篡改(即中间人攻击,MTTM),解决:散列校验(如MD5、SHA-1)和数字签名(如PGP,完美隐私),但没有办法百分之百保证结果正确,所以用HTTPS组合方式。     HTTP+加密+认证+完整性保护=HTTPS           1.HTTPS是身批SSL外壳的HTTP               HTTPS(HTTPSecure,超文本传输安全协议)或 HTTP over SSL,不是应用层新协议,是HTTP通信接口部分用SSL(Secure Socket Layer)和 TLS(Transport Layer Security)协议代替而已。通常,HTTP直接和TCP通信。当使用SSL 时,则演变成先和SSL通信,再由SSL和TCP通信了。           2.加密密钥             • 加解密同一个密钥——共享密钥加密/对称密钥加密             • 公开密钥发送+私有密钥解密——公开密钥加密/非对称密钥加密(一对), SSL采用公开密钥加密处理方式             • HTPS的混合加密机制:交换密钥环节使用公开密钥加密方式,之后的通信使用共享密钥加密方式。           3.证书类型             • 证明公开密钥正确性的数字证书(由权威数字证书认证机构颁发)             • 证明组织真实性的EV SSL证书             • 确认客户端的客户端证书,如网银             • 自己颁发的服务器证书:自签名正式—浏览器访问出现“无法确认安全性”等告警信息           4.HTTP的安全通信机制(书153页)           5.HTTPS比HTTP要慢2-100倍下一章:确认访问用户身份的认证
  • [技术干货] 在逃小姐的读书笔记——《图解HTTP》第五章、第六章(上)
    完整目录  >>参与一项运动,培养一种爱好,结交一个朋友,阅读一本好书激发活力,释放能量,大家冲冲冲     第五章 与HTTP协作的web服务器        单虚拟主机多域名            通过虚拟服务器可以实现允许一台HTTP服务器搭建多个web站点。如果两域名同时部署在同一个服务器上(相同的IP地址),使用dns服务解析域名后,两者的访问IP地址会相同。因此在发送 HTTP 请求时,必须在 Host 首部内完整指定主机名或域名的 URI。    通信数据转发程序           •  代理:传话,每次经过代理服务器时,会追加写入Via首部信息。有缓存代理(响应缓存资源)和透明代理(不对报文做任何加工的代理)。           •  网关:像自己拥有资源的源服务器一样对请求进行处理。利用网关可以将HTTP请求转化为其他协议通信,可以提高安全性,和其他系统联动等。           •  隧道:安全,透明    缓存            指代理服务器或客户端本地磁盘内保存的资源副本            因为缓存有效期,需向源服务器确认资源的有效性            缓存地:缓存服务器或客户端浏览器中(即临时网络文件),如果浏览器缓存有效,可以不必向服务器请求相同的资源,而可以直接从本地磁盘读取。    第六章 HTTP首部(上)        回顾下HTTP报文结构            HTTP请求报文            HTTP响应报文             首部字段:提供报文主体大小、所使用语言,认证信息等内容。构成: 字段名:字段值(字段值对应HTTP首部字段可以有多个值)            4种HTTP首部字段类型:通用首部字段、请求首部字段、响应首部字段、实体首部字段            首部字段说明p83、p84页    End-to-end 首部和 Hop-by-hop 首部             端到端首部(End-to-end Header):分在此类别中的首部会转发给请求 / 响应对应的最终接收目标,且必须保存在由缓存生成的响应中,另外规定它必须被转发。            逐跳首部(Hop-by-hop Header):分在此类别中的首部只对单次转发有效,需提供 Connection 首部字段(即逐跳首部、连接的管理)。    HTTP/1.1 通用首部字段            1. Cache-Control   控制缓存行为                    • Cache-Control : public/private 表示所有人可利用缓存/此缓存只提供给特定对象。                    • Cache-Control: no-cache 如来自客户端请求则表示客户端将不会接收缓存过的响应,必须要源服务器的。如来自服务器响应,则服务器不能对资源进行缓存。                    • Cache-Control: no-cache=Location 只出现在响应指令中,客户端接收带指定参数值的此响应报文,不能使用缓存。而无参数值可以。                    • Cache-Control: no-store 不缓存,暗示有机密信息,注意和(2)区别                    • Cache-Control: s-maxage/max-age=604800(单位 :秒) max-age表示资源保存为缓存的最长时间。请求报文中包含:不为0时,缓存服务器直接处理,为0时,交源服务器处理。响应报文中包含:缓存服务器不对资源有效性做再次确认。                    • Cache-Control: min-fresh=60(单位:秒)指令要求缓存服务器返回至少还未过指定时间的缓存资源                    • Cache-Control: max-stale=3600(单位:秒) 指示缓存资源,即使过期(或在过期指定时间内)也照常接收                    • Cache-Control: only-if-cached 表示客户端仅在缓存服务器本地缓存目标资源的情况下才会要求其返回,若发生请求缓存服务器的本地缓存无响应,则返回状态码 504                    • Cache-Control: must-revalidate 代理会向源服务器再次验证即将返回的响应缓存目前是否仍然有效。无效,则向客户端发504状态码。                    • Cache-Control: proxy-revalidate 缓存服务器响应前,必须再次验证缓存的有效性。                    • Cache-Control: no-transform 缓存都不允许缓存改变实体主体的媒体类型                    • 扩展:通过 cache-extension 标记(token),可以扩展 Cache-Control 首部字段内的指令。            2. Connection   逐条首部、连接的管理                  (1) 控制不再转发给代理的首部字段(即Hop-by-hop 首部)                    如connection:upgrade   此首部字段upgrade代理接受后不再转发                  (2)管理的持久连接;                    Connection: close  默认连接是持久连接,指定close首部字段值时断开            3. Date   创建 HTTP 报文的日期和时间            4. Pragma: no-cache    只存在于客户端发送请求中,表示不接收缓存            5. Trailer  报文末端的首部一览                    会事先说明在报文主体后记录了哪些首部字段。该首部字段可应用在 HTTP/1.1 版本分块传输编码时。(如首部字段包含Trailer:Expires   然后在报文主体后  Expires:xxx明细)            6. Transfer-Encoding   规定了传输报文主体时采用的编码方式            7. Upgrade    用于检测 HTTP 协议及其他协议是否可使用更高的版本进行通信            8. Via   **传输路径 各个代理服务器会往Via首部添加自身服务器的信息。            9. Warning   错误通知    请求首部字段              1. Accept   通知服务器,用户代理能够处理的媒体类型及媒体类型的相对优先级q(范围0-1,默认1.0最大,可精确到小数点后3位)              2. Accept-Charset   可用来通知服务器用户代理支持的字符集及字符集的相对优先顺序。应用于协商机制              3.Accept-Encoding   报文主体可压缩,告知支持的内容编码(可多个)及优先级顺序,如上述的gzip、deflate编码格式。              4.Accept-Language   用来告知服务器用户代理能够处理的自然语言集(指中文或英文等)以及优先级,可多个             5.Authorization   用来告知服务器,用户代理的认证信息(证书值)。              6.Expect   客户端使用首部字段 Expect 来告知服务器,期望出现的某种特定行为。              7.From   用来告知服务器使用用户代理的用户的电子邮件地址 也可用User-Agent首都字段              8.Host   请求资源所在的服务器,多个虚拟主机运行在同一个 IP 上,因此使用首部字段 Host 加以区分  Host:主机名(主机名未设置,可为空)             (下方 If-xxx  附请求条件,服务器判断条件,只有为真时,才会执行请求。)              9.If-Match   比较标记实体ETag,只有当值一致时,才会接受请求。              10.If-Modified-Since :时间   确认本地资源有效性,如果在 If-Modified-Since 字段指定的日期时间后,资源发生了更新,服务器会接受请求              11.If-None-Match   只有在 If-None-Match 的字段值与 ETag 值不一致时,可处理该请求。与 If-Match 首部字段的作用相反              12.If-Range   它告知服务器若指定的 If-Range 字段值(ETag 值或者时间)和请求资源的 ETag 值或时间相一致时,则作为范围请求处理。反之,则返回全体资源。              13.If-Unmodified-Since :时间   告知服务器,指定的请求资源只有在字段值内指定的日期时间之后,未发生更新的情况下,才能处理请求。与If-Modified-Since相反              14.Max-Forwards : 数字   最大传输逐跳数,每次转发数值减 1,当数值变 0 时返回响应              15.Proxy-Authorization   客户端告诉代理服务器认证所需要的信息,客户端与服务器之间的认证,使用首部字段 Authorization              16.Range   请求获取服务器资源的指定字节范围,服务器处理后可以206,不可以200的响应及全部资源。              17.Referer   告知服务器原始资源的URI是从哪个web页面发起的,如发给服务器,会有信息泄露的可能。              18.TE  传输编码的优先级              19.User-Agent  用于传达浏览器的种类、名称等信息。第六章 HTTP首部  (下)>>未完待续
  • [技术干货] 在逃小姐的读书笔记——《图解HTTP》第三章、第四章
    完整目录  >>哈哈,大家早安,今天又是阳光充沛,活力十足的一天,啾~    第三章:HTTP报文内的HTTP信息        HTTP报文             HTTP报文是由多行数据构成的字符串文本,是用于HTTP协议交互的信息             HTTP报文结构:(报文首部+空行(CR+LF)+报文主体(非必要))             报文首部组成:请求行、状态、首部字段、其他    编码提升传输速率             报文:是HTTP通信中的基本单位,由8位组字节流组成。             实体:作为请求或相应时的有效荷载数据(补充项)被传输,其内容由实体首部和实体主体组成。             *通常,报文主体等于实体主体。只有当传输中进行编码操作时,实体主体的内容发生变化,才导致它和报文主体产生差异。             内容编码:将实体信息原样压缩变小后发送(类似于邮件中压缩文件,附件发送)             常用内容编码:gzip、compress、deflate、identity    分块传输编码             将实体主体分割变小后再发送,以让浏览器可以逐步显示画面    发送多种数据的多部分对象集合             MIME (多用途因特网邮件)扩展中会使用一种称为多部分对象集合(Multipart)的方法,来容纳多份不同类型的数据。如邮件中可处理文本、图像、视频等不同类型的数据。             使用多部分对象集合,需要在首部字段中加上Content-type    获取部分的请求范围             指定下载的请求范围,从下载中断处恢复下载。如果无法响应范围请求,会回复完整内容。用首部字段range指定组员范围。    内容协商             相同URI,返回最合适的内容。如中英文界面对应返回             内容协商技术类型:                            (1)服务器驱动协商:以请求的首部字段为参考,在服务器端自动处理                            (2)客户端驱动协商:用户从浏览器显示的可选项列表中手动选择                            (3)透明协商(结合前两种)     第四章:返回结果的HTTP状态码    状态码:描述返回的请求结果 (组成:3位数字+原因短语) 类别原因短语1XXInformational(信息性状态码)接收的请求正在处理2XXSuccess(成功状态码)请求正常处理完毕3XXRedirection(重定向状态码)需要进行附加操作以完成请求4XXClient Error(客户端错误状态码)请求报文中存在语法错误,服务器无法处理5XXServer Error(服务器错误状态码)服务器处理请求出错 2xx成功200OK成功,正常处理204No Content请求成功处理但是无资源可返回,显示页面不发生更新206Partial Content有范围请求,并成功执行3xx重定向301Moved Permanently永久性重定向,表示请求的资源已被分配了新的URI,对方需更新使用的URI302Found临时性重定向,表示请求的资源已被分配了新的URI,用户(本次)使用新的 URI 访问303See Other同302,但是明确要求客户端用GET方法获取资源304Not Modified客户端发送附带条件的请求,服务器端允许请求访问资源,但未符合条件的情况307Temporary Redirect同302,但禁止将 POST 方法改变成 GET 方法,遵照标准执行*301、302 标准是禁止将 POST 方法改变成 GET 方法的,但实际浏览器都会把POST改成GET,并删除报文内主体,重新发送请求。4xx客户端错误400Bad Request表示请求报文中存在语法错误401Unauthorial有认证信息,第1次请求返回认证界面,第2次请求,表示认证失败403Forbidden服务器拒绝请求资源(包括权限问题)404Not FoundNot found,服务器上没有请求的资源5xx服务器错误500Internal Server Error执行请求时发生了错误,也有可能是web应用存在的bug或某些临时的故障503Service Unavailable服务器暂时处于超负载或正在进行停机维护的状态,无法处理请求下一章:与HTTP协作的web服务器———————————————————————————————————书本上的状态码整理在这里,大家日常还经常遇到哪些状态码?它们又代表哪些含义呢?欢迎大家在下方评论区补充分享!
  • [技术干货] 在逃小姐的读书笔记 ——《图解HTTP》第一章、第二章
    数通网络开放可编程论坛上有很多成系列的经验帖子比如AOC萌新之旅,我的编程首战手册等,写的很好我最近看了《图解HTTP》这本书,也想把书中知识点记录到贴子下,一方面加强记忆理解,一方面在看书过程中肯定各种这种,到时候也请大家帖子下多多解答指正,在此多谢!http的话,很多人推荐《图解HTTP》和《HTTP权威指南》我先下了一个《图解HTTP》的pdf文档,大家也可以下载下,网上找的很顺利就下载好了200多页,还有彩色漫画和众多案例,读起来不太累人,★★★★★推荐下面就是正式的知识梳理,但要注意这是按我个人了解去记录的,有略过的部分,详细的还得自己看书哦~~~章节基本内容链接第一章:了解web及网络基础1.客户端与服务端;2.www万维网构建技术;3.tcp/ip协议族;4.相关协议:IP、TCP、DNS协议;5.客户端——服务器端通信过程;6.URI和URL;本贴第二章:简单的HTTP协议1. 请求报文和响应报文;2. 请求URI定位资源;3. 告知服务器意图的HTTP方法;4. 持久连接节省通信量;5. Cookie;本帖第三章:HTTP报文内的HTTP信息1. HTTP报文;2. 编码提升传输速率;3. 分块传输编码;4. 发送多种数据的多部分对象集合;5. 内容协商;跳转 >>第四章:返回结果的HTTP状态码1. 状态码的描述及组成;2. 2xx成功;3. 3xx重定向;4. 4xx客户端错误;5. 5xx服务器错误;跳转 >>第五章:与HTTP协作的web服务器1. 单虚拟主机多域名;2. 通信数据转发程序;3.缓存;跳转 >>第六章(上):HTTP首部(上)1. 回顾下HTTP报文结构;2. End-to-end 首部和 Hop-by-hop 首部;3. HTTP/1.1 通用首部字段;4. 请求首部字段跳转 >>第六章(下):HTTP首部(下)1. 响应首部字段;2. 实体首部字段;3. 为Cookie服务的首部字段;4. 其他首部字段跳转 >>第七章:确保Web安全的HTTPS1. http缺点;2.HTTP+加密+认证+完整性保护=HTTPS跳转 >>第八章:确认访问用户身份的认证1. 何为认证2. BASIC认证3. DIGEST认证4. SSL客户端认证5. 基于表单认证(多数)跳转 >>第九章:基于HTTP的功能追加协议1. SPDY2. SPDY3. HTTP/2.0  推进中,改善使用Web速度体验4. Web 服务器管理文件的 WebDAV跳转 >>第十章:构建Web内容的技术1.HTML 超文本标记语言2. Web的应用3. 数据分布的格式及语言跳转 >>第十一章:Web的攻击技术1.针对Web的攻击技术;2.因输出值转义不完全引发的安全漏洞3.因设置或设计上的缺陷引发的安全漏洞4.因会话管理疏忽引发的安全漏洞5.其他安全漏洞跳转 >>_________________________________________________________________________________________    第一章: 了解web及网络基础          客户端与服务端   www万维网构建技术           三个重要技术:HTML超文本标记语言、HTTP协议、URL统一资源定位符   tcp/ip协议族              通常使用的网络在此协议族的运行,HTTP是属于它内部的一个子集。4层结构,发送端在层与层传输数据是,加首部信息,接受端消去首部                        应用层应用服务,如tfp、dns、http传输层传输数据,tcp及udp 网络层数据包处理    数据链路层处理硬件部分    相关协议:Ip、tcp、dns协议           IP协议:传数据包。在利用mac地址中转时,会采用Arp协议(即地址解析协议:ip地址反查mac地址)           Tcp协议:传输层、可靠并确认数据送达(三次握手,标志—SYN及ACK)、为更容易传输大数据,会将大块数据分割成以报文段为单位的数据包。           Dns协议:从域名查找IP地址,或逆向从IP地址查找域名。   客户端——服务器端通信过程         (1)dns服务器将域名解析成ip地址;         (2)http协议表示针对目标服务器生成http请求报文;         (3)tcp协议将http请求报文进行分割;         (4)ip协议搜索地址传输;         (5)tcp协议接受报文并重组;         (6)http协议对web服务器请求的内容进行处理;   URI和URL           URI(统一资源标识符):访问资源使用的协议类型方案表示的定位标识符,标识,某一互联网资源。绝对URI格式               *登录信息(认证)是可选项。               *使用绝对URI,必须指定待访问的服务器地址。地址可以是类似hackr.jp这种可以解析的DNS,或者是IPv4或是 [0:0:0:0:0:0:0:1]用方括号括起来的IPv6地址名。           URL(统一资源定位符):标识资源地点,即访问web页面时使用的网页地址。    第二章: 简单的HTTP协议          请求报文和响应报文           请求报文:由请求方法、请求URI、协议版本、可选的请求首部字段和内容实体构成。           响应报文:由协议版本、状态码(表示成功或失败的数字代码)、用以解释状态码的原因短语、可选的相应首部字段以及实体主体构成。         HTTP协议是一种不保存状态,即无状态的协议(协议对于发送过的请求或响应都不做持久化处理)。但这种不保存状态会有问题,比如要求用户登录到一家购物网站,即使他跳转到该站的其他页面后,也需要能继续保持登录状态。         解决技术:cookie   请求URI定位资源         当客户端请求访问资源而发送请求时,URI需要将作为请求报文中的请求URI包含在内。    告知服务器意图的HTTP方法         • GET:获取资源,请求访问已被URI识别的资源         • POST:传输实体主体,一般使用较多         • PUT:传输文件,类似FTP协议的文件上传,在请求报文中要包含文件内容,存到URI指定位置。自身不带验证机制,不安全。         • HEAD:获得报文首部(和GET一样,但是不返回报文主体,只为确认有效性及资源更新日期)         • DELETE:删除文件。自身不带验证机制,不安全。         • OPTIONS:查询针对请求URI指定的资源支持的方法(客户端问服务器端支持哪些方法,服务器端回答)         • TRACE:**路径,发送请求时,在 Max-Forwards 首部字段中填入数值,每经过一个服务器端就将该数字减 1, 0 时,停止传输。不常用,会导致XST跨站**攻击。         • CONNECT:用建立隧道的方法进行通信,常用SSL(安全套接层)和TSL(传输层安全)协议加密。    持久连接节省通信量       初始版本,每建立tcp连接,进行一次HTTP通信后,都要断开TCP连接。       持续连接:只要任意一端不断开连接,则保持TCP连接状态,进行多次请求和响应交互,减小开销,提升web页面显示速度。使管线化的发送方式成为可能。(管线化:同时并行发送多个请求,而不必等待收到响应后再发送请求。)    Cookie       解决HTTP无状态协议       通过在请求和相应的报文中写入Cookie信息来控制客户端的状态。       从服务器端发送的响应报文内的一个叫做 Set-Cookie 的首部字段信息,通知客户端保存 Cookie,下次客户端发送请求,服务器端发现cookie,检查相应的客户端连接请求,对比服务器上记录,得到之前状态信息。下一章:HTTP报文内的HTTP信息———————————————————————————————————《图解HTTP》是很好的入门书籍,通俗易懂,那么今天结束时也向大家提出一个疑问:哪些方向的职业会需要http的知识?有没有必要深入学习了解http?请大家根据自己的理解在评论区留言吧!
  • [问题求助] esp8266 AT指令HTTP连接后台服务器问题
    【功能模块】esp8266 【操作步骤&问题现象】1、在开发过程中我需要通过HTTP协议连接我的后台服务器进行通信,但在esp8266 AT指令集中,只提供了TCP/IP的通信接口,但我的服务器地址不是IP地址(AT指令只支持IP地址),而是网址,,求助各位大神,此种情况我该怎么解决2、【截图信息】【日志信息】(可选,上传日志内容或者附件)
  • [问题求助] devcloud访问不了,报http 500错误
  • [技术干货] 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; } } } ?>
  • [基础组件] 【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、【截图信息】【日志信息】(可选,上传日志内容或者附件)
  • [技术干货] 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}?>
  • [交流吐槽] 【如鱼得水】加载http图片会自动转化为https
    你好,接口返回的图片是http的,但是请求图片的时候,会自动变成https,转成https之后无法访问成功
  • [技术干货] 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• 删除不需要或者敏感标签• 添加新标签
  • [已解决问题归档] AICC软件接口网关http修改为https和去掉token认证方法
    【功能模块】华为AICC_CMS,CCUCS,ccGateway局点:长沙银行AICC解决方案:AICC 8.15.0SP1CTI :V300R008C23SPC001【问题求助】长沙银行信息技术中心反馈,软件内网环境不可用使用https请求方式,要求全部整改为http(用户答复在之前碰到过升级操作系统会导致https访问出问题)请华为这边截图或文字答复说明下如何把ccgateway、ccucs、cms对外提供服务的访问模式修改为http; 并且文字回复下如何去掉token认证!
总条数:327 到第
上滑加载中