国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

HTTP訪問控制(CORS)踩坑小記

wujl596 / 2046人閱讀

摘要:前幾天在幫后端排查一個(gè)的問題的時(shí)候發(fā)現(xiàn)的一些小坑特此記錄的本質(zhì)是出于安全原因,瀏覽器限制從腳本內(nèi)發(fā)起的跨源請(qǐng)求。排查發(fā)現(xiàn)訪問失敗的都是需要用戶的登錄態(tài)的。

前幾天在幫后端排查一個(gè)cors的問題的時(shí)候發(fā)現(xiàn)的一些小坑特此記錄

**

cors的本質(zhì)是出于安全原因,瀏覽器限制從腳本內(nèi)發(fā)起的跨源HTTP請(qǐng)求。 例如,XMLHttpRequest和Fetch
API遵循同源策略。 這意味著使用這些API的Web應(yīng)用程序只能從加載應(yīng)用程序的同一個(gè)域請(qǐng)求HTTP資源,除非使用CORS頭文件。
跨域并非一定是瀏覽器限制了跨站請(qǐng)求,也有可能是跨站請(qǐng)求可以正常發(fā)起,但是返回結(jié)果被瀏覽器攔截了。最好的例子是 CSRF
跨站攻擊原理,請(qǐng)求是發(fā)送到了后端服務(wù)器無論是否跨域!注意:有些瀏覽器不允許從 HTTPS 的域跨域訪問 HTTP,比如 Chrome 和
Firefox,這些瀏覽器在請(qǐng)求還未發(fā)出的時(shí)候就會(huì)攔截請(qǐng)求。

**

本case場(chǎng)景描述如下:
用戶在a.com域名下跨域訪問b.com域名下的api接口,使用了XMLHttpRequest的跨域頭請(qǐng)求。域名b.com也允許了可以跨域 Access-Control-Allow-Origin 但是很奇怪在訪問b.com的接口時(shí)有些api能訪問成功,有些api訪問失敗。排查發(fā)現(xiàn)訪問失敗的api都是需要用戶的登錄態(tài)的。但是用戶已經(jīng)在b.com登錄過了。把XMLHttpRequest請(qǐng)求換成jsonp請(qǐng)求則都可以請(qǐng)求成功(這好像是廢話)。。。由此推測(cè)XMLHttpRequest 添加cors頭的時(shí)候沒有把b.com的 用戶cookie信息帶過去。

翻看MDN文檔https://developer.mozilla.org... 找到答案如下:

Fetch 與 CORS 的一個(gè)的特性是,可以基于 HTTP cookies 和 HTTP 認(rèn)證信息發(fā)送身份憑證。一般而言,對(duì)于跨域 XMLHttpRequest 或 Fetch 請(qǐng)求,瀏覽器不會(huì)發(fā)送身份憑證信息。如果要發(fā)送憑證信息,需要設(shè)置 XMLHttpRequest 的某個(gè)特殊標(biāo)志位。

var invocation = new XMLHttpRequest();
var url = "http://bar.other/resources/credentialed-content/";
    
function callOtherDomain(){
  if(invocation) {
    invocation.open("GET", url, true);
    invocation.withCredentials = true;//這個(gè)是重點(diǎn)
    invocation.onreadystatechange = handler;
    invocation.send(); 
  }
}

將 XMLHttpRequest 的 withCredentials 標(biāo)志設(shè)置為 true,從而向服務(wù)器發(fā)送 Cookies。服務(wù)器端的響應(yīng)需要攜帶 Access-Control-Allow-Credentials: true ,瀏覽器才會(huì)把響應(yīng)內(nèi)容返回給請(qǐng)求的發(fā)送者。

另外需要注意的是
對(duì)于附帶身份憑證的請(qǐng)求,服務(wù)器不得設(shè)置 Access-Control-Allow-Origin 的值為“”。 這是因?yàn)檎?qǐng)求的首部中攜帶了 Cookie 信息,如果 Access-Control-Allow-Origin 的值為“”,請(qǐng)求將會(huì)失敗。而將 Access-Control-Allow-Origin 的值設(shè)置為 http://foo.example,則請(qǐng)求將成功執(zhí)行。

tips:
在跨域訪問時(shí),XMLHttpRequest對(duì)象的getResponseHeader()方法只能拿到一些最基本的響應(yīng)頭,Cache-Control、Content-Language、Content-Type、Expires、Last-Modified、Pragma,如果要訪問其他頭,則需要服務(wù)器設(shè)置本響應(yīng)頭Access-Control-Expose-Headers 頭讓服務(wù)器把允許瀏覽器訪問的頭放入白名單,例如:

Access-Control-Expose-Headers: X-My-Custom-Header, X-Another-Custom-Header

其他詳細(xì)信息見我的博客

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/52018.html

相關(guān)文章

  • HTTP訪問控制CORS踩坑小記

    摘要:前幾天在幫后端排查一個(gè)的問題的時(shí)候發(fā)現(xiàn)的一些小坑特此記錄的本質(zhì)是出于安全原因,瀏覽器限制從腳本內(nèi)發(fā)起的跨源請(qǐng)求。排查發(fā)現(xiàn)訪問失敗的都是需要用戶的登錄態(tài)的。 前幾天在幫后端排查一個(gè)cors的問題的時(shí)候發(fā)現(xiàn)的一些小坑特此記錄 ** cors的本質(zhì)是出于安全原因,瀏覽器限制從腳本內(nèi)發(fā)起的跨源HTTP請(qǐng)求。 例如,XMLHttpRequest和FetchAPI遵循同源策略。 這意味著使用這些A...

    xiongzenghui 評(píng)論0 收藏0
  • 前端渲染與SEO優(yōu)化踩坑小記

    摘要:前言在網(wǎng)站頁面后端渲染的時(shí)代,開發(fā)者只需要按照規(guī)范制作搜索引擎友好的頁面便可以快速讓搜索引擎收錄自己網(wǎng)站的各個(gè)頁面。 前言 在網(wǎng)站頁面后端渲染的時(shí)代,開發(fā)者只需要按照規(guī)范制作搜索引擎友好的頁面便可以快速讓搜索引擎收錄自己網(wǎng)站的各個(gè)頁面。 隨著前后端技術(shù)的更新,越來越多的前端框架進(jìn)入開發(fā)者們的視野,網(wǎng)站的前后分離架構(gòu)越來越得到開發(fā)者們的喜愛與認(rèn)可。 后端只提供數(shù)據(jù)接口、業(yè)務(wù)邏輯與持久化服...

    wums 評(píng)論0 收藏0
  • 前端渲染與SEO優(yōu)化踩坑小記

    摘要:前言在網(wǎng)站頁面后端渲染的時(shí)代,開發(fā)者只需要按照規(guī)范制作搜索引擎友好的頁面便可以快速讓搜索引擎收錄自己網(wǎng)站的各個(gè)頁面。 前言 在網(wǎng)站頁面后端渲染的時(shí)代,開發(fā)者只需要按照規(guī)范制作搜索引擎友好的頁面便可以快速讓搜索引擎收錄自己網(wǎng)站的各個(gè)頁面。 隨著前后端技術(shù)的更新,越來越多的前端框架進(jìn)入開發(fā)者們的視野,網(wǎng)站的前后分離架構(gòu)越來越得到開發(fā)者們的喜愛與認(rèn)可。 后端只提供數(shù)據(jù)接口、業(yè)務(wù)邏輯與持久化服...

    Benedict Evans 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

wujl596

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<