网络协议:javascript
计算机之间为了实现网络通讯而达成的一种“约定”或者”规则“,有这种约定不一样厂商的生产设备,以及不一样操做系统组成的计算机之间,就能够实现通讯
网卡MAC码:html
全球唯一的一个固定组织来分配的,未经认证和受权的厂家无权生产网卡。 每块网卡都有一个固定的卡号,而且任何正规厂家生产的网卡上都直接标明了卡号. 通常为一组12位的16进制数。其中前6位表明网卡的生产厂商。后面的位数是设备号。
OSI体系结构:应用层,表示层,会话层,传输层,网络层,数据链路层,物理层. TCP/IP体系结构:应用层,传输层,网络层,数据链路层,物理层. TCP/IP体系: 应用层:DHCP,HTTP,HTTPS,RTMP,P2P,DNS,GTP,RPC 传输层:UDP,TCP 网络层:ICMP,IP,OSPF,BGP,IPSec,GRE 链路层:ARP,VLAN,STP 物理层:网络跳线.
DNS解析(将域名解析成IP地址)-->TCP连接(TCP三次握手)-->发送HTTP请求,-->服务器处理请求并返回HTTP报文-->浏览器解析渲染页面-->断开链接(TCP四次挥手).java
URL:统一资源定位符 scheme://host.domain:port/path/filename 协议 服务器域名/ip 服务器端口 资源路径 查询参数 Http:// www.baidu.com: 8080 /ncdcd/uc ?\_page=home&\_redirect=1#/home scheme:定义因特网服务类型,常见的协议:http,https,ftp,file. host:定义域名主机,http的默认主机是www. domain: 定义因特网域名,如:baidu.com port: 定义主机上的端口号,如http默认端口号是80 path:定义服务器上的路径. filename:定义文档/资源的名称. 查询参数: ? 保留字,标识查询字符串的开始. search=ruby 参数的键/值对 & 保留字 给查询字符串添加参数时使用 results=10 参数的键/值对 查询字符串有最大长度,查询字符串中使用的键/值对儿是显示在 URL 上的。 查询字符串中没法使用空格和特殊字符好比`&`它们必须用 URL 编码代替
DNS 是一个分布式数据库,把像http://www.google.com这样的域名翻译成 IP 地址,并将请求映射到远程服务器. DNS 服务器集群是分层级的,没有任何一个单一的 DNS 服务器中包含全部数据。若是一个 DNS 服务器里没有一个请求须要的域名,这个 DNS 服务器就会把请求转发给这个集群上更上一层节点的 DNS 服务器。最终,这个域名会在某个 DNS 服务器上的数据库里被发现,而后它对应的 IP 地址所表明的设备就会来接受这个请求。 经过在浏览器地址栏里敲 IP 地址也能访问网站。
整体来讲,https属于混合加密,使用非对称秘钥加密密文通讯的对称秘钥,使用对称秘钥进行密文通讯,保证了通讯的效率。 首先客户端经过URL访问服务器创建SSL链接。 服务端收到客户端请求后,会将网站支持的证书信息(证书中包含公钥)传送一份给客户端。 客户端的服务器开始协商SSL链接的安全等级,也就是信息加密的等级。客户端的浏览器根据双方赞成的安全等级,创建会话密钥,而后利用网站的公钥将会话密钥加密,并传送给网站。 服务器利用本身的私钥解密出会话密钥。服务器利用会话密钥加密与客户端之间的通讯。
先由客户端(浏览器)发送一个请求到服务器.服务器发送请求数据到客户端,客户端发送信息服务端.
TCP三次握手以后,开始发生HTTP请求报文,请求报文由请求行,请求头.请求体组成.
略
HTML与CSS同时解析生成HTML结构树和CSS结构树,两树合合并成渲染树,渲染树计算好信息,绘制页面.
当数据传送完毕,须要断开TCP连接,发送四次挥手.
好比分析 HTTPS,我会用 Wireshark 从创建 TCP 链接时就开始抓包,从二进制最底层来分析里面的 Record、Cipher Suite、Extension,讲 ECDHE、AES、SHA384,再画出详细的流程图,作到“尽收眼底”。
在互联网世界里,HTTP 一般跑在 TCP/IP 协议栈之上,依靠 IP 协议实现寻址和路由、TCP协议实现可靠数据传输、DNS 协议实现域名查找、SSL/TLS 协议实现安全通讯。此外,还有一些协议依赖于 HTTP,例如 WebSocket、HTTPDNS 等。这些协议相互交织,构成了一个协议网,而 HTTP 则处于中心地位。
HTTP历史:git
1. HTTP 协议始于三十年前蒂姆·伯纳斯 - 李的一篇论文; 2. HTTP/0.9 是个简单的文本协议,只能获取文本资源; 3. HTTP/1.0 确立了大部分如今使用的技术,但它不是正式标准; 4. HTTP/1.1 是目前互联网上使用最普遍的协议,功能也很是完善; 5. HTTP/2 基于 Google 的 SPDY 协议,注重性能改善,但还未普及; 6. HTTP/3 基于 Google 的 QUIC 协议,是未来的发展方向。
HTTP协议:github
超文本传输协议,从客户端发出请求到服务器并等待响应。 关于协议:HTTP 是一个用在计算机世界里的协议。它使用计算机可以理解的语言确立了一种计算机之间交流通讯的规范,以及相关的各类控制和错误处理方式。 关于传输:HTTP 是一个在计算机世界里专门用来在两点之间传输数据的约定和规范。 关于超文本:所谓“超文本”,就是“超越了普通文本的文本”,它是文字、图片、音频和视频等的混合体,最关键的是含有“超连接”,可以从一个“超文本”跳跃到另外一个“超文本”,造成复杂的非线性、网状的结构关系。 无状态协议.使开发去模拟web应用有状态的体验.两点不局限在浏览器到服务器,也能够是服务器到服务器,既把服务器作客户端. HTTP/1.1版本=HTTP+SSL/TLS,经过 SSL证书来验证服务器的身份,并为浏览器和服务器之间的通讯进行加密。
HTTP 是一个在计算机世界里专门在两点之间传输文字、图片、音频、视频等超文本数据的约定和规范”。web
HTTP原理:算法
基于TCP/IP通讯协议来传递数据的协议,传输的数据类型为HTML文件,、图片文件, 查询结果等.
HTTP特色:数据库
支持客户端/服务端模式,也是一种请求/响应模式的协议. 简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法经常使用的有GET、HEAD、POST。 灵活:HTTP容许传输任意类型的数据对象。传输的类型由Content-Type加以标记。 无状态:无状态是指协议对于事务处理没有记忆,后续处理须要前面的信息,则必须重传(浏览器cookie能够解决这个问题)。
HTTP缺点:跨域
请求信息明文传输,容易被窃听截取. 数据的完整性未校验,容易被篡改. 没有验证对方身份,存在冒充危险。
HTTPS:浏览器
在HTTP的基础上增长SSL/TLS协议安全协议,这些协议由加密算法和哈希算法组成。TLS协议是在SSL的基础上发展起来的更安全的协议.
HTTPS缺点:
HTTPS协议加密中屡次握手,致使页面的加载时间延长近50%; HTTPS链接缓存不如HTTP高效,会增长数据开销和功耗; 申请SSL证书须要钱,功能越强大的证书费用越高。SSL涉及到的安全算法会消耗 CPU 资源,对服务器资源消耗较大。
HTTP和HTTPS的区别:
HTTPS是HTTP协议的安全版本,HTTP协议的数据传输是明文的,是不安全的, HTTPS使用了SSL/TLS协议进行了加密处理。默认端口不同,http是80,https是443。 https协议须要到CA申请证书,通常须要花钱获取,http不须要。
SSL
SSL 的全称是“Secure Socket Layer”,由网景公司发明,当发展到 3.0 时被标准化,更名为 TLS,即“Transport Layer Security”,但因为历史的缘由仍是有不少人称之为SSL/TLS,或者直接简称为 SSL。 SSL 使用了许多密码学最早进的研究成果,综合了对称加密、非对称加密、摘要算法、数字签名、数字证书等技术,可以在不安全的环境中为通讯的双方建立出一个秘密的、安全的传输通道,为 HTTP 套上一副坚固的盔甲。
HTTP报文组成:
请求报文构成:请求行:包括请求方法、URL、协议/版本 。请求头(Request Header)。请求正文 响应报文构成:状态行 响应头 响应正文 常见响应头字段: User-Agent:告知服务器客户端的相关信息,好比浏览器的类型、版本等。 Accept-Encoding:告知服务器,客户端支持的压缩格式。 Cookie: 通常都是经过Cookie信息头封装在请求的信息头部分。 Content-Type:用来告知服务器,所发送的请求主体的数据类型(数据组织格式)。若是是POST方法,则建议必定指定该信息头。
GET:获取资源,请求指定的页面信息,并返回实体主体。 POST:向服务器建立资源,提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会致使新的资源的创建,或者对已有资源的修改。 HEAD:相似于get请求,只不过返回的响应中没有具体的内容,只获取报头。 PUT:从客户端向服务器传送的数据取代指定的文档的内容。 DELETE:请求服务器删除指定的资源。
请求头部提供更多关于服务器和要获取的资源的信息。一些有用的请求头部是:
字段名 | 描述 | 举例 |
---|---|---|
Host | 服务器域名 | Host:www.reddit.com |
Accept-Language | 可接受的语言 | Accept-Language: en-US,en;q=0.8 |
User-Agent | 一个标识客户端的字符串 | User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/38.0.2125.101 Safari/537.36 |
Connection | 客户端链接的类型 | Connection: keep-alive |
服务器返回的原始数据就是所谓的响应
状态码+响应头部
访问一个网页时,浏览器会向web服务器发出请求。此网页所在的服务器会返回一个包含HTTP状态码的信息头用以响应浏览器的请求。
状态码分类:
1XX- 信息型,服务器收到请求,须要请求者继续操做。 2XX- 成功型,请求成功收到,理解并处理。 3XX – 重定向,须要进一步的操做以完成请求。 4XX – 客户端错误,请求包含语法错误或没法完成请求。 5XX – 服务器错误,服务器在处理请求的过程当中发生了错误。
常见状态码:
200 OK – 客户端请求成功 301 – 资源(网页等)被永久转移到其它URL 302 – 临时跳转 400 Bad Request – 客户端请求有语法错误,不能被服务器所理解 401 Unauthorized – 请求未经受权,这个状态代码必须和WWW-Authenticate报头域一块儿使用 404 – 请求资源不存在,多是输入了错误的URL 500 – 服务器内部发生了不可预期的错误 503 Server Unavailable – 服务器当前不能处理客户端的请求,一段时间后可能恢复正常。
头部名称 | 描述 | 举例 |
---|---|---|
Content-Encoding | 数据的编码类型 | Content-Encoding: gzip |
Server | 服务器的名称 | Server:thin 1.5.0 codename Knife |
Location | 通知客户端新的资源位置 | Location: http://www.github.com/login |
Content-Type | 响应数据的类型 | Content-Type:text/html; charset=UTF-8 |
HTTP 协议是无状态的。换句话说,在你的各次请求之间,服务器是不会保留你的 “状态” 信息。
每一次请求都被认为是一次全新的请求,不一样的请求之间并不知道对方的存在.这种” 无状态性 “使得 HTTP 和互联网都是 “去中心化” 的,不会轻易被人掌控。 但也是由于这种属性,使得 web 开发者在开发有状态的 web 应用时十分的困难。主要技术手段有session(会话),Cookies,异步javascript调用(AJAX).
AJAX 请求就像是普通请求:发送到服务器的请求依然跟普通请求同样有着一个 HTTP 请求该有的全部组成部分,而且服务器处理 AJAX 请求的方法跟处理普通请求也是同样的。惟一不一样就是,不是经过浏览器刷新来处理响应,而一般由客户端的一些 javascript 代码来处理。
它容许来自同一站点的资源进行互相访问而不受限制,可是会阻止其余不一样站点对文档/资源的访问。换句话说它能够阻止另外一个站点经过脚原本操纵本站点的文档。同源的文档必须有相同的协议,主机名和端口号。举个例子, 同源策略涉及的是访问文件内容,而不是连接,你能够随意连接到任何 URL。
CORS 是一种机制,容许咱们绕过同源策略,从一个域名向另外一个域名的资源发起请求。CORS 的原理是添加新的 HTTP 头部,来对一些域名受权,那这些域名就能够发起对本页面资源的请求。
会话在维持 HTTP 的状态上扮演着重要的角色。咱们也知道会话 id 做为一个惟一的令牌来惟一标识一个会话。一般,会话 id 是做为 cookie 存储在计算机上的一个随机字符串. 会话 id 随着每个到服务器的请求被送往服务器用于惟一标识这个会话。 攻击者拿到了这个会话 id ,他就会跟用户共享这一个会话,同时也就能访问这个 web 应用了。
会话劫持的对策
* 一个比较流行的会话劫持防范措施是重置会话。也就是对于一个用户认证系统来讲,一次成功的登陆包括验证旧的会话 id 和生成一个新的会话 id 。完成此步骤后,在下一个请求里,会要求受害者进行身份验证。而后会话 id 就会改变,这样攻击者就没法访问到这个会话了。不少网站都采起这种办法,当用户在进行敏感操做的时候保证用户身份的正确性,好比给信用卡充值或者删除帐户的时候。 * 另外一个颇有用的方法是给会话设置过时时间。那些不会过时的会话给了攻击者太多的时间去假装成一个合法用户。若是设置了过时时间,好比 30 分钟,这样一来攻击者就不会那么从容的进行攻击了。 * 最后,其实咱们已经讲过了,另外一个办法就是整站使用 HTTPS 把攻击者能获得会话 id 的可能性降至最低。
当你容许用户输入的 HTML 和 javascript 在你本身的网站上直接显示的时候,就有可能遭受这种攻击。如输入评论.
* 阻止此类攻击的一个办法就是老是对用户输入的内容作无害处理。消除有问题的输入,好比\`\`标签,或者使用一个更安全的输入格式,好比 Markdown,这样就能够阻止 HTML 和 javascript 同时出如今用户的输入里。 * 第二个办法就是在显示以前转义用户输入的全部数据.若是你须要用户可以输入 HTML 和 javascript 代码,那么当你显示这些输入内容的时候要确保它们被正确转义,这样浏览器就不会把它们当作代码给执行了。
`
HTTP使用统一资源标识符URI来传输数据和创建链接。URI: 统一资源标识符。URL: 统一资源定位符。 URI 是用来标示一个具体的资源,咱们能够经过 URI 知道一个资源是什么,是一个抽象的相对概念。 URL 则是用来定位具体的资源的,标示了一个具体的资源位置。属于URI的一个子集,算是URI在的具体实现方式互联网上的每一个文件都有一个惟一的URL。
都包含请求头请求行,post多了请求body。 get多用来查询,请求参数放在url中,不会对服务器上的内容产生做用。post用来提交,如把帐号密码放入body中。 GET是直接添加到URL后面的,直接就能够在URL中看到内容,而POST是放在报文内部的,用户没法直接看到。 GET提交的数据长度是有限制的,由于URL长度有限制,具体的长度限制视浏览器而定。而POST没有。 安全性(幂等性),安全的方法属于幂等的,get屡次请求,服务端状态不会改变,属于幂等,POST执行屡次,每次都会改变服务端状态,不具有幂等性。