1.http请求方法
- GET
- 向服务器请求指定资源,并获取返回实体主体。
- POST
- 向服务器提交数据进行处理请求。数据被包含在请求体中。
- 该请求可能会导致新的资源的建立或已有资源的修改。
- HEAD
- 类似于GET请求,但返回的响应中没有具体的内容,用于获取报头。
- PUT
- 从客户端向服务器传送的数据取代指定的文档的内容。
- DELETE
- 请求服务器删除指定的资源。
- OPTIONS
- 允许客户端查看服务器的性能,返回服务器支持的HTTP方法。
- TRACE
- 回显服务器收到的请求,主要用于测试或诊断。
- CONNECT
- http1.1协议中预留给能够将连接改为(TCP/IP)管道方式的代理服务器。
- GET与POST的区别
- get将请求的数据放在url上,即http协议头上;post将数据放在http的请求体内
- get提交数据最大是2k,post无限制
- get产生一个TCP数据包,浏览器会把http header 和data一并发送过去,服务器返回200;post产生两个TCP数据包,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器返回200
- get请求只能进行url编码;post支持多种编码方式。
- get在浏览器回退时是无害的;post会再次请求提交
- 对于信息的获取一般使用get
- 以下情况最好使用post
- 向服务器发送大量数据
- 无法使用缓存文件
- 发送包含未知字符的用户输入时
2.http与https的区别
- http:超文本传输协议,定义了客户端与服务器端之间文本传输的规范。
- URL:以http://开头
- 安全性:不安全
- 默认端口:80(服务端的端口)
- 应用层协议
- 证书:不需要
- https:基于安全套接字的http协议,即http+ssl/tls证书的组合
- URL:以https://开头
- 安全性:安全
- 默认端口:443
- 传输层协议,加密是在传输层完成的,因为SSL位于传输层。
- 证书:需要
3.cookie、LocalStorage、sessionStorage的区别
- 相同点:
- 都是保存在浏览器端,与服务器端的session机制不同
- 不同点:
- cookie始终在同源的http请求中携带,即使不需要,cookie也能在浏览器和服务器中来回传递;而localStorage和sessionStorage仅仅在本地存储,不会和服务器通信,也不会把数据发送给服务器。
- 存储大小不同:cookie:4kb左右;local storage,sessionstorage:5M
- 数据有效期不同:sessionStorage仅在同源窗口中有效,属于会话级别的存储,关闭窗口就消失了;cookie可以设置过期时间;localStorage长期有效。
- localStorage, sessionStorage有现成的API, cookie需要程序员手动封装
- cookie与session的区别
- cookie数据存放在客户的浏览器上,session数据存放在服务器上;
- cookie没有session安全;
- session会在一定时间内保存在服务器上。当访问增多会比较占用服务器的性能,考虑到减轻服务器性能方面,应当使用cookie;
- 单个cookie保存的数据不能超过4k,且大多浏览器限制一个站点最多保存20个cookie;
- 登录信息等重要信息存放在session中,其它信息放在cookie中。
4.TCP三次握手、四次挥手
- 一开始,客户端和服务端都处于CLOSED状态。先是服务端主动监听某个端口,处于LISTEN状态。
- 第一个报文-SYN报文 客户端会随机初始化序列号(client_isn),将此序列号置于TCP首部的[序号]字段中,同时把SYN标志位置为1,表示SYN报文。接着把第一个SYN报文发送给服务端,表示向服务端发起连接,该报文不包含应用层数据,之后客户端处于SYN-SENT状态。
- 第二个报文-SYN+ACK报文 服务端收到客户端的SYN报文后,首先服务端也随机初始化自己的序号(server_isn),将此序号填入TCP首部的[序号]字段中,其次把TCP首部的[确认应答号]字段填入client_isn+1,接着把SYN和ACK标志位置为1.最后把该报文发送给客户端,该报文也不包含应用层数据,之后服务端处于SYN-RCVD状态。
- 第三个报文-ACK报文 客户端收到服务端报文后,还要向服务端回应最后一个应答报文,首先该应答报文TCP首部ACK标志位置为1,其次[确认应答号]字段填入service_isn + 1,最后把报文发送给服务端,这次报文可以携带客户到服务器的数据,之后客户端处于ESTABLISHED状态。
- 服务器收到客户端的应答报文后,也进入ESTABLISHED状态。 //
- 为什么是三次?
- 因为三次握手才能保证双方具有接收和发送的能力。
- 三次握手才可以阻止重复历史连接的初始化
- 三次握手才可以同步双方的初始序列号
- 三次握手才可以避免资源浪费
- 两次握手:无法防止历史连接的建立,会造成双方资源的浪费,也无法可靠的同步双方序列号;
- 四次握手:三次就已经理论上最少可靠连接建立,所以不需要使用更多的通信次数。
- 客户端打算关闭连接,此时会发送一个TCP首部FIN标志为被置为1的报文,即FIN报文,之后客户端进入FIN_WAIT_1状态。
- 服务端收到该报文后,就向客户端发送ACK应答报文,接着服务端进入CLOSED_WAIT状态。
- 客户端收到服务端的ACK应答报文后,之后进入FIN_WAIT_2状态。
- 等待服务端处理完数据后,也向客户端发送FIN报文,之后服务端进入LAST_ACK状态。
- 客户端收到服务端的FIN报文后,回一个ACK应答报文,之后进入TIME_WAIT状态。
- 服务器收到ACK应答报文后,就进入了CLOSED状态,至此服务端已经完成连接的关闭。
- 客户端在经过2MSL一段时间后,自动进入CLOSED状态,至此客户端也完成连接的关闭。
- !主动关闭连接的,才有TIME_WAIT状态。 www.cnblogs.com/xiaolincodi…
5.TCP与UDP的区别
- TCP:面向连接的(一对一)、可靠的(可保证一个报文一定能到达接收端)、基于字节流(消息无边界,有序,重复报文自动丢弃)的传输层通信协议。
- 用于保证可靠性和流量控制维护的某些状态信息,这些信息的组合,包括socket(IP地址+端口号)、序列号(用来解决乱序问题)和窗口大小(用来流量控制)成为连接。
- TCP四元组可以唯一确定一个连接(源地址、源端口、目标地址、目标端口)
- 区别
- 连接
- TCP:面向连接的传输层协议,传输前先要建立连接。
- UDP:不需要连接,即刻传输数据。
- 服务对象
- TCP:一对一的两点服务。
- UDP:支持一对一、一对多、多对多的交互通信。
- 可靠性
- TCP:可靠交付数据,数据可以无差错、不丢失、不重复、按需到达。
- UDP:尽最大努力交付,不保证可靠交付数据。
- 拥塞控制、流量控制
- TCP:拥塞控制和流量控制机制,保证数据传输的安全性。
- UDP:无,即使网络非常拥堵,也不会影响UDP的发送速率。
- 首部开销
- TCP:首部长度较长,会有一定的开销。
- UDP:首部只有8个字节,并且是固定不变的,开销较小。
- 传输方式
- TCP:流式传输,没有边界,但保证顺序和可靠。
- UDP:一个包一个包的发送,是有边界的,但可能会丢包和乱序。
- 分片不同
- TCP:数据大小如果大于MSS大小,则会在传输层进行分片,目标主机收到后,也会同样在传输层组装TCP数据包,如果中途丢失了一个分片,只需要传输丢失的这个分片。
- UDP:数据大小如果大于MTU大小,则会在IP层进行分片,目标主机收到后,在IP层组装完数据,接着再传给传输层,如果中途丢失了一个分片,则需要重传所有的数据包,传输效率差,因此,通常UDP的报文应该小于MTU。
- 应用
- TCP:FTP文件传输;HTTP/HTTPS
- UDP:包总量较少的通信(DNS\SNMP等);视频、音频等多媒体通信;广播通信
- 连接
6.状态码
- 200:成功OK
- 204:操作成功,但不在响应正文中返回数据 No Content
- 304:重定向Not Modified
- 403:客户端错误 Forbidden
- 401:客户端错误 Unauthorized
- 413:客户端错误,请求长度过长 Payload Too Large
- 400:客户端错误,参数无效 BadRequset
- 404:客户端错误,资源不存在 Not Found
- 405:客户端错误,某个请求所针对的资源不支持对应的请求方法(方法资源组合不正确)。Method Not Allowed
- 412:客户端错误 Precondition Failed
- 501:服务器不认识或不支持对应的请求方法。Not Implemented
- 503:Service Unavailable
- 500:服务端错误
7.http
- 工作原理 http协议采用请求/响应模型。 客户端向服务器发送一个请求报文(包含:请求行(请求的方法、URL、协议版本)、请求头部、请求数据); 服务器以一个状态行作为响应(包含:状态行(协议的版本、成功/错误代码、服务器信息)、响应头部、响应数据)。
- 步骤 》客户端连接到Web服务器->发送http请求->服务器接受请求并返回http响应->释放连接TCP连接->客户端浏览器解析HTML内容
8.一个页面从输入URL到页面加载显示完成,这个过程都发生了什么?
[简洁版]
- 浏览器根据请求的url交给DNS域名解析,找到真实IP【三次握手】,向服务器发起请求;
- 服务器交给后台处理完成后返回数据,浏览器接收文件(HTML,js,css,图像等);
- 浏览器对加载到的资源进行语法解析,建立相应的内部数据结构(如HTML的DOM);
- 载入解析到的资源文件,渲染页面,完成【四次挥手】。 [详细版]
- 浏览器会开启一个线程来处理这个请求,对url分析判断如果是http协议就按照web方式来处理;
- 调用浏览器内核中的应对方法,比如WebView中的loadUrl方法;
- 通过DNS解析获取网址的IP地址,设置UA等信息发出第二个GET请求;
- 进行HTTP协议会话,客户端发送请求报头;
- 进入到Web服务器上的WebServer,如Apache、Tomcat、Node.js等服务器;
- 进入部署好的后端应用,如php,java,JavaScript,python等,找到对应得请求处理;
- 处理结构回馈报头,此处如果浏览器访问过,缓存上有对应资源,会与服务器最后修改时间对比,一致则返回304;
- 浏览器开始下载html文档(响应报头,状态码200),同时使用缓存;
- 文档树建立,根据标记请求所需指定MIME类型的文件(比如css,js),同时设置了cookie;
- 页面开始渲染DOM,JS根据DOM API操作DOM,执行事件绑定等,页面显示完成。