完整的HTTP报文由头部、空行、正文三部分组成。目前最广泛使用的是HTTP1.1。
Connection: keep-alive
开启长连接。长连接可以让客户端和服务器端之间的连接在一段时间内持续有效,当一个请求文件的传输连接建立后,服务器保持该连接的时间段内,其他文件请求可以复用这个已经建立好的连接。需要注意,长连接并不会节省传输内容的网络开销Connection: Upgrade
和Upgrade: websocket
来告诉服务器需要切换成WebSocket协议进行通信。如果服务器端支持,会在响应头中返回Upgrade和Connection,同时返回状态码101表示请求还需要完成协议的切换。HTTP2
说道HTTP2,必须先说SPDY协议,SPDY是一种基于HTTP的兼容协议,支持多路复用和服务器推送技术,压缩了HTTP头部减小了请求大小,但其强制使用SSL传输协议,即必须是HTTPS。HTTP2就是基于SPDY协议规范为基础,不强制使用SSL。
要防范XSS攻击,需要验证输入到页面上的所有内容是否安全。 <div>{{ content }}</div> 可以对content内容进行转义,防止存在alert等。 /** * HTML字符转义编码 */ function html_encode(str) { var s = ""; if (str.length == 0) return ""; s = str.replace(/&/g, ">"); s = s.replace(/</g, "<"); s = s.replace(/>/g, ">"); s = s.replace(/ /g, " "); s = s.replace(/\'/g, "'"); s = s.replace(/\"/g, """); s = s.replace(/\n/g, "<br>"); return s; } /** * HTML字符转义解码 */ function html_decode(str) { var s = ""; if (str.length == 0) return ""; s = str.replace(/>/g, "&"); s = s.replace(/</g, "<"); s = s.replace(/>/g, ">"); s = s.replace(/ /g, " "); s = s.replace(/'/g, "\'"); s = s.replace(/"/g, "\""); s = s.replace(/<br>/g, "\n"); return s; } 更巧妙的编码、解码 /** * HTML字符转义编码 */ function htmlencode(s){ var div = document.createElement('div'); div.appendChild(document.createTextNode(s)); return div.innerHTML; } /** * HTML字符转义解码 */ function htmldecode(s){ var div = document.createElement('div'); div.innerHTML = s; return div.innerText || div.textContent; } 上述HTML内容可以如下编写,防止被XSS攻击: <div>{{ html_encode(content) }}</div> <div>{{ htmlencode(content) }}</div>
网络请求劫持目前主要分为两种:DNS劫持和HTTP劫持。
DNS劫持
攻击者劫持DNS服务器,通过某种手段获得某域名的解析记录控制权,进而修改此域名的解析结果,返回给用户一个错误的DNS查询结果(IP),用户请求被导向了错误的IP指向的服务器,从而达到获取用户资料或者破坏原网站的正常服务的目的。
HTTP劫持
在用户浏览器与访问的目的服务器之间所建立的网络数据传输通道中从网关或防火墙层上监视特定数据信息,当满足一定条件时,就会在正常的数据包中插入或修改为攻击者设计的网络数据包,目的是让用户获得错误的数据或者弹出广告等其他内容。
HTTPS是通过加入SSL层来加密HTTP数据进行安全传输的HTTP协议。客户端和服务端都有公钥、私钥。
注意: HTTPS请求头可以增加upgrade-insecure-requests
,(服务器同样需要增加header("Content-Security-Policy: upgrade-insecure-requests")
)用于让页面打开的后续请求自动从HTTP请求升级到HTTPS请求。否则,HTTPS加载HTTP资源会产生Mixed Content类型错误,导致无法加载。
除了上述提及的HTTPS,浏览器还可以通过某些特定的head头配置进行很多安全控制。
有时需要客户端和服务端之间实时连接进行通信。可以通过Ajax定时向服务器轮询来持续获取消息,但是其效率过于低;当然也可以通过
目前最流行的URI方式:路径/版本/接口名,如path/v1/book
。
说明 | 方法 |
---|---|
获取 | Get |
新增 | Post |
删除 | Delete |
全量更新 | Put |
更新部分 | Dispatch |
随着HTML5的出现,越来越多的开发者将Web嵌入的Native应用中,Hybrid App(Native App和Web App结合)在牺牲一小部分性能的前提下,适应了更多的移动应用开发场景。