HTTP诞生于1989年,为了知识共享,提出了三种WWW构建技术:标准的通用标记语言设置为HTML(HyperTextMarkupLanguage,超文本标记语言)文档传输协议HTTP(HyperTextTransferProtocol,超文本传输??协议)文档定位URL(UniformResourceLocator,统一资源定位器)保存,无法实现状态管理),所以会引入Cookie和LocalStorage等技术之后。请求方法有:GET(获取资源)、POST(传输实体体)、PUT(传输文件)、HEAD(获取消息头)、DELETE(删除文件)、OPTIONS(查询支持的方法)、TRACE(跟踪路径)、CONNECT(连接代理需要隧道协议)在HTTP/1.1中,默认所有连接都是持久连接(keep-alive),即一个TCP连接建立后,可以对多个HTTP请求和响应进行流水线处理,并且可以并行发送多个HTTP请求。要求。Cookie:1)客户端发送请求信息;2)服务端生成包含Cookie信息的响应消息(Set-Cookie字段包含sid);3)客户端发送带有Cookie信息的请求报文(Cookie字段中的Sid);http1.0/1.1/2.0的区别HTTP/1.1和HTTP/1.0协议的区别主要体现在:1)持久连接,即一个TCP连接可以支持多个HTTP请求;2)管道,即客户端不需要在上一个http请求结果返回后发送下一个请求;3)缓存处理,http1.0使用expires字段,存在时钟同步问题,http1.1使用Cache-Control;4)断点续传,优化带宽,增加range字段,返回码为206(PartialContent);5)主机头字段,支持一台物理主机拥有多个虚拟主机、一个IP地址、多个域名;HTTP/2.0与HTTP/1.1协议相比,差异主要体现在:1)WebSocket用于支持服务端推送;2)多路复用,连接共享,允许通过单个HTTP2连接同时发起多个请求-响应消息;3)在tcp和http层之间增加Binaryframing层,HTTP/2通信在一个连接上完成,这个连接可以携带任意数量的双向数据流;4)头压缩,HTTP/1.1不支持HTTP头压缩,为此应该使用SPDY和HTTP/2但是,SPDY使用的是通用的DEFLATE算法,而HTTP/2使用的是专门为头压缩设计的HPACK算法;简书讲解csdn博客和HTTP报文讲解HTTP报文本身是由多行数据字符串字面量组成的。请求消息的结构及对应的消息Requestline:请求方法,请求URI,HTTP版本Statusline:表示响应结果的状态码,原因短语,HTTP版本压缩传输内容编码(gzip,compress,deflate,identity),分块传输编码MIME(MultipurposeInternetMailExtensions,多用途互联网邮件扩展)HTTP状态码拆分发送1)200OK;请求正常处理2)204NoContent;请求处理成功,但是没有资源返回3)206PartialContent;客户端发出范围请求,服务器成功处理4)301MovedPermanently;永久重定向,即请求的资源已经分配了新的URI5)302Found;临时重定向,即请求的资源临时分配一个新的URI6)303SeeOther;表示请求对应的资源还有另外一个URI,应该使用GET方式获取7)304NotModified;服务器资源没有变化,可以直接使用客户端未过期的缓存(与redirect无关)8)307TemporaryRedirect;临时重定向(会强制浏览器不要将POST更改为GET方法)9)400BadRequest;表示请求报文有语法错误10)401Unauthorized;表示请求需要通过HTTP认证,如果之前请求过一次,则表示用户认证失败11)403Forbidden;服务器拒绝访问资源12)404NotFound;服务器找不到请求的资源13)500InternalServerError;发生内部服务器错误14)503服务不可用;服务器过载,无法处理请求有时,状态码和状态会不一致解释:301和302状态码都是重定向,不同的是301是永久重定向,302是临时重定向。如果客户端将网址保存为书签,那么301会更新书签,但302不会更新书签。重定向:服务器告诉客户端它需要重新发送请求到一个新的URL。当服务器返回302状态码时,设置响应头的Location字段。HTTPS的缺点(HTTPoverSSL,包括加密、认证和完整性保护)HTTP1)通信使用明文(未加密),内容可能被窃听;—>加密2)不验证通信方身份,可能会遇到伪装;—>身份验证示例:伪装的web服务器;伪装的客户;没有访问权限的通信方;无法判断无意义的请求,可能会遇到DoS攻击;3)消息的完整性无法证明,内容可能被篡改;encryption通信加密,内容加密加密方式:对称密钥加密(共享密钥加密),非对称密钥加密(公钥加密)对称加密:加密和解密使用相同的密钥;问题:密钥到达对方的安全性如何;非对称加密:一对密钥(公钥+私钥);方法:服务器有一对密钥,当需要加密传输时,服务器将公钥分发给客户端,客户端使用公钥加密发送密文给服务器,服务器使用私钥解密它的密钥;消息+公钥=密文;密文+公钥!=消息(技术上极其困难,离散对数评估);非对称加密比对称加密慢;HTTPS采用混合加密机制(非对称加密+对称加密),使用非对称加密传输对称加密所需的密钥,再使用对称加密传输主体;如何判断服务器发送的公钥的真实性?借用第三方数字认证机构(CA,CertificateAuthority)1)服务器将自己的公钥登录到CA,申请公钥证书2)CA颁发公钥证书(公钥+CA数字签名)3)服务器发送给客户端4)客户端使用浏览器内置的CA公钥验证公钥证书的有效性5)客户端用公钥加密报文,发送MAC(MessageAuthentication)Code)messagedigestdetectionreport文件的完整性用于确认客户端的客户端证书。用户需自行安装客户端证书,一般用于网上银行。同时,强制缓存的优先级高于比较缓存。强制缓存(Expires/Cache-Control)HTTP1.0中Expires的值是服务器返回资源的过期时间,所以需要使用HTTP1.1中的Cache-Control来比较缓存(Etag/If-None-MatchorLast-Modified/If-Modified-Since)缓存生效时,状态码为304,第一次请求时只返回headerEtag/If-None-Match(高优先级),服务端再次通过Etag告诉客户端资源的唯一标识,当客户端请求时,客户端通过If-None-Match告诉服务端资源缓存数据库中的资源标识,服务端进行校验比对。如果资源发生变化(资源标识符发生变化),则返回修改后的资源。200;如果资源没有被修改,则返回304。Last-Modified/If-Modified-Since当第一次请求时,服务器在响应请求时会通过Last-Modified告诉浏览器资源的最后修改时间。再次请求时,客户端通过If-Modified-Since发送资源的最后修改时间,服务端收到后进行校验比对。如果资源在这段时间之后被修改过,则返回修改后的资源,200;如果资源没有被修改,返回304。cnblog解释个人理解:客户端缓存数据库中的资源有Expires时间,Cache-Control时间间隔,If-None-Match资源标识或者标识时间的If-Modified-Since。浏览器在请求对应的资源时,分别判断资源的各个标识,使用缓存资源或者发送对应的http头信息给服务器进行校验。http如何恢复HTTP1.1开始支持获取文件的部分内容,通过字段Range和Content-Range来实现。Range在请求头中用来指定第一个字节和最后一个字节的位置。服务器会在Content-Range头中返回当前发送数据的范围和文件总大小。但是有可能在断点恢复的过程中,资源被修改了,需要判断资源是否发生变化。这是通过Etag资源标识来完成的,每个资源Etag的值都是通过MD5计算出来的。此外,还可以通过MD5校验消息的完整性。服务器预先提供一个MD5校验和。用户下载完所有文件后,使用MD5算法计算下载文件的MD5校验和,然后检查两个校验和是否一致,判断下载文件是否有误。get和postW3schoolget之间的区别可以缓存并保存在浏览器历史记录中。可以为获取请求添加书签。处理敏感数据时不应使用Get请求。get请求在url中发送,post请求在http消息体中发送。.get请求的长度有限制(url的限制),post请求对数据长度没有要求。get只能是url编码的。获取参数将显示在url中。返回并刷新,帖子将被重新提交。对URL的多次请求应返回相同的结果。资源的增删改查实际上可以通过GET/POST来完成,不需要PUT和DELETEWeb安全主动攻击:1)SQL注入攻击方式:在提交的表单或查询的URL中插入SQL命令用于诱骗服务器执行恶意SQL命令的字符串;解决方案:验证用户输入,无管理员权限连接数据库,加密存储机密信息;2)操作系统命令注入攻击(利用web应用漏洞);被动攻击:1)跨站脚本攻击XSS方式:在正规网站的URL查询字段添加脚本标签,使客户端在浏览正规网站的同时运行JS代码;解决方案:进行用户输入验证,先对写入页面的内容进行编码,将HTML和JS用合适的方法转义,并设置Set-Cookie为HttpOnly,则无法通过JS脚本读取cookie信息;2)跨站请求伪造(CSRF)方式:用户分别点击官网和黑客网站,黑客网站向官网服务器发送请求。该请求会携带用户本地浏览器的cookie,因此可以成功实现跨站请求伪造。解决方法:1)设置并验证HTTPReferer字段,保证请求源网站的合法性。2)设置令牌。CSDN博客3)HTTP头注入(攻击者在响应头字段插入换行符,添加任意响应头或正文),4)邮件头注入攻击其他攻击:DoS攻击(拒绝服务攻击,发送大量请求到服务器,导致服务器资源过载)DDoS(分布式拒绝服务攻击,攻击者往往利用感染病毒的电脑作为攻击跳板)CSDN博客跨域跨域解决方案:CORS(Cross-OriginResourceSharing,跨域资源共享),IE8通过XDomainRequest对象支持CORS,其他浏览器通过XHR对象原生支持CORS。CORS跨域源码资源共享需要客户端和服务端的支持。其原理是让客户端通过自定义的HTTP头与服务器通信。目前各大浏览器都实现了对CORS的原生支持。即当跨域请求时,浏览器会自动在HTTP头中添加自定义字段,比如Origin头。也就是说,要实现CORS,需要在服务器端进行设置。服务器返回Access-Control-Allow-Origin字段。CORS请求分为简单请求和非简单请求(多一个http请求)。默认情况下,CORS跨域请求不携带cookie。如果需要cookie,需要设置Access-Control-Allow-Cendentials:true。优点:支持所有HTTP请求。缺点:不兼容旧浏览器。阮一峰的CORSJSONP(JSONwithpadding)原理:利用script标签没有跨域限制的特点,客户端将script脚本的src设置为服务端的请求地址。服务端会返回一段js代码,在本地执行,如:callback({"name":"Nicholas"});,一个函数,有一个参数,就是需要请求的json数据。这个函数名是服务端根据客户端发送的数据动态设置的(原理是字符串拼接)。而这个函数会提前在本地声明如何处理json数据。优点:使用方便,支持浏览器和服务器的双向通信,无浏览器兼容性问题;缺点:不安全,因为JSONP加载其他域的代码执行;难以判断请求是否失败;只支持GET请求;传输格式是字符串,不是json格式;网上解释的其他方法:比如html5中的postMessage方法、window.name、document.domain更多博客:https://github.com/Lmagic16/b...
