‘壹’ enablecors-webapi跨域 为何不能实现有哪些注意事项
上一篇我们介绍了如何使用vue resource处理请求,结合服务端的REST API,就能够很容易地构建一个增删查改应用。 这个应用始终遗留了一个问题,Web App在访问REST API时,没有经过任何认证,这使得服务端的REST API是不安全的,只要有人知道api地址,就可以调用API对服务端的资源进行修改和删除。 今天我们就来探讨一下如何结合Web API来限制资源的访问。 本文的主要内容如下: 介绍传统的Web应用和基于REST服务的Web应用 介绍OAuth认证流程和密码模式 创建一个基于ASP. Identity的Web API应用程序 基于$.ajax实现OAuth的注册、登录、注销和API调用 基于vue-resource实现OAuth的注册、登录、注销和API调用 本文的最终示例是结合上一篇的CURD,本文的登录、注册、注销和API调用功能实现的。 35 本文9个示例的源码已放到GitHub,如果您觉得本篇内容不错,请点个赞,或在GitHub上加个星星! Page Demo GitHub Source 基于$.ajax的示例如下: 注册示例 登录和注销示例 登录获取token并调用API示例 注册、登录、注销、调用API综合示例 基于vue-resource的示例如下: 注册示例 登录和注销示例 登录获取token并调用API示例 注册、登录...
‘贰’ 如何让WEBAPI 能够进行跨越访问
Cors是个比较热的技术,这在蒋金楠的博客里也有体现,Cors简单来说就是“跨域资源访问”的意思,这种访问我们指的是Ajax实现的异步访问,形象点说就是,一个A网站公开一些接口方法,对于B网站和C网站可以通过发Xmlhttprequest请求来调用A网站的方法,对于xmlhttprequest封装比较好的插件如jquery的$.ajax,它可以让开发者很容易的编写AJAX异步请求,无论是Get,Post,Put,Delete请求都可以发送。
Cors并不是什么新的技术,它只是对HTTP请求头进行了一个加工,还有我们的Cors架构里,对jsonp也有封装,让开发者在使用jsonp访问里,编写的代码量更少,更直观,呵呵。(Jsonp和Json没什么关系,它是从一个URI返回一个Script响应块,所以,JSONP本身是和域名没关系的,而传统上的JSON是走xmlhttprequest的,它在默认情况下,是不能跨域访问的)
‘叁’ WebApi内置跨域功能,为什么我就实现不了
在Web.config的system.webServer配置节下增加配置
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Headers" value="*" />
<add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE" />
</customHeaders>
</httpProtocol>
如果通过jquery 跨域访问,在服务器端和客户端需要分别配合:
1. 在服务器端,需要为每一个请求进行授权。例如在消息头中要有
Access-Control-Allow-Origin:*
2. 在客户端要写
jQuery.support.cors = true;
‘肆’ js调用跨域get请求调用webApi 多出个options请求是为什么
我尝试用我的语言描述一下吧:
先说跨域请求的原理,浏览器的安全机制是不允许出现跨域请求的,否则会有很严重的安全问题,解决跨域问题有几种不同的方法,你题目中提到的方法就是通过在Response header中添加Access-Control-Allow-Origin 来让浏览器知道服务器所在的域,对用于访问的域进行了授权。
但是因为这个Header要服务器提供,所以无论如何,请求是要先发出去才能指导是不是允许跨域请求,所以在报跨域错误的时候,虽然报错了,但是请求实际上依然发送到服务器了,只是浏览器看了一眼服务器的返回,然后发觉不行,这个请求返回的header里没有授权,所以浏览器不能用。
这样就带来一个问题,请求会对服务器造成影响,试想一下,要使用XHR跨域提交一个表单,无论返回头里面是否添加了跨域的header,都会提交一个请求到服务器,服务器要进行相应的操作。这种情况其实在一定条件下也是可以接受的,但是如果有更大的安全隐患,就不可以了,所以就需要OPTIONS请求了。
OPTIONS请求就是在符合一定条件下的跨域请求发送之前,浏览器会先发一个OPTIONS请求,问一下服务器,是不是能跨域,如果能,就发真正的请求,如果不能,就不发了。这个的作用就很好理解了。
如上面所说,不是所有的跨域请求都要先发OPTIONS请求的,规范里面规定,以下情况不需要先发一个 OPTIONS请求:
请求类型必须是GET、HEAD、POST中的一种。
请求的Header里面只能包涵一些规范重点Header,以及规范的值,包括:Accept、Accept-Language、Content-Language、Content-Type、DPR、Downlink、Save、Data、Viewport-Width、Width
Content-Type的类型必须是以下几种:application/x-www-form-urlencoded、multipart/form-data、text/plain
所以,如果你不希望浏览器多余的发一个OPTIONS请求,只要遵循这个规范就可以了。
但是有时候因为需求原因,也难避免要自定义一些Header。比如,很多JS的AJAX库,都会自定义一个Header,让服务器可以识别出这是否是一个异步请求,这样OPTIONS请求就一定要被先发送了。
顺便说,服务器端也要判断OPTIONS类型的请求,进行一系列操作,不要让OPTIONS请求影响到数据。
更多内容,可以看相关资料和文档:
https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS
https://developer.mozilla.org/en-US/docs/Web/HTTP/Server-Side_Access_Control
https://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html
‘伍’ 昨天有老同学问我怎么在Windows Server2012 R2里面部署 MVC 的网
一直以来都是在win8或windows server2012中进行asp.net mvc或webapi程序的部署,没有发现任何问题。今天在win2008中进行asp.net webapi的部署,访问api的时候页面显示404错误。下面步骤将解决asp.net webapi在win2008中的部署问题。
添加映射
在iis中选中需要设置的webapi站点,双击“处理程序映射”
在弹出框中添加对webapi的请求映射:
请求路径:api /*
可执行文件:%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll,注意32位和64位路径的区别。
名称:webapi,自定义名称即可
修改应用程序池的管道模式
将webapi的应用程序池的管道模式修改为经典
更新dll
映射添加之后,访问站点,不会报404错误了,但会报一些dll文件未能加载,一共有4个,名称分别如下:
System.Web.WebPages.Deployment.dll
Microsoft.Web.Infrastructure.dll
System.Web.WebPages.Razor.dll
System.Web.WebPages.dll
将上面四个dll文件复制到webapi站点到bin目录中,问题解决。
‘陆’ js调用跨域get请求调用asp.net webApi 多出个options请求是为什么
出于安全的考虑,JS是不允许跨域访问的。
但是如果你非要用JS实现,你可以写一个hander,然后JS调用这个hander。
‘柒’ 如何在Windows Server2008R2中部署WebAPI
一、安装说明:
1、安装基本信息
电脑软件
在WindowsServer2008(或WindowsServer2008R2)中,单击“开始”-“程序”-“管理工具”-“服务器管理”,或在“运行”中输入命令:servermanager.msc命令打“服务器管理”程序。
在“角色”选项中,单击“添加角色”:
选择服务器角色:Web服务器(IIS)
单击选中“web服务器(IIS))前面的单选框。
在弹出的对话框中,单击“添加必需的功能”:
“添加角色向导”对web服务器进行简单介绍,之后单击“下一步”:
选择角色需要的相关服务之后单击“下一步”:
确认安装选择,之后单击“下一步”:
系统开始安装所选的角色服务,可能需要几十秒可几钟时间:
安装完成,点击关闭即可:
名称:IIS7.0安装
大小:10MB|版本:7.0|类别:系统工具|语言:中文
应用平台:windows server 2008
2、安装介绍
windows server 2008系统中的iis安装,与windows server 2003中的安装明显不再相同了,windows server 2008安装iis,不再需要其他相关组件,不像windows server 2003需要有i386文件,下面来详细介绍一下,windows server 2008安装iis的步骤:
二、安装步骤:
开始--服务器管理--角色--添加角色
点击添加必需的功能
勾选在“Web服务器(IIS)”
点击下一步
下面是选择“角色服务”的,针对你需要的进行相应的选择
然后点击“下一步”开始确认安装
然后等待安装成功
‘捌’ js调用webapi、 webservice等接口时,怎样解决调用时的json跨域问题
void还可以被用在函数参数位置,表示我们明确希望这个函数在被调用时不需要任何参数。例如上面的函数printmessage也可以写为以下形式:
void printmessage (void)
{
cout << "I'm a function!";
}