最近中文字幕高清中文字幕无,亚洲欧美高清一区二区三区,一本色道无码道dvd在线观看 ,一个人看的www免费高清中文字幕

為了賬號安全,請及時綁定郵箱和手機立即綁定

ajax跨域完全講解

曉風輕 全棧工程師
難度中級
時長 1小時40分
學習人數(shù)
綜合評分9.67
119人評價 查看評價
9.7 內容實用
9.6 簡潔易懂
9.7 邏輯清晰
  • 總的來說, 跨域問題有3個原因: ?瀏覽器的限制, 跨域, xhr(XMLHttpRequest) 請求; 這三個條件同時滿足才會產(chǎn)生跨域安全問題

    1. 瀏覽器的限制

    發(fā)生這個跨域問題不是因為后臺不允許前臺調用, 真正的原因是瀏覽器出于安全考慮, 當他發(fā)現(xiàn)你的請求是跨域的時候, 會對發(fā)送的請求進行校驗, 如果校驗不通過, 就會報跨域錯誤. 這個時候可能你的請求已經(jīng)發(fā)送成功并且返回了數(shù)據(jù), 但控制臺報了一條跨域錯誤, 說明服務器后臺式?jīng)]有任何限制的, ? 是瀏覽器報的錯; 說白了就是瀏覽器多管閑事, 而不是后臺不允許

    2. 跨域:發(fā)出去的請求不是本域的. ?請求里面 協(xié)議, 域名, 端口任何一個不一樣, 瀏覽器都會認為是跨域; 比如前臺是localhost:8080端口, 請求的是localhost:8081端口 , 雖然域名相同, 但端口不一樣, 所以跨域了

    3. 發(fā)送的是 XHR(XMLHttpRequest) 請求 (也是最重要的原因); 只要發(fā)送的不是XHR請求, 比如jsonp請求, 就算是跨域, 瀏覽器也不會報跨域問題


    spacer.gif



    查看全部
  • 我想說在這里的故事將會是怎么樣,但是并不是我們所需要的。

    查看全部
  • 由控制臺可以看到,Console 報了一個錯誤,這就是跨域訪問安全問題

    查看全部
  • 創(chuàng)建Springboot工程,并編寫后臺服務代碼
    查看全部
  • 哈哈哈哈
    查看全部
    0 采集 收起 來源:json解決跨域1

    2019-09-04

  • nginx實現(xiàn)隱藏跨域: 在下面的a.com.conf文件中配置參數(shù)后,在前端代碼中把請求http://localhost:8081/test地址改成代理地址/ajaxserver

    nginx反向代理配置:

    https://img1.sycdn.imooc.com//5d6bef220001200408510437.jpg

    https://img1.sycdn.imooc.com//5d6bef3b0001699a07360130.jpg


    支持跨域與隱藏跨域的區(qū)別:

    支持跨域:調用的url地址都是絕對地址

    隱藏跨域:調用的url都是本域的,是相對地址,





    查看全部
  • String?框架解決方案: @CrossOrigin? 注解,可以在 Controller?上,也可以在?方法上,還可以進行細節(jié)配置。

    屬于服務端改動的一種。?


    查看全部
  • 帶自定義頭的跨域:

    1. ajax示例代碼:

    https://img1.sycdn.imooc.com//5d6bdda700012a6d09090554.jpg

    2. 請求頭信息

    https://img1.sycdn.imooc.com//5d6bde7800016d9f14160413.jpg

    3. 再次請求將會報如下錯誤信息:

    https://img1.sycdn.imooc.com//5d6bdef9000101dd14050251.jpg

    解決辦法:

    res.addHeader("Access-Control-Allow-Headers",?"Content-Type,x-header1,x-header2");

    這種方式把請求頭寫死了,不推薦

    4. 支持所有跨域,示例代碼:

    @Override
    public?void?doFilter(ServletRequest?request,?ServletResponse?response,?FilterChain?chain)?throws?IOException,?ServletException?{
    
    ????HttpServletRequest?req?=?(HttpServletRequest)?request;
    
    ????HttpServletResponse?res?=?(HttpServletResponse)?response;
    
    ????String?origin?=?req.getHeader("Origin");
    
    ????//res.addHeader("Access-Control-Allow-Origin",?"*");??//允許所有的域跨域
    ????//res.addHeader("Access-Control-Allow-Methods",?"*");??//允許所有的方法跨域
    
    ????if(!StringUtils.isEmpty(origin)){
    ????????//帶cookie的時候,origin必須是全匹配,不能使用*
    ????????res.addHeader("Access-Control-Allow-Origin",?origin);???//允許跨域
    ????}
    
    ????res.addHeader("Access-Control-Allow-Methods",?"*");??//允許跨域的方法
    
    ????String?headers?=?req.getHeader("Access-Control-Request-Headers");
    
    ????//支持所有自定義頭
    ????if(!StringUtils.isEmpty(headers)){
    ????????res.addHeader("Access-Control-Allow-Headers",?headers);
    ????}
    
    ????res.addHeader("Access-Control-Max-Age",?"3600");
    
    ????//enable?cookie
    ????res.addHeader("Access-Control-Allow-Credentials",?"true");
    
    ????chain.doFilter(request,?response);
    
    }












































    查看全部
  • 當產(chǎn)生跨域的時候,請求頭中會多一個字段,叫做origin,這個字段有當前域的信息。所以在發(fā)送帶cookie的請求,后臺又不知道調用方的域的信息時,可以先取到請求頭中origin字段的值再賦值給響應頭的access-control-allow-origin字段中。


    帶Cookie的跨域: 1. "Access-Control-Allow-Credentials","true" 2. Access-Control-Allow-Origin 不能為* ,必須為【調用方】的域名+端口 3. 發(fā)送的Cookie是【被調用方】的cookie

    查看全部
    0 采集 收起 來源:帶cookie的跨域2

    2019-09-01

  • 一、http會話session依賴于cookie, sessionid存放在cookie中。

    二、ajax

    1、$.ajax({

    ????type: "get",

    ????xhrFields: {

    ????????widthCredentials: true // 發(fā)送ajax請求的時候會帶上cookie

    ????}

    })

    2、cookie是加在被調用方。

    https://img1.sycdn.imooc.com//5d6bd4a50001420610810534.jpg

    服務端就是被調用方,而客戶端就是調用方。在瀏覽器的控制臺中通過document.cookie=""? 來設置cookie。


    3、讀cookie只能讀到本域的。

    4、帶cookie時,后臺代碼注意以下2點:

    (1)帶cookie的時候,Access-Control-Allow-Origin,必須是全匹配,如http://localhost:8081, 不能是 *,否則報錯,如下:

    https://img1.sycdn.imooc.com//5d6bd58f0001da3713720394.jpg


    (2)帶cookie進行跨域時,需要設置以下請求頭:

    res.addHeader("Access-Control-Allow-Credentials", "true")


    查看全部
  • 我們知道非簡單請求, 每次會發(fā)出兩次請求, 這會影響性能. HTTP協(xié)議增加了個響應頭, 可以讓我們在服務端設置`Access-Control-Max-Age`來緩存預檢請求, 比如說我們可以設置為3600m, 也就是一小時客戶端只會在第一次的時候發(fā)送兩個請求, 接下來一個小時內`OPTIONS`請求就被緩存起來了.

    查看全部
  • 問題1:瀏覽器是先執(zhí)行請求還是先判斷跨域?

    ????瀏覽器請求-->判斷響應中是否有允許跨域-->發(fā)現(xiàn)不允許跨域,阻止跨域

    ????說明:當執(zhí)行跨域請求時,瀏覽器會提示當前接口不被允許,這說明瀏覽器已發(fā)出了當前請求,但是它的的響應內容被攔截;如果在Response?header中的Access-Control-Allow-Origin設置的允許訪問源不包含當前源,則拒絕數(shù)據(jù)返回給當前源。


    當瀏覽器要發(fā)送跨域請求時,如果請求是復雜請求,瀏覽器會先發(fā)送一個options預檢命令即一個options請求,當該請求通過時才會再發(fā)送真正的請求。

    該option請求會根據(jù)請求的信息去詢問服務端支不支持該請求。比如發(fā)送的數(shù)據(jù)是json類型(通過content-type設置)的話,會攜帶一個請求頭Access-Control-Request-Headers: content-type去詢問支不支持該數(shù)據(jù)類型,如果支持,則請求就會通過,并發(fā)送真正的請求


    查看全部
  • 簡單請求和非簡單請求

    1.簡單請求是先請求,瀏覽器再判斷是否是跨域;而非簡單請求要先發(fā)送一個預檢命令,檢查通過之后才會真正的把跨域請求發(fā)出去

    https://img1.sycdn.imooc.com//5b20d3fc0001e2c106900579.jpg

    2.非簡單請求常見的是發(fā)送json格式的請求,如圖contentType為“application/json;charset=utf-8”https://img1.sycdn.imooc.com//5b20d5b70001ea4706440351.jpg

    最后的結果如下,返回了兩個請求,一個是OPTIONS,另一個是POST請求,其中的OPTIONS就是一個預檢命令,成功了之后才會發(fā)送后面的跨域請求

    https://img1.sycdn.imooc.com//5b20d6e700017ede12160078.jpg

    3.預檢命令的緩存。因為這種非簡單請求每次都會發(fā)送兩次請求,其實效率是比較低的,但是如果能緩存預檢命令的話,會響應的提高效率

    在服務器中,添加一個響應頭信息,告訴瀏覽器在截下來的一個小時可以緩存信息,就不需要再發(fā)送預檢命令

    https://img1.sycdn.imooc.com//5b20ddae0001647408530207.jpg


    查看全部
  • 被調用方——Filter解決方案:

    1. 瀏覽器是先執(zhí)行后判斷

    2. 跨域請求和普通請求的區(qū)別:

    跨域請求的請求頭中多了一條信息:如下

    origin : http://localhost:8081

    這個值是當前請求的域名信息,如果 瀏覽器發(fā)現(xiàn)當前請求是跨域的時候,它就會在當前請求頭中添加一個當前域的信息的字段;然后在請求返回的時候,它會檢查響應頭里面有沒有允許跨域的信息存在,如果沒有,它就會報錯。


    查看全部
  • 被調用方解決——支持跨域

    查看全部
    0 采集 收起 來源:被調用解決

    2019-09-01

舉報

0/150
提交
取消
課程須知
需要具備基本的前后臺開發(fā)技術
老師告訴你能學到什么?
AJAX跨域產(chǎn)生的原因和解決思路 系統(tǒng)的基本部署架構和跨域的關系 http服務器nginx和apache的重要作用和跨域的2種解決思路 jsonp的工作機制和優(yōu)缺點 前臺測試框架Jasmine的使用

微信掃碼,參與3人拼團

微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號

友情提示:

您好,此課程屬于遷移課程,您已購買該課程,無需重復購買,感謝您對慕課網(wǎng)的支持!