前端知识总结——http知识

一.http协议主要特点:

(1)简单快速

(2)灵活

(3)无状态

(4)无链接

二.http状态码:

1xx(指示信息):表示请求已接收,继续处理;

2xx(请求成功):表示请求已被成功接收; 200、204(没有资源可返回)、206

3xx(重定向):完成请求,必须进行更进一步操作; 301(永久重定向)、302(资源被临时移动)、303(客户端应采用get方法获取资源)、304(对客户端有缓存情况下服务端的一种响应)

4xx(客户端错误):请求有语法错误或者请求无法实现;400(请求报文中存在语法错误)、401(需要认证)、403(请求资源的访问服务器拒绝了)、404(服务器未找到请求的资源)

5xx(服务端错误):服务器处理请求错误 500(服务器本身发生错误)、503(服务器处于超服务或停机维护,现在无法处理请求)

三.web服务器:Apache、IIS服务器等

客户端请求消息:请求行(request line)、请求头部(header)、空行和请求数据

服务器响应消息:状态行、消息报头、空行和响应正文

四.http请求方法:

GET,POST,HEAD和OPTIONS,PUT,DELETE,TRACE,CONNECT

两种最常被用到的方法是:GET 和 POST

1.GET - 从指定的资源请求数据:

有关 GET 请求的其他一些注释:
GET 请求可被缓存
GET 请求保留在浏览器历史记录中
GET 请求可被收藏为书签
GET 请求不应在处理敏感数据时使用
GET 请求有长度限制
GET 请求只应当用于取回数据

2.POST - 向指定的资源提交要被处理的数据:

有关 POST 请求的其他一些注释:
POST 请求不会被缓存
POST 请求不会保留在浏览器历史记录中
POST 不能被收藏为书签
POST 请求对数据长度没有要求

五.http缓存:

(1)强制缓存:

是否缓存Expires(一般没用了http1.0知识)、Cache-Control(常见取值六个:private默认、public、max-age=xxx、no-cache、no-store)
对于强制缓存,服务器通知浏览器一个缓存时间,在缓存时间内,下次请求,直接用缓存,不在时间内,执行比较缓存策略。

(2)协商缓存:

对于协商缓存,将缓存信息中的Etag和Last-Modified通过请求发送给服务器,由服务器校验,返回304状态码时,浏览器直接使用缓存。

六.跨域----跨域资源共享(CORS):

(1)当一个资源从与该资源本身所在的服务器不同的域或端口请求一个资源时,资源会发起一个跨域 HTTP 请求基于JavaScript的安全,JavaScript同源策略要求一个网站不能调用其它网站的js对象。

(2)构成跨域的条件就是一个页面的URL协议、域名、端口与另一个页面的URL只要有一个不同就构成了跨域请求

(3)解决跨域请求的三种方式:

1.JSONP:
在html中:

在服务器端设置代码:

router.get("/userlist", function (req, res, next) {
  			 var callback=req.query["callback"];
   			 var user = {name: 'Mr.Cao', gender: 'male', career: 'IT Education'};
   			 res.write(callback+"("+ JSON.stringify(user)+")");
   			 res.end();
		});

此方法优缺点:

缺点:a.这种方式无法发送post请求

优点
a.使用比较方便
b.很多大型的网站也是采用这种方式

2.在服务器端设置同源策略地址:

在响应头上添加Access-Control-Allow-Origin属性,指定同源策略的地址。同源策略默认地址是网页的本身

示例代码:

router.get("/userlist", function (req, res, next) { 
 			 var user = {name: 'Mr.Cao', gender: 'male', career: 'IT Education'};
   			 res.writeHeader(200,{"Access-Control-Allow-Origin":'http://localhost:63342'});
   			 res.write(JSON.stringify(user));
   			 res.end();
			});

此方法缺点:目前IE浏览器的老版本还不支持

3.H5新特性postMessage:

<script>
	function  run(){
		 var frm=document.getElementById("frm");
		 frm.contentWindow.postMessage("跨域","http://localhost:3018");
		 }
</script>

(4)注意点:

第一:如果是协议和端口造成的跨域问题“前台”是无能为力的;

第二:在跨域问题上,域仅仅是通过“URL的首部”来识别而不会根据域名对应的IP地址是否相同来判断。
“URL的首部”可以理解为“协议, 域名 和 端口 必须匹配”。

(5)跨域并不一定是浏览器限制了发起跨站请求,也可能是跨站请求可以正常发起,但是返回结果被浏览器拦截了

例子:CSRF 跨站攻击原理,请求是发送到了后端服务器无论是否跨域。

跨域资源共享( CORS )机制允许 Web 应用服务器进行跨域访问控制,从而使跨域数据传输得以安全进行。

浏览器支持在 API 容器中(例如 XMLHttpRequest 或 Fetch )使用 CORS,以降低跨域 HTTP 请求所带来的风险

(6)Web安全中两种典型的WEB攻击:

  1. XSS攻击:
    1.1.定义:它是通过对网页注入可执行代码且成功地被浏览器执行,达到攻击的目的,形成了一次有效XSS攻击,一旦攻击成功,它可以获取用户的联系人列表,然后向联系人发送虚假诈骗信息,可以删除用户的日志等等,有时候还和其他攻击方式同时实 施比如SQL注入攻击服务器和数据库、Click劫持、相对链接劫持等实施钓鱼,它带来的危害是巨大的,是web安全的头号大敌
    1.2.实施XSS攻击需要具备两个条件:
    1.2.1 需要向web页面注入恶意代码;
    1.2.2 这些恶意代码能够被浏览器成功的执行
    1.3 根据XSS攻击的效果几种类型:
    1.3.1 XSS反射型攻击,恶意代码并没有保存在目标网站,通过引诱用户点击一个链接到目标网站的恶意链接来实施攻击的
    1.3.2 XSS存储型攻击,恶意代码被保存到目标网站的服务器中,这种攻击具有较强的稳定性和持久性,比较常见场景是在博客,论坛等社交网站上,但OA系统,和CRM系统上也能看到它身影
    1.4 XSS攻击能做些什么:
    1.4.1 窃取cookies,读取目标网站的cookie发送到黑客的服务器上
    1.4.2 读取用户未公开的资料,如果:邮件列表或者内容、系统的客户资料,联系人列表等等
    1.5解决方法:
    1.5.1 在表单提交或者url参数传递前,对需要的参数进行过滤
    1.5.2 过滤用户输入的 检查用户输入的内容中是否有非法内容。如<>(尖括号)、”(引号)、 ‘(单引号)、%(百分比符号)、;(分号)、()(括号)、&(& 符号)、+(加号)等。严格控制输出

  2. CSRF跨站点请求伪造(Cross—Site Request Forgery)跨站攻击:
    1.1.定义:攻击者盗用了你的身份,以你的名义发送恶意请求,对服务器来说这个请求是完全合法的,但是却完成了攻击者所期望的一个操作,
    比如以你的名义发送邮件、发消息,盗取你的账号,添加系统管理员,甚至于购买商品、虚拟货币转账等。
    如下:其中Web A为存在CSRF漏洞的网站,Web B为攻击者构建的恶意网站,User C为Web A网站的合法用户
    1.2.CSRF攻击攻击原理及过程如下:
    1.2.1 用户C打开浏览器,访问受信任网站A,输入用户名和密码请求登录网站A;
    1.2.2 在用户信息通过验证后,网站A产生Cookie信息并返回给浏览器,此时用户登录网站A成功,可以正常发送请求到网站A;
    1.2.3 用户未退出网站A之前,在同一浏览器中,打开一个TAB页访问网站B;
    1.2.4 网站B接收到用户请求后,返回一些攻击性代码,并发出一个请求要求访问第三方站点A;
    1.2.5 浏览器在接收到这些攻击性代码后,根据网站B的请求,在用户不知情的情况下携带Cookie信息,向网站A发出请求。
    网站A并不知道该请求其实是由B发起的,所以会根据用户C的Cookie信息以C的权限处理该请求,导致来自网站B的恶意代码被执行。
    1.3 CSRF漏洞检测:
    1.3.1 最简单的方法就是抓取一个正常请求的数据包,去掉Referer字段后再重新提交,如果该提交还有效,那么基本上可以确定存在CSRF漏洞
    1.3.2 门针对CSRF漏洞进行检测的工具,如CSRFTester,CSRF Request Builder等
    1.4 防御CSRF攻击:
    1.4.1 验证 HTTP Referer 字段;
    1.4.2 在请求地址中添加 token 并验证;
    1.4.3 在 HTTP 头中自定义属性并验证

七.三次握手:

目的是使数据包的发送和接收同步,经过三次“对话”之后,主机A才向主机B正式发送数据

位码即tcp标志位,有6种标示:

	SYN(synchronous建立联机)      ACK(acknowledgement 确认)        PSH(push传送)        
	FIN(finish结束) 		RST(reset重置)       		 URG(urgent紧急)

第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;

第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;

第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。 完成三次握手,客户端与服务器开始传送数据.

八.四次断开:

第一次挥手: 客户端A发送一个FIN.用来关闭客户A到服务器B的数据传送

第二次挥手: 服务器B收到这个FIN. 它发回一个ACK,确认序号为收到的序号+1。和SYN一样,一个FIN将占用一个序号

第三次挥手: 服务器B关闭与客户端A的连接,发送一个FIN给客户端A

第四次挥手: 客户端A发回ACK报文确认,并将确认序号设置为序号加1

九.线程和进程区别:

(1)进程概念:进程是表示资源分配的基本单位,又是调度运行的基本单位。

例如,用户运行自己的程序,系统就创建一个进程,并为它分配资源,包括各种表格、内存空间、磁盘空间、I/O设备等。然后,把该进程放人进程的就绪队列。

进程调度程序选中它,为它分配CPU以及其它有关资源,该进程才真正运行。所以,进程是系统中的并发执行的单位

在Mac、Windows NT等采用微内核结构的操作系统中,进程的功能发生了变化:它只是资源分配的单位,而不再是调度运行的单位。

在微内核系统中,真正调度运行的基本单位是线程。因此,实现并发功能的单位是线程。

(2)线程概念:线程是进程中执行运算的最小单位,亦即执行处理机调度的基本单位。如果把进程理解为在逻辑上操作系统所完成的任务,那么线程表示完成该任务的许多可能的子任务之一

(3)引入线程的好处:

a.易于调度。

b.提高并发性。通过线程可方便有效地实现并发性。进程可创建多个线程来执行同一程序的不同部分。

c.开销少。创建线程比创建进程要快,所需开销很少

d.利于充分发挥多处理器的功能。通过创建多线程进程(即一个进程可具有两个或更多个线程),每个线程在一个处理器上运行,从而实现应用程序的并发性,使每个处理器都得到充分运行。

(4)进程和线程的关系:

a.一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程。线程是操作系统可识别的最小执行和调度单位。

b.资源分配给进程,同一进程的所有线程共享该进程的所有资源。 同一进程中的多个线程共享代码段(代码和常量),数据段(全局变量和静态变量),扩展段(堆存储)。

但是每个线程拥有自己的栈段,栈段又叫运行时段,用来存放所有局部变量和临时变量。

c.处理机分给线程,即真正在处理机上运行的是线程。

d.线程在执行过程中,需要协作同步。不同进程的线程间要利用消息通信的办法实现同步。

(5)线程与进程的比较:

a.调度

在传统的操作系统中,拥有资源的基本单位和独立调度、分派的基本单位都是进程。而在引入线程的操作系统中,则把线程作为调度和分派的基本单位。

而把进程作 为资源拥有的基本单位,使传统进程的两个属性分开,线程便能轻装运行,从而可显著地提高系统的并发程度。

在同一进程中,线程的切换不会引起进程的切换,在 由一个进程中的线程切换到另一个进程中的线程时,将会引起进程的切换。

b.并发性

在引入线程的操作系统中,不仅进程之间可以并发执行,而且在一个进程中的多个线程之间,亦可并发执行,因而使操作系统具有更好的并发性,从而能更有效地使 用系统资源和提高系统吞吐量。

例如,在一个未引入线程的单CPU操作系统中,若仅设置一个文件服务进程,当它由于某种原因而被阻塞时,便没有其它的文件服 务进程来提供服务。

在引入了线程的操作系统中,可以在一个文件服务进程中,设置多个服务线程,当第一个线程等待时,文件服务进程中的第二个线程可以继续运 行;当第二个线程阻塞时,第三个线程可以继续执行,从而显著地提高了文件服务的质量以及系统吞吐量。

c.拥有资源

不论是传统的操作系统,还是设有线程的操作系统,进程都是拥有资源的一个独立单位,它可以拥有自己的资源。一般地说,线程自己不拥有系统资源(也有一点必 不可少的资源),但它可以访问其隶属进程的资源。

亦即,一个进程的代码段、数据段以及系统资源,如已打开的文件、I/O设备等,可供问一进程的其它所有线 程共享。

d.系统开销

由于在创建或撤消进程时,系统都要为之分配或回收资源,如内存空间、I/o设备等。因此,操作系统所付出的开销将显著地大于在创建或撤消线程时的开销。

类似地,在进行进程切换时,涉及到整个当前进程CPU环境的保存以及新被调度运行的进程的CPU环境的设置。而线程切换只须保存和设置少量寄存器的内容,并 不涉及存储器管理方面的操作。

可见,进程切换的开销也远大于线程切换的开销。此外,由于同一进程中的多个线程具有相同的地址空间,致使它们之间的同步和通信的实现,也变得比较容易。在有的系统中,线程的切换、同步和通信都无须

十.OSI(Open System Interconnect)开放式系统互联:

第一层:物理层(EIA/TIA RS-232、EIA/TIA RS-449、V.35、RJ-45)以二进制数据形式在物理媒体上传输数据

第二层:数据链路层(SDLC、HDLC、PPP、STP、帧中继) 传输有地址的帧、错误检测功能

第三层:网络层(IP、IPX、RIP、OSPF) 为数据包选择路由

第四层:(处理信息的)传输层(TCP、UDP、SPX) 提供端对端的接口

第五层:会话层(没有协议) 解除或建立与其他接点的联系(服务器验证用户登录便是由会话层完成)

第六层:表示层(没有协议) 数据格式化、代码转化、数据加密、数据的压缩和解压缩

第七层:应用层(Telnet、FTP、HTTP、SNMP、DNS、TFTP)文件传输、电子邮件、文件服务、虚拟终端

十一.TCP和UDP协议:

(1)TCP协议:传输控制协议 是面向连接的协议,在收发数据前,必须和对方建立可靠的连接。

TCP使用面向连接的通信方式,大大提高了数据通信的可靠性,使发送数据端和接收端在数据正式传输前就有了交互,为数据正式传输打下了可靠的基础

(2)各鐘碼:

a. ACK: TCP报头的控制位之一,对数据进行确认.确认由目的端发出,用它来告诉发送端这个序列号之前的数据段都收到了

比如,确认号为X,则表示前X-1个数据段都收到了,只有当ACK=1时,确认号才有效,当ACK=0时,确认号无效,这时会要求重传数据,保证数据的完整性

b. SYN 同步序列号,TCP建立连接时将这个位置1

c. FIN 发送端完成发送任务位,当TCP完成数据传输需要断开时,提出断开连接的一方将这位置1

(3)UDP:用户数据报协议,不与对方建立连接,而是直接就把数据包发送过去

a. UDP是一个非连接的协议,传输数据之前源端和终端不建立连接,当它想传送时就简单地去抓取来自应用程序的数据,并尽可能快地把它扔到网络上。

在发送端,UDP传送数据的速度仅仅是受应用程序生成数据的速度、计算机的能力和传输带宽的限制;在接收端,UDP把每个消息段放在队列中,应用程序每次从队列中读一个消息段。

b. 由于传输数据不建立连接,因此也就不需要维护连接状态,包括收发状态等,因此一台服务机可同时向多个客户机传输相同的消息。

c. UDP信息包的标题很短,只有8个字节,相对于TCP的20个字节信息包的额外开销很小。

d. 吞吐量不受拥挤控制算法的调节,只受应用软件生成数据的速率、传输带宽、源端和终端主机性能的限制。

e. UDP使用尽最大努力交付,即不保证可靠交付,因此主机不需要维持复杂的链接状态表(这里面有许多参数)。

f. UDP是面向报文的。发送方的UDP对应用程序交下来的报文,在添加首部后就向下交付给IP层。既不拆分,也不合并,而是保留这些报文的边界,因此,应用程序需要选择合适的报文大小

(4)使用“ping”命令来测试两台主机之间TCP/IP通信是否正常,其实“ping”命令的原理就是向对方主机发送UDP数据包,然后对方主机确认收到数据包,如果数据包是否到达的消息及时反馈回来,那么网络就是通的

(5)小结TCP与UDP的区别:

a. 基于连接与无连接;

b. 对系统资源的要求(TCP较多,UDP少);

c. UDP程序结构较简单;

d. 流模式与数据报模式 ;

e. TCP保证数据正确性,UDP可能丢包,TCP保证数据顺序,UDP不保证

十二.客户端在使用HTTPS方式与Web服务器通信时有以下几个步骤:

(1)客户使用https的URL访问Web服务器,要求与Web服务器建立SSL连接。
(2)Web服务器收到客户端请求后,会将网站的证书信息(证书中包含公钥)传送一份给客户端。
(3)客户端的浏览器与Web服务器开始协商SSL连接的安全等级,也就是信息加密的等级。
(4)客户端的浏览器根据双方同意的安全等级,建立会话密钥,然后利用网站的公钥将会话密钥加密,并传送给网站。
(5)Web服务器利用自己的私钥解密出会话密钥。
(6)Web服务器利用会话密钥加密与客户端之间的通信

十三.Https的优缺点:

1.HTTPS:

是以安全为目标的HTTP通道,简单讲是HTTP的安全版,即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。
HTTPS协议的主要作用可以分为两种:一种是建立一个信息安全通道,来保证数据传输的安全;另一种就是确认网站的真实性。

2.HTTPS的优点:

(1)使用HTTPS协议可认证用户和服务器,确保数据发送到正确的客户机和服务器;
(2)HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全,可防止数据在传输过程中不被窃取、改变,确保数据的完整性。
(3)HTTPS是现行架构下最安全的解决方案,虽然不是绝对安全,但它大幅增加了中间人攻击的成本。
(4)谷歌曾在2014年8月份调整搜索引擎算法,并称“比起同等HTTP网站,采用HTTPS加密的网站在搜索结果中的排名将会更高

3.HTTPS的缺点:

(1)HTTPS协议握手阶段比较费时,会使页面的加载时间延长近50%,增加10%到20%的耗电;
(2)HTTPS连接缓存不如HTTP高效,会增加数据开销和功耗,甚至已有的安全措施也会因此而受到影响;
(3)SSL证书需要钱,功能越强大的证书费用越高,个人网站、小网站没有必要一般不会用。
(4)SSL证书通常需要绑定IP,不能在同一IP上绑定多个域名,IPv4资源不可能支撑这个消耗。
(5)TTPS协议的加密范围也比较有限,在黑客攻击、拒绝服务攻击、服务器劫持等方面几乎起不到什么作用。
最关键的,SSL证书的信用链体系并不安全,特别是在某些国家可以控制CA根证书的情况下,中间人攻击一样可行

十四.HTTPS和HTTP的区别主要如下:

(1)https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。
(2)http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
(3)http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
(4)http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全

猜你喜欢

转载自blog.csdn.net/weixin_39676449/article/details/82864998