发表于: 2019-11-12 23:56:52
1 1001
任务二深度思考:
1.什么叫MVC,Spring里对应的MVC分别是什么,是怎么收到用户请求然后分发给不同的Controller的?
在web模型中,MVC是一种很流行的框架,通过把Model,View,Controller分离,把复杂的web应用分成逻辑清晰的几部分,使得开发简化,减少出错。
springMVC是spring的一个子框架,拥有spring的特性,如依赖注入。Spring Web MVC是一种基于java的实现Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层进行职责解耦,请求驱动类型指的是使用请求—响应模型,框架的目的是简化web开发。
springMVC执行流程:
(1)发起请求到前端控制器(DispatcherServlet)
(2)前端控制器请求HandlerMapping查找Handler(可以使用xml、注解方式查找)
(3)处理器映射器(HandlerMapping)向前端控制器(DispatcherServlet)返回Handler
(4)前端控制器(DispatcherMapping)调用处理器适配器(HandlerAdapter)执行Handler
(5)处理器适配器(HandlerAdapter)执行Handler
(6)Handler处理完给处理器适配器返回ModelAndView
(7)处理器适配器向前端控制器返回ModelAndView(ModelAndView是springMVC的底层对象,包括model和view)
(8)前端控制器请求视图解析器去解析视图,根据逻辑视图名解析为真正的视图(jsp)
(9)视图解析器向前端控制器返回view
(10)前端控制器进行视图渲染,视图渲染将模型数据(模型数据在ModelAndView对象中)填充到request域
(11)前端控制器向用户响应结果
2.什么是参数校验,前端和后端需要分别做校验吗?Validation的好处和坏处分别是什么,在真实项目中需要使用Validation吗?
无论前端还是后台都需要对用户输入进行验证,以此来保证系统数据的正确性。前端代码对于用户来说是透明的,可以绕过前端验证直接提交数据到后台。因此,前端和后台都需要验证。前端做验证是为了用户体验,后台才是最终保证。
好处是更为安全高效。
坏处是降低了用户体验。
3.SpringMVC分页查询和显示
进行分页需要功能:当前页,上一页、下一页,总页数,首页,尾页
springMVC分页查询和显示方法:
springMVC分页简单实现:https://www.cnblogs.com/xianan87/p/3948816.html
4.“内网IP+端口”和“外网IP+端口”和"域名"三种方式方式的差别是什么?什么时候用内网?什么时候用外网IP,什么时候用域名访问?
内网ip+端口适用于本地校验端口,本地访问
外网ip+端口适用于外网访问端口
域名可以隐藏IP地址,有防护作用
5.内网IP和外网IP的区别是什么,在服务器上测试接口是否被防火墙屏蔽的时候,该用内网IP检测,还是该用外网IP检测?
内网就是局域网(Local Area Network,LAN)是指在某一区域内由多台计算机互联成的计算机组。
外网就是广域网(英语:Wide Area Network,缩写为 WAN),又称外网、公网。是连接不同地区局域网或城域网计算机通信的远程网
局域网是自己的单位或者家庭、小区内部
外网是单位、家庭之外有覆盖范围极大的网络,比如internet,这个大网络延伸到了我们的单位、家庭(通过光纤、网线、电话线等)
检测防火墙应该用外网ip检测
6.在Linux服务器上,有哪些工具是可以测试接口的,怎么用Wget或者是Curl分别发送Rest的四种请求?
wget一般用于下载文件。curl一般用于模拟请求,测试api。
7.PostMan是什么,为什么要使用他来测试接口,除了Postman,还有哪些工具可以测试?
PostMan是一个HTTP客户端,用于发送请求和接收响应,专门用于测试api的工具。
jmeter,soapui,insomnia,paw,dhc
8.该怎么模拟假数据,为什么在真实项目中,我们通常都是先定义接口,再写假数据,再去写业务逻辑?
可以通过工具来生成假数据,也可以使用set方法添加假数据。
先定义接口,前后端就可以围绕接口开始写代码。先写假数据可以不用操作数据库,也便于在写业务逻辑时了解操作的数据增加效率。
9.对Service返回的结果是否要打日志,应该打什么样的日志,为什么?
需要打日志,访问用户名、访问ip、访问包名、操作时间、具体函数名。
10.对Service返回的结果是否要判空,为什么?
需要
11.在Controller里应该怎么处理Service的异常,大段的Try Catch 会有什么坏处?
抛出或捕获异常。
try catch需要消耗大量资源,会影响controller执行效率。
12.怎么查看Nginx的访问请求时间,多少的响应时间是合理的,并发1000和单线程访问的差别是什么,Nginx可以支持多少并发,Tomcat可以支持多少并发,为什么要在Tomcat之前配置一个Nginx?
可以通过nginx日志查看请求时间,也可以用F12,响应时间应该在200ms以内。
并发1000,就是1000个请求同时访问,可以同时处理。
单线程只能处理完一个请求再处理一个。
nginx可以支持5w并发,Tomcat默认配置最大请求数是150。
nginx可以实现负载均衡,减轻服务器的压力。
13.域名和端口号是怎么对应起来的?应该通过域名访问吗,从域名服务商到服务器的流程是怎么样的?
客户端输入域名,DNS将域名解析为服务器IP,找到代理服务器,因为http协议服务所占用的端口默认为80端口,所以会访问服务器的80端口,然后再通过代理服务器将请求转发到不同的服务器以及端口中。
应该,使用IP+端口访问难记,不安全。知道ip地址可能会遭到别人的攻击,使用域名,用户就不会知道服务器的ip地址。
14.端口是什么含义,怎么判断一个端口是否被占用了,如何判断一个端口是否被防火墙拦截,怎么用Telnet判断端口号是否打开?
端口是服务器用来提供服务的窗口,一台服务器只有一个ip地址,但是可以提供多种服务,不同服务就使用不同的端口。
使用命令行判断端口是否占用,是否被防火墙拦截,用Telnet+端口号 判断端口号是否打开。
15.WEB服务器通常要配置哪几个端口,如果一台服务器上有多个不同的WEB服务,该怎么规划端口的使用,修真院的端口分配是怎么样的?
在服务器上安装了三个web容器(resin,tomcat,jetty),分别使用8090、8080、8070端口;通常的http端口为80,mysql端口为3306,ssh通道为22
16.常用的性能统计命令有哪些,Top,Vmstat,free等命令都有什么用处,CPU占用率,内存使用分别代表什么含义?到什么情况下,应该产生报警信息?
TOP:查看服务器整体的性能;(uptime)
vmstat:查看CPU的性能;vmstat -n 2 3
free:查看内存使用的情况; free -m
iostat:查看磁盘读取速度; iostat -d 2 3(需要sysstat包);
ping:查看网络连通性,与Windows类似
netstat:查看端口号,一般都不使用这个命令,一般情况下都使用ps命令来查看
CPU占用率表示CPU负载情况,内存使用表示内存占用情况。
CPU可以满载,内存不行,内存占满会卡顿严重。使用top命令后,load average中3个数据平均值大于0.6后,就应该注意是否有僵尸程序或异常程序在占用系统资源。
这些命令主要用于解决服务器性能慢的问题,一些僵尸程序或写的程序与之前的代码造成冲突产生死循环,这两种情况在日志上体现不出来。
17.为什么要知道响应时间的分布情况,如果一个请求很慢,它的时间可能会被耗费在哪里?
可以对各个部分的响应时间有个判断。可能会耗费在循环或遍历资源上。
18.怎么查看Resin或者是Tomcat中的DB访问时间和Controller时间,有没有可能用Aop的方法自动记录Controller的时间和DB时间?Controller时间和DB时间的区别是什么,在你写的业务逻辑里,相差有多大?
通过查看日志来查看时间。DB访问时间是连接数据库进行操作的时间,Controller时间是逻辑部分的时间。
19.怎么判断WEB容器是否收到了一个Http请求,WEB容器中的Access.log是什么意思,包含哪些字段,代表什么含义,是哪里配置修改字段的。
WEB容器收到了Http请求后,此时容器会创建一个代表当前的请求的HttpServletRequest对象,并将请求相关信息设置给该对象。同样也会创建一个响应的对象HttpServletResponse,作为之后要对客户端响应的java对象。
Acess.log是访问记录日志,有用户IP,访问时间,请求方式,接口参数,服务状态,传递字节数,网页,访问信息等字段,不同web容器可以在不同的配置文件中设置。
20.为什么通常都是将部署文件放置在/data/盘下,在云服务器中数据盘和系统盘的区别是什么?
系统盘是安装系统使用的,每次重装系统都会清空数据。数据盘是外挂独立云磁盘,重装系统不会清空。
21.常用的主流数据库有哪些,Mysql有几种安装方式?
有IBM的DB2、Oracle、Informix、Sybase、SQL Server、PostgreSQL、mySQL、Access数据库、FoxPro数据库、Teradata。
22.有哪些常用的云服务器公司,Linux服务器和Windows服务器的差别是什么,Linux有哪些主流的版本,不同版本之间的差别在哪里?
国内有阿里云、腾讯云,国外有亚马逊,微软。 两种不同的系统的服务器生态不一样,windows图形化比较好,linux比较稳定,windows操作性比较好,Linux安全好。Linux 主要有Debian 、 Fedora 、SUSE家族。
23.什么是ssh?如何在linux服务器上从网站下载文件?
安全外壳协议。
wget加下载地址。
24.C标签是什么,为什么要使用C标签,有哪些常见的指令?
JSTL 核心标签库(C标签)标签,有表达控制标签<c:out> <c:set><c:remove><c:catch>
流程控制标签<c:if><c:choose><c:when><c:otherwise>
循环标签<c:forEach><c:forTokens>
URL操作标签<c:import><c:url><c:redirect><c:param>
25.什么叫反向代理?为什么要使用反向代理?
反向代理代理对象是服务器,隐藏了真实的服务器,使客户端不知道真实服务器信息。
保证服务器安全,知道服务器IP地址可能会被攻击,因此隐藏地址可以更安全。
负载均衡,通过反向代理优化服务器负载,原理是将数据流量分摊到多个服务器执行,减轻每台服务器的负载。
26.Nginx的作用是什么,在WEB服务前端配置Nginx的好处是什么,除了Nginx,还有别的反向代理服务器吗?
反向代理、负载均衡。
隐藏服务器信息,安全;高并发情况下,减轻服务器的负载。
varnish,Apache。
27.为什么要用start.sh,stop.sh,deploy.sh 来完成容器的启动,停止和部署,而不是直接用容器自带的命令?
脚本部署比较快,方便管理,能够随时部署,不消耗时间,改动方便。
28.什么是Filter,什么是Interceptor,他们的区别是什么,和AOP又是什么关系?
Filter:过滤器,依赖于servlet容器。在实现上,基于函数回调,它可以对几乎所有请求进行过滤。一个过滤器实例只能在容器初始化时调用一次。
Interceptor:拦截器,依赖于web框架。在SpringMVC中就是依赖于SpringMVC框架。在实现上基于java反射机制,属于AOP的一种应用。就是在一个方法前调用一个方法,或在一个方法后调用一个方法。
29.使用Annotaion的时候需要有哪些配置,他的加载过程是怎么样的?
需要自定义一个注解类,一个注解接口和实现类,通过创建方法并实现注解注入。
通过注解运行注解处理器。
30.Annotation和XML两种配置的差别,为什么更喜欢使用Annotaion来配置Spring MVC?
不管是XML还是Annotation,其本质都是为Spring容器提供Bean定义的信息。采用XML的配置,则Bean的定义信息和Bean的实现类是分离的;而采用Annotation的配置,则Bean的定义信息通过在Bean的实现类上标注注解实现。
Annotation的优点:
1. 在class文件中,可以降低维护成本,annotation的配置机制很明显简单
2. 不需要第三方的解析工具,利用java反射技术就可以完成任务
3. 编辑期可以验证正确性,差错变得容易找到
4. 提高开发效率
31.web.xml里的主要配置都包括什么,都代表什么含义,比如怎么加载Spring 配置的?
web.xml是用来初始化配置信息的,比如Welcome页面、servlet、servlet-mapping、filter、listener、启动加载级别等。
表头文件、命名和定制URL、定制初始化参数、设置过滤器、设置监听器。
32.Spring MVC和Struts的区别是什么,为什么更倾向于使用Spring MVC?
拦截机制的不同。
Struts2是类级别的拦截,每次请求就会创建一个action,和Spring整合时Struts2的ActionBean注入作用域是原型模式prototype,然后通过setter,getter把request数据注入到属性。Struts2中,一个Action对应一个request、response上下文,在接收参数时,可以通过属性接收,这说明属性参数是让多个方法共享的。Struts2中Action的一个方法对应一个url,而其类属性却被所有方法共享,这也就无法用注解或其它方法标识其所属类型了,只能设计为多例。
SpringMVC是方法级别的拦截,一个方法对应一个Request上下文,所以方法直接基本上是独立的,独享request,response数据。而每个方法同时又何一个url对应,参数的传递是直接注入到方法中的,是方法所独有的。处理结果通过ModeMap返回给框架。在Spring整合时,SpringMVC的Controller Bean默认单例模式Singleton,所以默认对所有的请求,只会创建一个Controller,有因为没有共享的属性,所以是线程安全的,如果要改变默认的作用域,需要添加@Scope注解修改。
Struts2有自己的拦截Interceptor机制,SpringMVC这是用的是独立的Aop方式,这样导致Struts2的配置文件量还是比SpringMVC大。
底层框架的不同
Struts2采用Filter(StrutsPrepareAndExecuteFilter)实现,SpringMVC(DispatcherServlet)则采用Servlet实现。Filter在容器启动之后即初始化;服务停止以后坠毁,晚于Servlet。Servlet在是在调用时初始化,先于Filter调用,服务停止后销毁。
性能方面
Struts2是类级别的拦截,每次请求对应实例一个新的Action,需要加载所有的属性值注入,SpringMVC实现了零配置,由于SpringMVC基于方法的拦截,有加载一次单例模式bean注入。所以,SpringMVC开发效率和性能高于Struts2。
配置方面
spring MVC和Spring是无缝的。从这个项目的管理和安全上也比Struts2高
33.什么是WEBService,实现WEBService有哪些框架,为什么WEBService经常被认为太重了,只有银行和大型国企才会使用的更多有一些?
WEBService是一个平台独立的、低耦合的、自包含的、基于可编程的web应用程序,可使用开放的XML(标准通用标记语言下的一个子集)标准来描述、发布、发现、协调和配置这些应用程序,用于开发分布式的互操作的应用程序。
34.什么是tcp/ip协议?TCP的三次握手指的是什么,为什么一定要三次握手,而不是四次或者是两次?
TCP(Transmission Control Protocol)传输控制协议,相对于UDP,TCP是面向连接的、提供可靠的数据传输服务。
第一次握手:客户端向服务器发送请确包,SYN=1 (seq=x),等待服务器回应;
第二次握手:服务器端收到请求包后,将客户端的请求包SYN=1(seq=x)放入自己的未连接队列,而是服务器需要发送两个包给客户端。
第三次握手:客户端收到服务器的包后,知道服务器同意连接;向服务器发送连接建立的确认包ACK=1(ack=y+1),回应服务器SYN(sqk=y+1)包发送完毕,服务器收到后与客户端进入ESTABLISHED状态,进行数据传输。
为什么要三次握手?
握手的过程实际上是在通知对方自己的初始化序号(Initial Sequence Number),简称ISN,也就是上图中的x和y。x和y会被当作之后传输数据的一个依据,以保证TCP报文在传输过程中不会混乱。
35.什么是http协议?get和post请求有什么区别?http请求content-Type有几种,有什么区别?http适合什么场景?http状态码有哪些?
HTTP协议是指计算机通信网络中两台计算机之间进行通信所必须共同遵守的规定或规则,超文本传输协议(HTTP)是一种通信协议,它允许将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器
1. GET提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以&相连,POST方法是把提交的数据放在HTTP包的Body中.因此get不安全,post安全
2. GET提交的数据大小有限制(因为浏览器对URL的长度有限制),而POST方法提交的数据没有限制.需要提交大量数据的时候使用Post
Content-Type
内容类型,一般是指网页中存在的Content-Type,用于定义网络文件的类型和网页的编码,决定浏览器将以什么形式、什么编码读取这个文件.意思就是传输的是什么类型的数据.
Content-Type使用的是 “主类型/子类型; 额外参数” ( [type]/[subtype]; parameter )的数值格式。
application/x-www-form-urlencoded:数据被编码为名称/值对。这是标准的编码格式。这种方式用的比较多。
multipart/form-data: 数据被编码为一条消息,页上的每个控件对应消息中的一个部分。一般上传文件才会使用这种方式。
text/plain: 数据以纯文本形式(text/json/xml/html)进行编码,其中不含任何控件或格式字符。一般向服务端发送json数据会使用这种方式。
http状态码有哪些?
1xx:指示信息--表示请求已接收,继续处理
2xx:成功--表示请求已被成功接收、理解、接受
3xx:重定向--要完成请求必须进行更进一步的操作
4xx:客户端错误--请求有语法错误或请求无法实现
5xx:服务器端错误--服务器未能实现合法的请求
200 OK //客户端请求成功
400 Bad Request //客户端请求有语法错误,不能被服务器所理解
403 Forbidden //服务器收到请求,但是拒绝提供服务
404 Not Found //请求资源不存在,eg:输入了错误的URL
500 Internal Server Error //服务器发生不可预期的错误
503 Server Unavailable //服务器当前不能处理客户端的请求,一段时间后可能恢复正常
36.了解maven的module。
随着技术的飞速发展和各类用户对软件的要求越来越高,软件本身也变得越来越复杂,然后软件设计人员开始采用各种方式 进行开发,于是就有了我们的分层架构、分模块开发,来提高代码的清晰和重用。比如:我们在开发过程中,创建了2个以上的模块,每个模块都是一个独立的maven project,在开始的时候我们可以独立的编译和测试运行每个模块,但是随着项目的不断变大和复杂化,这样的管理是混乱的,没有遵守一个设计模式原则:“高内聚,低耦合”,于是我们就希望用分层架构、分层模块来提高代码的清晰和重用, 这时Maven给出了聚合的配置方式。
37.为什么要用Rest风格,如果不用Rest的话,接口应该怎么定义,在使用Rest风格之前,大家都是用什么方式写接口的?
因为使用rest风格,只设计一个后台系统就可以处理多个不同客户端的请求。
采用Restful结构,按照REST的接口来进行数据交互,完全不用关心后端实现,也就是说,前端和后端真正的实现了完全的分离设计。
URL该怎么写就怎么写,但是没有PUT,GET,POST,DELETE方法。
38.生成Json有几种方式,他们之间的好处和坏处分别是什么,为什么推荐使用JsonTaglib来处理Json?
生成JSON的三种方式:
使用json-taglib并在jsp页面来设置字段或嵌套。
通过注解ResponseBody返回Java对象或集合,可以自动转化为JSON字符串。
利用Gson转化
JSON-taglib是一个JSP 2.0标记库,用于在JSP代码中呈现JSON(JavaScript Object Notation)数据。它可以作为AJAX应用程序的服务器端的一部分,允许使用JSP的全部功能来格式化JSON数据。
39.一份规范的接口文档应该包括什么内容,衡量接口(API)设计好和坏的准则是什么?
接口分为四部分:方法、url、请求参数、返回参数
请求参数和返回参数,都分为5列:字段、说明、类型、备注、是否必填
易使用:没有复杂的程序、复杂的细节,易于学习;灵活的API允许按字段排序、可自定义分页、 排序和筛选等。一个完整的API意味着被期望的功能都包含在内。
难误用:对详细的错误提示,有些经验的用户可以直接使用API而不需要阅读文档。而对于开发人员来说,要求又是不一样的;
易阅读:代码的编写只需要一次一次,但是当调试或者修改的时候都需要对代码进行阅读。
易开发:个最小化的接口是使用尽可能少的类以及尽可能少的类成员。这样使得理解、记忆、调试以及改变API更容易。
40.Http的Header里面包含哪些字段,每个字段都有哪些含义?
Accept: /声明在request header中表示客户端能够接受的MIME类型
Accept-Encoding:r //声明在request header中表示某种加密压缩算法
Accept-Language: en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7 //声明在request header中表示接受的语言
Cache-Control: // 对于很多静态资源一般会赋值缓存,以便快速渲染
Connection: keep-alive
Cookie://往往是由服务器端通过Set-Cookie header的方式设置出来的值。
Host: // 服务器域名
……
41.如何写shell脚本?尝试自己编写一个简单脚本。
shell是一个用C语言编写的应用程序,是用户使用Linux的桥梁。它既是一种命令语言,又是一种程序设计语言。
shell提供了一个界面,用户可以通过界面访问操作系统的内核服务。
42.在Linux服务器上部署的时候,一般都要有哪些脚本,这些脚本该怎么编写?
将项目打包,移动到服务器安装目录下的webapps目录下,删除之前的项目,运行服务器。
43.如果有多个WEB服务,都把WEB服务都配置在一个容器里,还是一个WEB配置一个容器,他们的差别是什么,你觉得哪种方式更好?
一个WEB配置一个容器,方便管理。
44.Resin/tomcat/jetty等WEB容器的内存大小,一般应该设置多大合适,怎么估算WEB程度占用内存的大小?
45.jetty,resin,tomcat的常见配置有哪些,内存,端口,日志文件都怎么配置?
修改服务器配置文件,一般.xml .conf .properties里面大多注释中有常用的默认配置。
46.jetty,resin,tomcat的差别在哪里,在线上服务应该选择哪一种WEB服务器?
Tomcat是Apache软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。由于有了Sun 的参与和支持,最新的Servlet 和JSP 规范总是能在Tomcat 中得到体现,Tomcat 9支持最新的Servlet 3.2 和JSP 2.3 规范。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。
Jetty 是一个开源的servlet容器,它为基于Java的web容器,例如JSP和servlet提供运行环境。Jetty是使用Java语言编写的,它的API以一组JAR包的形式发布。开发人员可以将Jetty容器实例化成一个对象,可以迅速为一些独立运行(stand-alone)的Java应用提供网络和web连接。
Resin是CAUCHO公司的产品,是一个非常流行的支持servlets和jsp的引擎,速度非常快。Resin本身包含了一个支持HTTP/1.1的WEB服务器。它不仅可以显示动态内容,而且它显示静态内容的能力也非常强,速度直逼APACHESERVER。许多站点都是使用该WEB服务器构建的。
根据情况而定。
47.maven常用的打包插件有哪些?有什么区别?如何使用 ?
1.package,maven自带的命令打包,平时的打包基本够用,但不能打可直接运行的jar包
2.IDEA自带的打包工具,不过打的包很容易出现冲突
3.jar-dependency插件,繁琐,性能差,不建议使用
4.assembly插件,可以打多种格式的包,具有基本的解决所打jar包内依赖包冲突的问题,但一旦出现冲突则无法解决
5.shade插件,终极杀器,jar包出现依赖包冲突可以通过调整配置解决
性能有区别
48.War包是什么,为什么WEB服务通常打出来的都是War包?除了War包,还有几种打包格式,他们之间的区别呢?
WAR是Sun提出的一种Web应用程序格式,是许多文件的一个压缩包。这个包中的文件按一定目录结构来组织:通常其根目录下包含有Html和Jsp文件或者包含这两种文件的目录,另外还会有一个WEB-INF目录。通常在WEB-INF目录下有一个web.xml文件和一个classes目录,web.xml是这个应用的配置文件,而classes目录下则包含编译好的Servlet类和Jsp或Servlet所依赖的其它类。
还有jar、ear。
49.Put请求在Linux下的Tomcat或者是Resin中会收不到数据,怎么解决这个问题,原因是什么?为什么本地使用Jetty的时候往往是正常的?
50.Content-type中的数据类型,在Spring MVC中都怎么接收数据?
(1)application/x-www-form-urlencoded
最常见的 POST 提交数据的方式,原生Form表单,如果不设置 enctype 属性,默认为application/x-www-form-urlencoded 方式提交数据。
首先,Content-Type被指定为
application/x-www-form-urlencoded;其次,提交的表单数据会转换为键值对并按照
key1=val1&key2=val2 的方式进行编码,key 和 val 都进行了 URL
转码。大部分服务端语言都对这种方式有很好的支持。
另外,如利用AJAX 提交数据时,也可使用这种方式。例如 jQuery,Content-Type 默认值都是”application/x-www-form-urlencoded;charset=utf-8”
(2)multipart/form-data
另一个常见的 POST 数据提交的方式, Form 表单的 enctype 设置为multipart/form-data,它会将表单的数据处理为一条消息,以标签为单元,用分隔符(这就是boundary的作用)分开,类似我们上面Content-Type中的例子。
(3)application/json
Content-Type: application/json 作为响应头比较常见。实际上,现在越来越多的人把它作为请求头,用来告诉服务端消息主体是序列化后的 JSON 字符串,其中一个好处就是JSON 格式支持比键值对复杂得多的结构化数据。
(4)text/xml
XML的作用不言而喻,用于传输和存储数据,它非常适合万维网传输,提供统一的方法来描述和交换独立于应用程序或供应商的结构化数据,在JSON出现之前是业界一大标准(当然现在也是)。因此,在POST提交数据时,xml类型也是不可缺少的一种,虽然一般场景上使用JSON可能更轻巧、灵活。
(5)binary (application/octet-stream)
在Chrome浏览器的Postman工具中,还可以看到”binary“这一类型,指的就是一些二进制文件类型。如application/pdf,指定了特定二进制文件的MIME类型。就像对于text文件类型若没有特定的子类型(subtype),就使用 text/plain。类似的,二进制文件没有特定或已知的 subtype,即使用 application/octet-stream,这是应用程序文件的默认值,一般很少直接使用 。
对于application/octet-stream,只能提交二进制,而且只能提交一个二进制,如果提交文件的话,只能提交一个文件,后台接收参数只能有一个,而且只能是流(或者字节数组)。
51.什么是restful?rest的请求方法有哪些,有什么区别?
restful就是基于rest的一种风格,
有put、get、post、delete等方法
分别对应增删改查
评论