1.常见的HTTP请求方式有哪些?
GET
:发送一个请求来获取服务器上的某一资源,多用于查询数据(如列表查询);
POST
:将数据添加到服务器中的现有文件或资源(如提交表单或者上传文件),POST 请求可能会导致新的资源的建立或已有资源的修改;
HEAD
:响应与GET请求相同,但没有响应正文;
PUT
:替换服务器中的现有文件或资源,多用于向指定资源位置上传最新内容(如修改评价或笔记);
DELETE
:从服务器中删除数据(如取消收藏或删除评价);
PATCH
:是对 PUT 方法的补充,用于对资源进行局部更新;
OPTIONS
:用于描述目标资源的通信选项;
CONNECT
:HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器;
TRACE
:回显服务器收到的请求,主要用于测试或诊断;
2.GET请求与POST请求的区别?
1.提交数据的形式
:
? GET方法一般是指获取服务器上的数据,通过地址栏传输,请求参数(query string查询字符串)直接跟着URL后,以?分割URL和传输数据,参数之间以&相连(?name=coco&pwd=123)的形式,直接可以放到浏览器地址栏里,如登录就是采用GET方法(name=coco&password=123&verify=%E4%BD%A0%E5 %A5%BD)。如果数据是英文字母/数字,原样发送,如果是空格,转换为+,如果是中文/其他字符,则直接把字符串用BASE64加密,得出如:%E4 %BD%A0%E5%A5%BD,其中%XX中的XX为该符号以16进制表示的ASCII。
? POST方法是指客户端给服务器上提交表单数据,通过报文传输,会把数据放到请求数据字段中以&分隔各个字段,请求行不包含数据参数,地址栏也不会额外附带参数,所以POST是通过表单提交的,请求参数放在body中,如网页上的新用户的注册、调查问卷和答题就是采用POST方法。
2.提交数据的大小/长度
:
? GET是直接在浏览器地址栏输入,直接影响到了URL的长度,但HTTP协议规范中其实是没有对URL限制长度的,限制URL长度的是客户端或服务器的支持的不同所影响:比如IE对URL长度的限制是2083字节(2K+35)。对于其他浏览器,如Netscape、FireFox等,理论上没有长度限制,其限制取决于操作系统的支持。由于浏览器有限制,一般整个URL的长度可以很长,但是不能超过2049KB的大小限制,而POST没有大小限制。
? POST方式HTTP协议规范中也没有限定,起限制作用的是服务器的处理程序的处理能力。所以大小的限制还是得受各个web服务器配置的不同而影响。
3.提交数据的安全性
:
? 由于GET的参数是在浏览器地址栏URL直接拼接,用户名和密码将明文出现在URL上,暴露在互联网中,安全性差,不能用来传递敏感信息。
? POST请求参数放在Body里,是通过表单数据提交,POST比GET方式的安全性要高;
4.编码方式
:
? GET的参数只能支持ASCII;
? POST没有限制,也允许二进制数据;
5.请求方式
:
? GET是获取指定的资源 ;
? POST是向指定的资源提交要被处理的数据 ;
6.请求体
:
? GET没有请求体;
? POST有请求体;
7.效率方面
:
? GET产生一个TCP数据包;
? POST产生两个TCP数据包,POST需要两步,时间上消耗要多一点,GET比POST更有效;
8.请求过程
:
? 对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据)
? POST方式的请求,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok;
3.HTTP请求特点?
1.基于请求/响应,支持客户端/服务器模式
:客户端发送请求,服务器端响应数据。客户端向服务器请求服务时,只需要传送请求的方法和路径即可。常用的请求方法有GET(查)、POST(增),除此之外还有PUT(改)、DELETE(删)等,每种方法规定的客户端与服务器联系的方式不同,日常工作中见到的最多的是GET和POST两种。
2.基于TCP/IP协议之上的应用层协议,简单灵活
:HTTP简单,服务器的程序规模小,通信速度快;HTTP使用TCP作为它的支撑运输协议,HTTP客户机发起一个与服务器的TCP连接,一旦连接建立,浏览器(客户机)和服务器进程就可以通过套接字接口访问TCP,HTTP运行传输任意类型的数据对象。
3.无状态
:协议对于事务处理没有记忆能力,客户端第一次与服务器建立连接发送请求时需要进行一系列的安全认证匹配等,因此增加页面等待时间,当客户端向服务器端发送请求,服务器端响应完毕后,两者断开连接,也不保存连接状态(一刀两断,恩断义绝,从此路人),下一次客户端向同样的服务器发送请求时,由于他们之前已经遗忘了彼此,所以需要重新建立连接。
4.无连接
:限制每次连接,使其只处理一个请求。服务器处理完客户端的请求并收到客户端的应答后,即断开连接,这种方式可以节省传输时间。
4.Cookie和Session的区别?
1.存储位置不同
:Cookie是将用户数据通过加密的方式保存在客户端,大多数情况Cookie存储在浏览器;Session是用于控制客户端和服务端的连接,Session存储在服务器;
2.存储容量不同
:单个Cookie保存的数据不得超过4kb,一个站点最多20个Cookie,Session一般情况下没有上限,不过建议不要存放太多东西,否则影响性能;
3.存取方式不同
:Cookie只能用ASCII字符串,通过编码方式获取Unicode字符或者二进制数据,不好存储复杂的信息,而Session能存储任何类型的数据;
4.隐私策略/安全性不同
:Cookie放在客户端,可以进行Cookie欺骗,所以不安全,Session放在服务端,更加安全;
5.有效期不同
:Cookie可以设置属性达到长期有效,Session依赖于JSESSIONID的Cookie,Cookie JSESSIONID的过期时间默认为-1,只需要关闭窗口Session就会失效,就算不依赖Cookie,用UrL重写也不能完成,如果Session超时时间过长,容易导致内存溢出;
6.服务器压力不同
:Cookie保存在本地,不存在服务端压力,Session保存在服务端,每个用户产生一个Session,当访问增多,会比较占用服务器的性能,如果主要考虑到减轻服务器性能方面,应当使用Cookie;
7.浏览器支持不同
:如果浏览器禁用Cookie,那么Cookie直接失效,Session比较好点,可以用URL重写;
8.Cookie和Session应用的场景
:Cookie一般用于记住用户的登录状态,如记录用户的习惯,购物车;而Session用于登录验证。
5.HTTP和HTTPS的区别?
HTTP
协议传输的数据是未加密的,也就是明文的,因此使用HTTP协议传输隐私信息非常不安全,为了保证这些隐私数据能加密传输,SSL(SecureSocketsLayer)协议用于对HTTP协议传输的数据进行加密,从而就诞生了HTTPS。简单来说,HTTPS
协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全。
HTTPS和HTTP的区别主要如下:
-
HTTPS协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。
-
HTTP是超文本传输协议,信息是明文传输,HTTPS则是具有安全性的ssl加密传输协议。
-
HTTP和HTTPS使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
-
HTTP的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比HTTP协议安全。
6.你所知道的HTTP状态码?
? 1xx
:指示信息/参考信息(Info)——表示服务器收到请求,需要请求者继续执行操作;
? 2xx
:成功(Successful)——表示请求已被成功接收、理解、接受;
? 3xx
:重定向(Redirection)——要完成请求必须进行更进一步的操作;
? 4xx
:客户端错误(Client Error)——表示请求可能有语法错误或请求无法实现,妨碍了服务器的处理;
? 5xx
:服务器端错误(Server Error)——表示服务器在处理请求的过程中发生了内部错误,未能实现合法的请求;
常见状态码:
? 200:成功(OK )——服务器已成功处理了请求;
? 301:永久移动(Moved Permanently)——请求永久重定向,请求的页面已永久移动到新位置;
? 302:临时移动(Found )——请求临时重定向, 服务器目前从不同位置的网页响应请求,资源只是临时被移动,但请求者应继续使用原有URL来进行以后的请求;
? 304 :未修改(Not Modified)——文件未修改,可以直接使用缓存的文件;
? 400 :错误请求(Bad Request )——由于客户端请求有语法错误,不能被服务器所理解;
? 401 :未授权(Unauthorized)——请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用;
? 403:禁止(Forbidden)——服务器收到请求,但是拒绝提供服务。服务器通常会在响应正文中给出不提供服务的原因;
? 404:未找到(Not Found )——请求的资源不存在,例如,输入了错误的URL;
? 500 :服务器内部错误( Internal Server Error )——服务器发生不可预期的错误,导致无法完成客户端的请求;
? 503 : 服务不可用(Service Unavailable )——服务器当前不能够处理客户端的请求,在一段时间之后,服务器可能会恢复正常;
7.你所知道的常见接口类型有哪些?
-
HTTP接口
:基于超文本传输协议(HyperText Transfer Protocol HTTP)开发的接口,是应用最广泛的网络协议之一,但并不排除没有使用其他协议。基于浏览器/服务器(Brower/Server)的软件系统大多数为HTTP接口; -
Web Service接口
:系统对外的接口,根据提供的方法引用提供的接口,从而获取数据; -
RESTful接口
:简称REST,描述了一个架构式的网络系统;
8.常见的HTTP Header及其作用?
-
Accept:用于告诉服务器,客户机支持的数据类型 (例如:Accept:text/html,image/、image/webp,/*);
-
Accept-Encoding:用于告诉服务器,客户机支持的数据压缩格式;
-
Accept-Language:客户机语言环境;
-
Accept-Charset:用于告诉服务器,客户机采用的编码格式;
-
Connection:告诉服务器,请求完成后,是否保持连接;
-
Cookie:客户机通过这个头,将Cookie信息带给服务器;
-
Host:客户机通过这个服务器,想访问的主机名;
-
Referer:客户机通过这个头告诉服务器,它(客户端)是从哪个资源来访问服务器的(防盗链);
-
If-Modified-Since:客户机通过这个头告诉服务器,资源的缓存时间;
-
User-Agent:客户机通过这个头告诉服务器,客户机的软件环境(操作系统,浏览器型号和版本等);
-
Date:告诉服务器,当前请求的时间;
9.列举API测试中使用的一些常用协议?
-
Thrift
-
HTTP
-
REST
-
SOAP
-
JMS
-
UDDI
-
Dubbo
10.你所知道的较常用的API文档模板?
-
Swagger
-
FlatDoc
-
RestDoc
-
API blueprint
-
Slate
-
Miredot