Web相关总结

简述你对cookie好session的理解

  1. http协议是无状态协议,但是我们需要保持状态,就使用cookie来保存一些信息(用户偏好设置、用户名等)。当浏览器再次访问的时候,会自动带上cookie,服务器通过cookie的内容来查看状态。
  2. cookie一定程度上解决了“保持状态”的需求,但是cookie最大为4K,并且保存在客户端,可能被拦截或者窃取造成安全问题。
  3. session保存在服务端,给cookie分配一个唯一id,session_key:唯一随机字符串,通过cookie来识别用户,在session中保存隐私的信息,相对安全点。

HTTP请求方法

  1. GET 请求指定的页面信息,并返回实体主体。
  2. HEAD 类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头
  3. POST 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。
  4. PUT 从客户端向服务器传送的数据取代指定的文档的内容。
  5. DELETE 请求服务器删除指定的页面。
  6. CONNECT HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
  7. OPTIONS 允许客户端查看服务器的性能。
  8. TRACE 回显服务器收到的请求,主要用于测试或诊断。

HTTP状态码的作用和他们表示的意思

HTTP状态码(HTTP Status Code)是用以表示网页服务器HTTP响应状态的3位数字代码

  • 1XX:代表请求已被接受,需要继续处理,临时响应。
  • 2XX:成功。代表请求已成功被服务器接受、理解、并接受。200 OK
  • 3XX:重定向。后续的请求地址(重定向目标)在本次响应的 Location 域中指明。客户端采取进一步的操作才能完成请求。304 Not Modified
  • 4XX:客户端请求错误。代表客户端请求有错误,影响服务器的处理。403 Forbidden 服务器已经理解请求,但是拒绝执行它。 404 Not Found 请求失败,请求所希望得到的资源未被在服务器上发现。
  • 5XX:服务器错误。代表了服务器在处理请求的过程中有错误或者异常状态发生,也有可能是服务器意识到以当前的软硬件资源无法完成对请求的处理。500 Internal Server Error 服务器遇到未知的错误。

百度详解

从输入URL到页面加载中间都发生了什么

  1. DNS解析
  2. TCP连接
  3. 发送HTTP请求
  4. 服务器处理请求并返回HTTP报文
  5. 浏览器解析渲染页面
  6. 连接结束

segmentfault
cnblogs

XSRF和XSS

  • XSRF|CSRF(Cross Site Request Forgery) 跨站请求伪造
  • XSS(Cross Site Scripting) 跨站脚本攻击

中间人攻击

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

CGI和WSGI

CGI是通用网关接口,是连接web服务器和应用程序的接口,用户通过CGI来获取动态数据或文件等。 CGI程序是一个独立的程序,它可以用几乎所有语言来写,包括perl,c,lua,python等等。
WSGI, Web Server Gateway Interface,是Python应用程序或框架和Web服务器之间的一种接口,WSGI的其中一个目的就是让用户可以用Python编写前后端。

浏览器缓存|HTTP缓存

点击查看详情

RESTful

  • REST与技术无关,代表的是一种软件架构风格,REST是Representational State Transfer的简称,中文翻译为“表征状态转移”
  • REST从资源的角度类审视整个网络,它将分布在网络中某个节点的资源通过URL进行标识,客户端应用通过URL来获取资源的表征,获得这些表征致使这些应用转变状态
  • 所有的数据,不过是通过网络获取的还是操作(增删改查)的数据,都是资源,将一切数据视为资源是REST区别与其他架构风格的最本质属性
  • 对于REST这种面向资源的架构风格,有人提出一种全新的结构理念,即:面向资源架构(ROA:Resource Oriented Architecture)

简述什么是三次握手和四次挥手?为什么要这样?

建立连接的过程是利用客户服务器模式,假设主机A是客服端,主机B是服务端。
三次握手

  1. TCP的三次握手过程:主机A向B发送连接请求;主机B对收到的主机A的保温段进行确认;主机A再次对主机B的确认进行确认。
  2. 采用三次握手是为了防止失效的连接请求报文突然又传到主机B,因而产生的错误。失效的连接请求报文段是指:主机A发出的连接请求没有收到主机B的确认,于是经过一段时间后,主机A又重新想主机B发送连接请求,且建立成功,顺利完成数据传输。考虑到这样一种特殊情况,主机A第一次发送的连接请求并没有丢失,而是因为网络节点导致延迟到达主机B,主机B以为是主机A又发起了新的连接,于是主机B同意连接,且建立成功,顺利完成数据传输。考虑这样一种特殊情况,主机A第一次发送的连接请求并没有丢失,而是因为网络节点导致延迟达到主机B,主机B以为是主机A又发起的新连接,于是主机B同意连接,并向主机A发回确认,但是此时主机A根本不会理会,主机B就一直在等待主机A发送数据,导致主机B的资源浪费。
  3. 采用两次握手不行,原因就是上面说的失效的连接请求的特殊情况,因此采用三次握手刚刚好,两次可能出现失效,四次甚至更多次则没必要,反而复杂了。

四次挥手

  1. 先由客户端向服务器端发送一个FIN标记设置为1,请求关闭数据传输。
  2. 当服务器接收到客户端的FIN=1时,向客户端发送一个ACK=1,其中ack的值等于FIN+SEQ
  3. 然后服务器向客户端发送一个FIN,告诉客户端应用程序关闭。
  4. 当客户端收到服务器端的FIN时,回复一个ACK给服务器端。其中ack的值等于FIN+SEQ

4次挥手保证数据能够传输完成。

创建一个简单TCP服务器需要的流程

  1. 创建服务器套接字:s = socket()
  2. 绑定服务器端口和IP:s.bind()
  3. 监听:s.listen()
  4. 等待接听,客户端连接时,创建客户端的套接字:conn,addr = s.accept()
  5. 接受客户端发送的信息:recv = conn.recv(1024)
  6. 结束后关闭客户端、服务端:conn.close() s.close()

谈谈你对Nginx的正向代理和反向代理的理解

正向代理:是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端必须要进行一些特别的设置才能使用正向代理。

反向代理:对于客户端而言它就像是原始服务器,并且客户端不需要进行任何特别的设置。客户端向反向代理的命名空间中的内容发送普通请求,接着反向代理将判断向何处(原始服务器)转交请求,并将获得的内容返回给客户端,就像这些内容原本就是它自己的一样。

HTTP协议和WebWocket

详解