- php-tp允许ajax跨域访问
若初_终点
在class上面加3个headernamespaceapp\appc\controller;usethink\Controller;//允许baidu.com发起的跨域请求header("Access-Control-Allow-Origin:baidu.com");//如果需要设置允许所有域名发起的跨域请求,可以使用通配符*header('Access-Control-Allow-Origin:
- 域-ajax跨域问题|springboot解决跨域|nginx搭建api网关
橘子味的阳光
杂文跨域浏览器springboot
什么是跨域问题?浏览器出于安全考虑,限制了JS发起跨站请求,使用XHR对象发起请求必须遵循同源策略(SOP:SameOriginPolicy),跨站请求会被浏览器阻止,这对开发者来说是很痛苦的一件事,尤其是要开发前后端分离的应用时。前台调用后台接口,如果不是同一域内就是跨域问题(前端ajax访问请求域名,与浏览器内地址不相同)HTTP请求头#请求域Origin:”http://localhost:
- 关于ajax跨域访问,Access-Control-Allow-Origin 404的简单解决办法
熹小雨Marain
ajax跨域php跨域java跨域
~关于ajax跨域,都是一个老生常谈的问题了,解决方法很多,比较常用的是JSONP方法,JSONP方法是一种非官方方法,而且这种方法只支持GET方式,不如POST方式安全(大家应该都知道)。即使使用jquery的jsonp方法,type设为POST,也会自动变为GET。(实践才是硬道理)例如:客户端的域名是www.c.com,而请求的域名是www.s.com如果直接使用ajax访问,会有以下错误X
- ajax跨域请求接口介绍及解决方案
唐人不自醉
在前端开发过程中,将常出现前端代码和后台服务不在一个服务器的情况,这时候前端js代码调用后台接口,会出现跨域问题。1、这里的域是通过URL的头部来识别的。浏览器并不会去尝试判断相同的ip地址对应着两个域或者两个域是否在同一个ip上。URL的头部指window.location.protocol+window.location.host,也可以理解为“Domains,protocolsandport
- 一知半解,临时解决ajax跨域请求
onebigday
java学习vue.js前端javascriptajax
在学习java编写接口。写好之后用vue写了个前端进行测试,结果总是有Access-Control-Allow-Origin错误。上网找,说在vue.config.js做配置,加上以下内容:module.exports={devServer:{port:8089,proxy:{'/mytest':{target:'http://192.168.0.183:8081',ws:true,changeO
- 04-尚硅谷Vue_Vue中的ajax
骑鱼过海的猫123
vue.js前端javascript
文章目录1.解决开发环境Ajax跨域问题【前端】尚硅谷Vue2-Vue3全家桶笔记目录贴1.解决开发环境Ajax跨域问题
- 如何对Ajax请求进行封装操作,解决跨域问题的方法,如何使用core解决跨域
代码真的养发
okhttpandroidjavascript开发语言前端
目录1.Ajax原理2.为什么要封装3.如何进行封装4.如何请求5.如何解决Ajax跨域问题6.使用CORS解决Ajax跨域问题1.服务端2.客户端1.Ajax原理Ajax(AsynchronousJavaScriptandXML)是一种通过在后台与服务器进行少量数据交换,而无需重新加载整个页面的技术。其核心原理包括:创建XMLHttpRequest对象:使用JavaScript创建XMLHttp
- JSONP的基本使用
GoFzy
一、准备好一个不同源的数据接口AJAX跨域请求varscript=document.createElement('script');script.src='http://first.com/JSONP_server.php';document.body.appendChild(script);functionfoo(data){console.log(data);} 现在我们就可以直接在浏览器中
- Vue进阶:Vue中的ajax请求
做一只猫
vue.jsajax前端
一、Vue中的ajax请求1.1解决开发环境Ajax跨域问题总结:1.1.1模拟跨域问题准备好测试的服务器server1.jsconstexpress=require('express')constapp=express()app.use((request,response,next)=>{console.log('有人请求服务器1了');//console.log('请求来自于',request
- ssm项目解决AJAX跨域,ssm项目跨域访问
spRachel雷切爾
ssm项目解决AJAX跨域
最近使用ssm开发了一个项目,为了项目的开发速度,采用的是前后端同时开发,所以前端文件没有集成在项目中,最后在调试时涉及到了跨域。跨域的解决方法很多,我采用的是最简单的一种,代码如下:新建一个过滤器filterpackagecom.xxxx.xxxxx;importjavax.servlet.*;importjavax.servlet.http.HttpServletResponse;import
- angularjs ajax header,angularJs/ajax跨域请求携带cookies
爱学习的黄公子
angularjsajaxheader
前后端分离时候,当前端测试不在同一个域时候,前端使用ajax请求时,ajax默认不会将cookies保存,而且也不会发送cookie到服务端,此时在请求方法中加入粗体部分即可,当然存取cookies的时候也要加进去(比如登录的时候)-------------------------------------------------ajax-------------------------------
- Vue从入门到精通—— 第四章 Vue 中的 ajax
TUTOU程序猿
vue.jsajaxjavascript
文章目录1.解决解决开发环境Ajax跨域问题方法一:一对一方法二:一对多2.插槽1.解决解决开发环境Ajax跨域问题方法一:一对一在vue.config.js中添加如下配置:devServer:{proxy:"http://localhost:5000"}说明:优点:配置简单,请求资源时直接发给前端(8080)即可。缺点:不能配置多个代理,不能灵活的控制请求是否走代理。工作方式:若按照上述配置代理
- Vue2学习之第四章——Vue中的ajax
吃一口你的梦。
学习vue.jsajax
Vue中的ajax解决开发环境Ajax跨域问题配置代理方式一在vue.config.js中添加如下配置://开启代理服务器(方式一)devServer:{proxy:'http://localhost:5000'}说明:优点:配置简单,请求资源时直接发给前端(8080)即可。缺点:不能配置多个代理,不能灵活的控制请求是否走代理。工作方式:若按照上述配置代理,当请求了前端不存在的资源时,那么该请求会
- 2020-04-03
有只Bug
1.如何解决跨域问题?理解跨域的概念:协议、域名、端口都相同才同域,否则都是跨域出于安全考虑,服务器不允许ajax跨域获取数据,但是可以跨域获取文件内容,所以基于这一点,可以动态创建script标签,使用标签的src属性访问js文件的形式获取js脚本,并且这个js脚本中的内容是函数调用,该函数调用的参数是服务器返回的数据,为了获取这里的参数数据,需要事先在页面中定义回调函数,在回调函数中处理服务器
- Vue中的ajax请求、Vuex、Vue UI组件库
gh-xiaohe
Vuevue.jsajaxjavascript
文章目录Vue中的ajax请求解决开发环境Ajax跨域问题准备好测试的服务器准备访问5000服务器存在跨域问题配置代理方式一:配置代理方式二:2、github用户搜索案例1、静态编写2、展示动态的数据和交互3、完善功能4、完整数据3、vue项目中常用的2个Ajax库axios强力推荐vue-resource(插件库)4、Vue插槽solt效果默认插槽作用域插槽Vue中vuex重要1、Vuex1、什
- 关于Ajax跨域以及Nginx反向代理的一个坑
女装coder
我的程序员笔记nginx反向代理跨域
转自我在简书上的笔记:https://www.jianshu.com/p/40f6b9002461之前项目中各种视频播放出现问题,原因有好多,包括客户端播放器逻辑,Android系统播放器的坑爹bug,CDN,以及视频源的压缩处理不当等等。然而,关于视频源压缩处理,我前段时间样衰衰,主动提出要搞一套自己服务器的转压工具,代替现有的视频制作部门使用的“狸窝”~(这个鬼听名字就知道low爆了)Anyw
- ajax跨域请求
公子_b4cb
header("Access-Control-Allow-Origin:http://127.0.0.1");header("Access-Control-Allow-Credentials:true");
- c# webservice ajax跨域 session使用配置
埃罗芒老兄
后台方法添加EnableSession=trueWeb.config添加ajax添加xhrFields:{withCredentials:true}
- AJAX跨域问题讲解
loushumei
为什么会发生产生跨域问题?[产生跨域的原因]1.浏览器限制2.跨域(协议,域名,端口任何一个不同)3.XHR(XMLHttpRequest)请求也就是说当我们发送的是XMLHttpRequest请求不同的域名,浏览器就会限制访问,那么就会产生跨域问题。[解决跨域问题的思路]1.改动客户端浏览器参数来解除限制浏览器启动加入--disable-web-security2.Jsonp解决是XHR请求的问
- 前后端分离ajax出现两次请求,前后端分离,ajax跨域请求,2次请求
形象顧問Aking
前后端分离ajax出现两次请求
参考https://blog.csdn.net/charleslei/article/details/51906635https://blog.csdn.net/kejmln/article/details/51350777开发过程中,如果出现类似“Origin******isnotallowedbyAccess-Control-Allow-Origin.”的错误,则可能是由于json数据不支持跨
- Ajax跨域之ContentType为application/json请求失败的问题
飞翔的熊blabla
项目里的接口都是用springmvc写的,其中在@requestmapping接口中定义了consumes="application/json",也就是该接口只接受ContentType为application/json的请求。接口写好用工具测试接口都是可以正常请求,但是在浏览器中用ajax请求就不行。百度一下,原来在使用Ajax跨域请求时,如果设置Header的ContentType为appli
- Ajax跨域和远程调用、Dubbo的应用
不懂就干
配置文件分布式java
1.关于SpringMVC请求路径的说明1.默认条件下SpringMVC只能拦截前缀型请求.www.jt.com/item/5623792.如果请求路径添加了后缀,则后缀会误当做请求参数,参与运算.562379.html一起当做参数来使用,导致参数异常.1.SpringMVC开启后缀类型匹配,实现伪静态说明:开启后缀类型匹配标识如果请求以.html/.do/.action等操作结尾时依然会被Spr
- Java—RPC远程过程调用—AJAX跨域请求处理
jiu_dian
javaajaxrpc
Java—RPC远程过程调用—AJAX跨域请求处理本篇文章的代码是基于上一篇文章的代码完成的,如有什么不懂请查看上一篇,谢谢。1、导入依赖,导入依赖的位置在httpclient_rpc_client项目下的pom.xml文件中org.springframework.bootspring-boot-dependencies2.3.2.RELEASEimportpomorg.springframewo
- RPC跨域问题
_SnowMultiflora
java跨域RPC
理解ajax的跨域访问服务器段,使用CORSFilter过滤器解决跨域问题前端使用JSONP解决跨域问题Ajax跨域介绍Ajax跨域问题建立ajax-origin项目4.0.0com.zxwajax-origin1.0-SNAPSHOTwarajax-originMavenWebapphttp://www.example.com4.3.18.RELEASE1.22.52.02.9.0jstljst
- RPC(5):AJAX跨域请求处理
不死鸟.亚历山大.狼崽子
RPCrpc网络协议网络
接上一篇RPC(4):HttpClient实现RPC之POST请求进行修改。1修改客户端项目1.1修改maven文件修改后配置文件如下:org.springframework.bootspring-boot-dependencies2.3.2.RELEASEimportpomorg.springframework.bootspring-boot-starter-weborg.apache.http
- 【Vue第4章】Vue中的ajax_Vue2
开五档的蒙奇
vue.js前端
目录4.1解决开发环境Ajax跨域问题4.1.1解决跨域的三种方法4.1.2使用代理服务器4.1.3笔记与代码4.1.3.1笔记4.1.3.219_src_配置代理服务器4.2github用户搜索案例4.2.1效果4.2.2接口地址4.2.3笔记与代码4.2.3.120_src_github搜索案例4.3vue项目总常用的2个Ajax库4.3.1axios4.3.2vue-resource4.4s
- SpringBoot支持AJAX跨域请求
奇点一氪
@SpringBootApplication@ComponentScan@EnableDiscoveryClientpublicclassManagementApplication{publicstaticvoidmain(String[]args){SpringApplication.run(ManagementApplication.class,args);}privateCorsConfig
- 怎样用Ajax提交from表单并接收其中的json数据
zxj19880502
ajax前端jspeclipsejavatomcatjson
怎样用Ajax提交表单并接收其中的json数据需求:实现点击按钮后,数据以表单形式提交至服务器,并接收来自服务器的返回数据。过程中页面不刷新。AJAX不是新的编程语言,而是一种使用现有标准的新方法。AJAX是与服务器交换数据并更新部分网页的艺术,在不重新加载整个页面的情况下。这次给大家带来ajax跨域获取json数据应该如何操作,ajax跨域获取json数据的注意事项有哪些,下面就是实战案例,一起
- 关于前后端分离,跨域问题的解决方法
Ethereal@_@
java跨域问题前后端分离
前后端分离跨域问题什么是跨域(1)浏览器从一个域名的网页去请求另一个域名的资源时,域名、端口、协议任一不同,都是跨域。前后端分离开发中,需要考虑ajax跨域的问题。(2)跨域的本质:浏览器对Ajax请求的一种限制(3)这里我们可以从服务端解决这个问题方式一:直接在后端接口controller类上添加注解:@CrossOrigin//跨域方式二:在项目中的config包下新建一个CorsConfig
- 一个app前端框架基础版
於 兔シ
flaskandroidpython
APICloud内置了一个APICloud前端框架给我们操作APP页面和展示数据,也提供了ajax跨域请求数据功能。它本质上就是一个仿照jQuery编写的一个小工具库,所以并不好用。框架地址:https://docs.apicloud.com/Front-end-Framework/framework-dev-guide目录结构APP/|-index.html#默认app配置的入口页面|-conf
- java工厂模式
3213213333332132
java抽象工厂
工厂模式有
1、工厂方法
2、抽象工厂方法。
下面我的实现是抽象工厂方法,
给所有具体的产品类定一个通用的接口。
package 工厂模式;
/**
* 航天飞行接口
*
* @Description
* @author FuJianyong
* 2015-7-14下午02:42:05
*/
public interface SpaceF
- nginx频率限制+python测试
ronin47
nginx 频率 python
部分内容参考:http://www.abc3210.com/2013/web_04/82.shtml
首先说一下遇到这个问题是因为网站被攻击,阿里云报警,想到要限制一下访问频率,而不是限制ip(限制ip的方案稍后给出)。nginx连接资源被吃空返回状态码是502,添加本方案限制后返回599,与正常状态码区别开。步骤如下:
- java线程和线程池的使用
dyy_gusi
ThreadPoolthreadRunnabletimer
java线程和线程池
一、创建多线程的方式
java多线程很常见,如何使用多线程,如何创建线程,java中有两种方式,第一种是让自己的类实现Runnable接口,第二种是让自己的类继承Thread类。其实Thread类自己也是实现了Runnable接口。具体使用实例如下:
1、通过实现Runnable接口方式 1 2
- Linux
171815164
linux
ubuntu kernel
http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.1.2-unstable/
安卓sdk代理
mirrors.neusoft.edu.cn 80
输入法和jdk
sudo apt-get install fcitx
su
- Tomcat JDBC Connection Pool
g21121
Connection
Tomcat7 抛弃了以往的DBCP 采用了新的Tomcat Jdbc Pool 作为数据库连接组件,事实上DBCP已经被Hibernate 所抛弃,因为他存在很多问题,诸如:更新缓慢,bug较多,编译问题,代码复杂等等。
Tomcat Jdbc P
- 敲代码的一点想法
永夜-极光
java随笔感想
入门学习java编程已经半年了,一路敲代码下来,现在也才1w+行代码量,也就菜鸟水准吧,但是在整个学习过程中,我一直在想,为什么很多培训老师,网上的文章都是要我们背一些代码?比如学习Arraylist的时候,教师就让我们先参考源代码写一遍,然
- jvm指令集
程序员是怎么炼成的
jvm 指令集
转自:http://blog.csdn.net/hudashi/article/details/7062675#comments
将值推送至栈顶时 const ldc push load指令
const系列
该系列命令主要负责把简单的数值类型送到栈顶。(从常量池或者局部变量push到栈顶时均使用)
0x02 &nbs
- Oracle字符集的查看查询和Oracle字符集的设置修改
aijuans
oracle
本文主要讨论以下几个部分:如何查看查询oracle字符集、 修改设置字符集以及常见的oracle utf8字符集和oracle exp 字符集问题。
一、什么是Oracle字符集
Oracle字符集是一个字节数据的解释的符号集合,有大小之分,有相互的包容关系。ORACLE 支持国家语言的体系结构允许你使用本地化语言来存储,处理,检索数据。它使数据库工具,错误消息,排序次序,日期,时间,货
- png在Ie6下透明度处理方法
antonyup_2006
css浏览器FirebugIE
由于之前到深圳现场支撑上线,当时为了解决个控件下载,我机器上的IE8老报个错,不得以把ie8卸载掉,换个Ie6,问题解决了,今天出差回来,用ie6登入另一个正在开发的系统,遇到了Png图片的问题,当然升级到ie8(ie8自带的开发人员工具调试前端页面JS之类的还是比较方便的,和FireBug一样,呵呵),这个问题就解决了,但稍微做了下这个问题的处理。
我们知道PNG是图像文件存储格式,查询资
- 表查询常用命令高级查询方法(二)
百合不是茶
oracle分页查询分组查询联合查询
----------------------------------------------------分组查询 group by having --平均工资和最高工资 select avg(sal)平均工资,max(sal) from emp ; --每个部门的平均工资和最高工资
- uploadify3.1版本参数使用详解
bijian1013
JavaScriptuploadify3.1
使用:
绑定的界面元素<input id='gallery'type='file'/>$("#gallery").uploadify({设置参数,参数如下});
设置的属性:
id: jQuery(this).attr('id'),//绑定的input的ID
langFile: 'http://ww
- 精通Oracle10编程SQL(17)使用ORACLE系统包
bijian1013
oracle数据库plsql
/*
*使用ORACLE系统包
*/
--1.DBMS_OUTPUT
--ENABLE:用于激活过程PUT,PUT_LINE,NEW_LINE,GET_LINE和GET_LINES的调用
--语法:DBMS_OUTPUT.enable(buffer_size in integer default 20000);
--DISABLE:用于禁止对过程PUT,PUT_LINE,NEW
- 【JVM一】JVM垃圾回收日志
bit1129
垃圾回收
将JVM垃圾回收的日志记录下来,对于分析垃圾回收的运行状态,进而调整内存分配(年轻代,老年代,永久代的内存分配)等是很有意义的。JVM与垃圾回收日志相关的参数包括:
-XX:+PrintGC
-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps
-XX:+PrintGCDateStamps
-Xloggc
-XX:+PrintGC
通
- Toast使用
白糖_
toast
Android中的Toast是一种简易的消息提示框,toast提示框不能被用户点击,toast会根据用户设置的显示时间后自动消失。
创建Toast
两个方法创建Toast
makeText(Context context, int resId, int duration)
参数:context是toast显示在
- angular.identity
boyitech
AngularJSAngularJS API
angular.identiy 描述: 返回它第一参数的函数. 此函数多用于函数是编程. 使用方法: angular.identity(value); 参数详解: Param Type Details value
*
to be returned. 返回值: 传入的value 实例代码:
<!DOCTYPE HTML>
- java-两整数相除,求循环节
bylijinnan
java
import java.util.ArrayList;
import java.util.List;
public class CircleDigitsInDivision {
/**
* 题目:求循环节,若整除则返回NULL,否则返回char*指向循环节。先写思路。函数原型:char*get_circle_digits(unsigned k,unsigned j)
- Java 日期 周 年
Chen.H
javaC++cC#
/**
* java日期操作(月末、周末等的日期操作)
*
* @author
*
*/
public class DateUtil {
/** */
/**
* 取得某天相加(减)後的那一天
*
* @param date
* @param num
*
- [高考与专业]欢迎广大高中毕业生加入自动控制与计算机应用专业
comsci
计算机
不知道现在的高校还设置这个宽口径专业没有,自动控制与计算机应用专业,我就是这个专业毕业的,这个专业的课程非常多,既要学习自动控制方面的课程,也要学习计算机专业的课程,对数学也要求比较高.....如果有这个专业,欢迎大家报考...毕业出来之后,就业的途径非常广.....
以后
- 分层查询(Hierarchical Queries)
daizj
oracle递归查询层次查询
Hierarchical Queries
If a table contains hierarchical data, then you can select rows in a hierarchical order using the hierarchical query clause:
hierarchical_query_clause::=
start with condi
- 数据迁移
daysinsun
数据迁移
最近公司在重构一个医疗系统,原来的系统是两个.Net系统,现需要重构到java中。数据库分别为SQL Server和Mysql,现需要将数据库统一为Hana数据库,发现了几个问题,但最后通过努力都解决了。
1、原本通过Hana的数据迁移工具把数据是可以迁移过去的,在MySQl里面的字段为TEXT类型的到Hana里面就存储不了了,最后不得不更改为clob。
2、在数据插入的时候有些字段特别长
- C语言学习二进制的表示示例
dcj3sjt126com
cbasic
进制的表示示例
# include <stdio.h>
int main(void)
{
int i = 0x32C;
printf("i = %d\n", i);
/*
printf的用法
%d表示以十进制输出
%x或%X表示以十六进制的输出
%o表示以八进制输出
*/
return 0;
}
- NsTimer 和 UITableViewCell 之间的控制
dcj3sjt126com
ios
情况是这样的:
一个UITableView, 每个Cell的内容是我自定义的 viewA viewA上面有很多的动画, 我需要添加NSTimer来做动画, 由于TableView的复用机制, 我添加的动画会不断开启, 没有停止, 动画会执行越来越多.
解决办法:
在配置cell的时候开始动画, 然后在cell结束显示的时候停止动画
查找cell结束显示的代理
- MySql中case when then 的使用
fanxiaolong
casewhenthenend
select "主键", "项目编号", "项目名称","项目创建时间", "项目状态","部门名称","创建人"
union
(select
pp.id as "主键",
pp.project_number as &
- Ehcache(01)——简介、基本操作
234390216
cacheehcache简介CacheManagercrud
Ehcache简介
目录
1 CacheManager
1.1 构造方法构建
1.2 静态方法构建
2 Cache
2.1&
- 最容易懂的javascript闭包学习入门
jackyrong
JavaScript
http://www.ruanyifeng.com/blog/2009/08/learning_javascript_closures.html
闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现。
下面就是我的学习笔记,对于Javascript初学者应该是很有用的。
一、变量的作用域
要理解闭包,首先必须理解Javascript特殊
- 提升网站转化率的四步优化方案
php教程分享
数据结构PHP数据挖掘Google活动
网站开发完成后,我们在进行网站优化最关键的问题就是如何提高整体的转化率,这也是营销策略里最最重要的方面之一,并且也是网站综合运营实例的结果。文中分享了四大优化策略:调查、研究、优化、评估,这四大策略可以很好地帮助用户设计出高效的优化方案。
PHP开发的网站优化一个网站最关键和棘手的是,如何提高整体的转化率,这是任何营销策略里最重要的方面之一,而提升网站转化率是网站综合运营实力的结果。今天,我就分
- web开发里什么是HTML5的WebSocket?
naruto1990
Webhtml5浏览器socket
当前火起来的HTML5语言里面,很多学者们都还没有完全了解这语言的效果情况,我最喜欢的Web开发技术就是正迅速变得流行的 WebSocket API。WebSocket 提供了一个受欢迎的技术,以替代我们过去几年一直在用的Ajax技术。这个新的API提供了一个方法,从客户端使用简单的语法有效地推动消息到服务器。让我们看一看6个HTML5教程介绍里 的 WebSocket API:它可用于客户端、服
- Socket初步编程——简单实现群聊
Everyday都不同
socket网络编程初步认识
初次接触到socket网络编程,也参考了网络上众前辈的文章。尝试自己也写了一下,记录下过程吧:
服务端:(接收客户端消息并把它们打印出来)
public class SocketServer {
private List<Socket> socketList = new ArrayList<Socket>();
public s
- 面试:Hashtable与HashMap的区别(结合线程)
toknowme
昨天去了某钱公司面试,面试过程中被问道
Hashtable与HashMap的区别?当时就是回答了一点,Hashtable是线程安全的,HashMap是线程不安全的,说白了,就是Hashtable是的同步的,HashMap不是同步的,需要额外的处理一下。
今天就动手写了一个例子,直接看代码吧
package com.learn.lesson001;
import java
- MVC设计模式的总结
xp9802
设计模式mvc框架IOC
随着Web应用的商业逻辑包含逐渐复杂的公式分析计算、决策支持等,使客户机越
来越不堪重负,因此将系统的商业分离出来。单独形成一部分,这样三层结构产生了。
其中‘层’是逻辑上的划分。
三层体系结构是将整个系统划分为如图2.1所示的结构[3]
(1)表现层(Presentation layer):包含表示代码、用户交互GUI、数据验证。
该层用于向客户端用户提供GUI交互,它允许用户