Fork me on GitHub

WebApi跨域问题

如果急着解决跨域问题则需要配置该配置到应用程序的Web.config文件中。如果想了解一下WebApi跨域问题则继续往下看

  <system.webServer>
    <httpProtocol>
      <customHeaders>
        <add name="Access-Control-Allow-Origin" value="*" />
        <add name="Access-Control-Allow-Headers" value="*" />
        <add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE" />
      </customHeaders>
    </httpProtocol>
  ...
  </system.webServer>

 

 

1,为什么会存在跨域问题?

浏览器会对JavaScript的执行进行相应的限制,导致跨域问题

2,同源策略

“源”是指站点或者域。必须要求相应的URI在如下三个方面均是相同的:

①主机名称(域/子域名或者IP地址)

②端口号

③网络协议(http或者https)

例如:https://192.168.1.1:8080(源)

在同源的情况下不会出现跨域问题

3,什么是CORS(跨域资源共享)规范?

CORS是各个浏览器厂家共同遵守的标准

①对消费者授权

如果浏览器对CORS支持,由它发起的请求会携带一个“Origin”的报头表明请求页面所在的站点(例如:Origin:https://192.168.1.1:8080)

对消费者授权通过“Access-Control-Allow-Origin”响应报头来设置(设置“*”对所有消费者授权)

②对响应报头的授权

 设置一组直接暴露给客户端JavaScript程序的响应报头,但是对简单响应报头设置是无效的

CORS简单响应报头包括:Cache-Control、Content-Language、Content-Type、Expries、Last-Modified、Pragma

"Access-Control-Expose-Headers"对响应报头的授权(设置“*”对所有响应报头授权)

③预检请求

所谓预检机制就是在浏览器发送真正的跨域资源请求前,先发送一个预检请求(可以使用“Access-Control-Max-Age”设置缓存时间)

CORS规范将跨域资源请求划分为两种类,即“简单请求”和“非简单请求”

1>简单Http方法:GET、HEAD、POST

2>简单请求报头:Accept、Accept-Language、Content-Language、Content-Type(application/x-www-form-urlencoded、multipart/form-data、text/plain)

3>自定义请求报头:浏览器自动生成的报头、由JavaScript自行添加的报头

“简单请求”包括:①请求采用简单HTTP方法②请求不具有自定请求报头或者是简单请求报头

“Access-Control-Allow-Methods”:跨域资源请求允许采用的HTTP方法列表

“Access-Control-Allow-Headers”:跨域资源请求允许携带的自定义报头列表

“Access-Control-Max-Age”:将响应结果进行缓存(单位秒),这样可以让浏览器避免频繁的发送预检请求

④是否支持用户凭证

如果客户端JavaScript程序利用一个withCredentials属性为true的XMLHttpRequest发送了一个跨域请求,但是浏览器得到的响应中不具有一个值为“ture”的响应报头“Access-Control-Allow-Credentials”,它对获取资源的操作将会被浏览器拒绝

 

posted on 2016-12-30 23:21  *Hunter  阅读(2182)  评论(2编辑  收藏  举报

导航

AmazingCounters.com