介紹
跨域CORS,全稱是"跨域資源共享"(Cross-origin resource sharing)
當頁面發出跨域請求時:
1、簡單請求(先簡單理解為正常的get/post吧):
瀏覽器將請求的地址添加到header的Origin里面發送請求。接下來就看后臺如何處理了。
2、非簡單請求(姑且簡單理解成Content-Type:"application/json"吧):
瀏覽器會先發個預檢請求(preflight),也就是OPTIONS請求。服務器返回是否許可訪問和支持的請求方式,瀏覽器再決定是否發出請求。
使用@CrossOrigin注解
用法很簡單,只需在controller或者方法上面添加注解即可。在controller上用表示整個controller下的方法都支持跨域
1
2
3
4
5
6
7
8
|
@Controller public class HomeController { @CrossOrigin @RequestMapping ( "/" ) public String Index() { return "Index" ; } } |
參數說明
-
origins: 表示允許跨域的地址
前面的http(s)必須加,默認*表示全部 - value: origins的別名
-
allowedHeaders: 在OPTIONS請求中,返回的Access-Control-Allow-Headers
這個參數限定了客戶端只能發送的header參數,不在此范圍內瀏覽器阻止發出請求。默認* -
exposedHeaders: 對應Access-Control-Expose-Headers
該字段可選。CORS請求時,XMLHttpRequest對象的getResponseHeader()方法只能拿到6個基本字段:Cache-Control、Content-Language、Content-Type、Expires、Last-Modified、Pragma。如果想拿到其他字段,就必須在Access-Control-Expose-Headers里面指定。上面的例子指定,getResponseHeader('FooBar')可以返回FooBar字段的值。 - methods: 允許的請求方法,像get,post這些
- allowCredentials: 對應Access-Control-Allow-Credentials 該字段可選。它的值是一個布爾值,表示是否允許發送Cookie。默認情況下,Cookie不包括在CORS請求之中。設為true,即表示服務器明確許可,Cookie可以包含在請求中,一起發給服務器。這個值也只能設為true,如果服務器不要瀏覽器發送Cookie,刪除該字段即可。
- maxAge: 對應Access-Control-Max-Age 用來指定預檢請求的有效期(秒),在有效期內不在發送預檢請求直接請求。默認1800秒,即30分鐘。
使用spring配置文件
這個適合用于全局的配置,對應的字段跟CrossOrigin差不多。path表示允許跨域的路徑。
1
2
3
|
< mvc:cors > < mvc:mapping path = "/**" allowed-methods = "*" /> </ mvc:cors > |
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。
原文鏈接:http://www.cnblogs.com/chenchuxin/p/6602928.html