什么是正向代理和反向代理?

正向代理位于客户端和原始服务器之间,代表客户端向原始服务器发送请求。客户端向正向代理发出请求,然后由正向代理将请求转发到原始服务器,原始服务器将响应发送回正向代理,最后再传递给客户端。正向代理隐藏了真实的客户端,并且可以为客户端提供一些过滤、缓存等服务。常见的例子是科学上网时使用的代理服务器。

反向代理位于原始服务器和客户端之间,代表原始服务器向客户端提供服务。当客户端向原始服务器发出请求时,请求实际上是发送给了反向代理,反向代理负责将请求转发给相应的原始服务器,然后将原始服务器的响应返回给客户端。

最核心的不同在于代理的对象不同。正向代理是代理客户端。反向代理是代理服务器。也就是说:正向代理隐藏真实客户端,反向代理隐藏真实服务端。反向代理可以用来实现负载均衡、安全过滤、缓存等功能,同时隐藏了真实的原始服务器。许多大型网站和服务都会使用反向代理来处理用户的请求。

反向代理为什么叫反向代理:从我们用户的角度来看,代理我们发出请求的客户端被称为正向代理。而代理我们访问的服务器,则被称为反向代理。

OAuth授权登录的流程是怎样的?
  • 用户请求第三方应用授权
  • 用户点击授权链接跳转到认证服务器(Authorization Server)进行授权
  • 认证服务器验证用户身份后,会颁发一个授权码给第三方应用
  • 第三方应用拿到授权码后,使用授权码向认证服务器发送请求,请求获取Access Token
  • 认证服务器颁发Access Token给第三方应用
  • 第三方应用使用访问令牌向资源服务器(Resource Server)请求资源
  • 资源服务器验证Access Token
基于Token的JWT认证是怎样的?
  • 用户提供用户名和密码进行登录认证。
  • 服务器验证用户的身份,如果通过验证,则生成一个包含用户身份信息和其他元数据的JWT,并将其返回给客户端。
  • 客户端存储JWT:客户端通常会将收到的JWT存储在本地,例如在浏览器的 localStorage 或者客户端应用的内存中。
  • 发送JWT:在随后的请求中,客户端在请求头或者其他方式中发送JWT给服务器。
  • 验证JWT:服务器接收到JWT后,对其进行验证,包括检查签名、有效期等信息,并且获取其中的用户身份信息。
  • 授权访问:如果JWT验证通过,服务器允许用户访问受保护的资源或者执行特定操作。
JWT的组成是怎样的?

JWT的核心内容包括头部(Header)、载荷(Payload)和签名(Signature)。

Cookie的用途有哪些?

Session会话管理: 服务器会向客户端发送一个set-cookie的header,设置sessionid,每次请求该sessionid会发送到服务器,查询对应的session,从session里检索用户信息,从session里如购物车信息等等。

个性化显示:Cookie可用于记住有关用户偏好信息

用户跟踪,跟踪网页浏览习惯,cookie每次都会发送到服务器

7 apache和nginx的区别

nginx 相对 apache 的优点:

  • 轻量级,同样起web 服务,比apache 占用更少的内存及资源
  • 抗并发,nginx 处理请求是异步非阻塞的,支持更多的并发连接,而apache 则是阻塞型的,在高并发下nginx 能保持低资源低消耗高性能
  • 配置简洁
  • 高度模块化的设计,编写模块相对简单
  • 社区活跃

apache 相对nginx 的优点:

  • rewrite ,比nginx 的rewrite 强大
  • 模块超多,基本想到的都可以找到
  • 少bug ,nginx 的bug 相对较多
  • 超稳定

8 网站用户密码保存

  1. 明文保存
  2. 明文hash后保存,如md5
  3. MD5+Salt方式,这个salt可以随机
  4. 知乎使用了Bcrypy(好像)加密

10 XSRF和XSS

  • CSRF(Cross-site request forgery)跨站请求伪造
  • XSS(Cross Site Scripting)跨站脚本攻击

CSRF重点在请求,XSS重点在脚本

12 RESTful架构(SOAP,RPC)

推荐: http://www.ruanyifeng.com/blog/2011/09/restful.html

13 SOAP

SOAP(原为Simple Object Access Protocol的首字母缩写,即简单对象访问协议)是交换数据的一种协议规范,使用在计算机网络Web服务(web service)中,交换带结构信息。SOAP为了简化网页服务器(Web Server)从XML数据库中提取数据时,节省去格式化页面时间,以及不同应用程序之间按照HTTP通信协议,遵从XML格式执行资料互换,使其抽象于语言实现、平台和硬件。

14 RPC

RPC(Remote Procedure Call Protocol)——远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。在OSI网络通信模型中,RPC跨越了传输层和应用层。RPC使得开发包括网络分布式多程序在内的应用程序更加容易。

总结:服务提供的两大流派.传统意义以方法调用为导向通称RPC。为了企业SOA,若干厂商联合推出webservice,制定了wsdl接口定义,传输soap.当互联网时代,臃肿SOA被简化为http+xml/json.但是简化出现各种混乱。以资源为导向,任何操作无非是对资源的增删改查,于是统一的REST出现了.

进化的顺序: RPC -> SOAP -> RESTful

15 CGI和WSGI

CGI是通用网关接口,是连接web服务器和应用程序的接口,用户通过CGI来获取动态数据或文件等。 CGI程序是一个独立的程序,它可以用几乎所有语言来写,包括perl,c,lua,python等等。

WSGI, Web Server Gateway Interface,是Python应用程序或框架和Web服务器之间的一种接口,WSGI的其中一个目的就是让用户可以用统一的语言(Python)编写前后端。

官方说明:PEP-3333

16 中间人攻击

在GFW里屡见不鲜的,呵呵.

中间人攻击(Man-in-the-middle attack,通常缩写为MITM)是指攻击者与通讯的两端分别创建独立的联系,并交换其所收到的数据,使通讯的两端认为他们正在通过一个私密的连接与对方直接对话,但事实上整个会话都被攻击者完全控制。

17 c10k问题

所谓c10k问题,指的是服务器同时支持成千上万个客户端的问题,也就是concurrent 10 000 connection(这也是c10k这个名字的由来)。 推荐: https://my.oschina.net/xianggao/blog/664275

http://www.kegel.com/c10k.html

18 socket

推荐: http://www.360doc.com/content/11/0609/15/5482098_122692444.shtml

Socket=Ip address+ TCP/UDP + port

19 浏览器缓存

推荐: http://www.cnblogs.com/skynet/archive/2012/11/28/2792503.html

304 Not Modified

Expires是Web服务器响应消息头字段,限HTTP 1.0,HTTP 1.1没有作用

Cache-control策略(重点关注) max-age=300

Last-Modified/

Etag 当前资源在服务器的唯一标识

Last-Modified与ETag是可以一起使用的,服务器会优先验证ETag,一致的情况下,才会继续比对Last-Modified,最后才决定是否返回304。

用户行为与缓存

第一次请求

1. EÉ*FExpires.  3. Etag  4. Last-Modified  Cache-Control

第二次请求

斑 览 器 请 求  是 否 过 期 ?  Etag?  -Mod’  向 嫩 eb 服 务 器 求  请 求 啃 应 、 缓 存 协 商  向 web 服 务 器 求  FIf-None-Match  向 web 服 务 駕 请 求  带 Mod 而 ed , e  服 务 决 策

20 HTTP1.0和HTTP1.1

推荐: http://blog.csdn.net/elifefly/article/details/3964766

  1. 请求头Host字段,一个服务器多个网站
  2. 长链接
  3. 文件断点续传
  4. 身份认证,状态管理,Cache缓存

HTTP请求8种方法介绍 HTTP/1.1协议中共定义了8种HTTP请求方法,HTTP请求方法也被叫做“请求动作”,不同的方法规定了不同的操作指定的资源方式。服务端也会根据不同的请求方法做不同的响应。

GET

GET请求会显示请求指定的资源。一般来说GET方法应该只用于数据的读取,而不应当用于会产生副作用的非幂等的操作中。

GET会方法请求指定的页面信息,并返回响应主体,GET被认为是不安全的方法,因为GET方法会被网络蜘蛛等任意的访问。

HEAD

HEAD方法与GET方法一样,都是向服务器发出指定资源的请求。但是,服务器在响应HEAD请求时不会回传资源的内容部分,即:响应主体。这样,我们可以不传输全部内容的情况下,就可以获取服务器的响应头信息。HEAD方法常被用于客户端查看服务器的性能。

POST

POST请求会 向指定资源提交数据,请求服务器进行处理,如:表单数据提交、文件上传等,请求数据会被包含在请求体中。POST方法是非幂等的方法,因为这个请求可能会创建新的资源或/和修改现有资源。

PUT

PUT请求会身向指定资源位置上传其最新内容,PUT方法是幂等的方法。通过该方法客户端可以将指定资源的最新数据传送给服务器取代指定的资源的内容。

DELETE

DELETE请求用于请求服务器删除所请求URI(统一资源标识符,Uniform Resource Identifier)所标识的资源。DELETE请求后指定资源会被删除,DELETE方法也是幂等的。

CONNECT

CONNECT方法是HTTP/1.1协议预留的,能够将连接改为管道方式的代理服务器。通常用于SSL加密服务器的链接与非加密的HTTP代理服务器的通信。

OPTIONS

OPTIONS请求与HEAD类似,一般也是用于客户端查看服务器的性能。 这个方法会请求服务器返回该资源所支持的所有HTTP请求方法,该方法会用’*’来代替资源名称,向服务器发送OPTIONS请求,可以测试服务器功能是否正常。JavaScript的XMLHttpRequest对象进行CORS跨域资源共享时,就是使用OPTIONS方法发送嗅探请求,以判断是否有对指定资源的访问权限。 允许

TRACE

TRACE请求服务器回显其收到的请求信息,该方法主要用于HTTP请求的测试或诊断。

HTTP/1.1之后增加的方法

在HTTP/1.1标准制定之后,又陆续扩展了一些方法。其中使用中较多的是 PATCH 方法:

PATCH

PATCH方法出现的较晚,它在2010年的RFC 5789标准中被定义。PATCH请求与PUT请求类似,同样用于资源的更新。二者有以下两点不同:

但PATCH一般用于资源的部分更新,而PUT一般用于资源的整体更新。 当资源不存在时,PATCH会创建一个新的资源,而PUT只会对已在资源进行更新。

21 Ajax

AJAX,Asynchronous JavaScript and XML(异步的 JavaScript 和 XML), 是与在不重新加载整个页面的情况下,与服务器交换数据并更新部分网页的技术。