日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

因为一个跨域请求,我差点丢了饭碗

發布時間:2024/8/23 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 因为一个跨域请求,我差点丢了饭碗 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

來源 | 編程技術宇宙

責編 | 王曉曼

封圖 | CSDN下載自視覺中國

瀏覽器基本原理

我叫小風,是Windows帝國一個普通的上班族。

今天,我入職了一家瀏覽器公司,公司的主營業務是為人類提供Internet上網服務,我的崗位是負責執行JavaScript代碼。

上午的晨會上,認識了負責網絡連接的老白,所有網絡請求都得找他幫忙,還有負責存儲管理的小黑,什么Cookie,LocalStorage,SessionStorage之類的都歸他管。哦,差點忘了,還有一個妹子小雪,她負責網頁渲染。

隨后主管安排了我的工作:老白從網絡取回網頁之后交給小雪來解析渲染,遇到網頁中的JavaScript代碼的時候,就由我來處理執行這些代碼。

聽完主管的安排,我心里美滋滋,因為工作上需要密切配合,主管把我和小雪妹子的工位安排在了一起,想想都開心^_^||

坐下不久,我主動和小雪聊了起來。

“小雪,你平時工作都做些什么啊?”

小雪轉過身來,“我呀,就負責把老白給我的HTML文件進行解析,構建DOM樹,然后再拿到CSS文件,構建CSSOM樹,最后把網頁給畫出來”

我似懂非懂的點了點頭,正想繼續找話題,這時,老白過來了。

“小雪,來活了,這是剛剛拿到的網頁文件,快處理一下”

小雪轉過身去開始忙碌了起來,不一會兒,她就停下來說到:“小風哥,有?<script>?標簽了,該你上了”

看來該是我露一手的機會了,我拿到?<script>?中的代碼,開始忙活起來,很快就完成了,繼續交給小雪完成下面的工作。

就這樣你來我往了幾個回合,我有些嫌麻煩:“小雪,要不你先一次處理完,我最后再來統一執行所有的?<script>?標簽中的代碼,這樣不是省事一點嘛”

“那可不行,你在執行JavaScript的時候有可能會去修改我構建的DOM樹的內容,咱倆必須按順序來,不然會出亂子的”,小雪一本正經的說到。

沒辦法,只好聽她的。

就這樣,我們一直配合的有條不紊,還時不時去找老白發送下數據,找小黑索要Cookie,很快就和大家混熟了。就這樣過了幾天,沒想到平靜的工作起了波瀾······

跨域禁止

這天我拿到了一段代碼,需要去請求一段數據,老規矩,我準備好了請求參數找到老白,準備讓他給我發出去。

沒想到老白一看大驚:“這是一個跨域請求啊,不能發出去!”

我愣了一下,“跨域請求?什么鬼”

老白指著我給的請求參數說到:“你看你給的這個請求URL,和你現在處理的這個網頁URL,不是一家人啊,域名不一樣”

“你管人家是不是一家人,發出去不就得了,快點,我還等著要呢”

“不行,知道你這個崗位之前那位怎么走的不?就是因為他在一個山寨網銀網站里面執行JavaScript的時候向真正的銀行網站發起了轉賬請求,把人家的錢給搞丟了。就因為這個被老板開了,我要不是平日里跟老板走得近,說不定也要連坐。”

當時我的表情是這樣的:

聽了老白的話,我嚇得不輕,差點飯碗就不保了,不過我心里還是有一些疑問。

“老白,為什么真正的銀行網站會信任這個山寨網站的請求呢?”

“因為這人之前剛好也打開了真實的銀行網站,還設置了Cookie讓小黑保存著。這后面山寨網站的請求發出去時,Cookie也一并帶上了,網站那端還以為是正常的請求呢,這不就遭了嗎。這種攻擊方式被叫做CSRF,跨站請求偽造”,老白說到。

“那后來呢?后來怎么樣了?”,我繼續問到。

“后來,后來就把那小子炒掉了啊,這不才給你騰了個坑嗎!不過公司為了防止以后此類事情再次發生,就制定了一個禁止跨域請求的規定!”

老白一邊說,一邊給我講了起來什么是禁止跨域請求。

我這才知道,原來請求的目標URL和所在網頁的URL的協議、域名、端口有一個不同,就算是跨域了。

今天幸好有老白,要不然我好不容易得來的工作就要丟了。告別了老白,回到工位,我拋了一個禁止跨域請求的錯誤就沒管了。

不過,沒過多久,公司就收到了很多投訴,說我們打開的網頁排版格式全部錯亂了,有時候甚至連圖片都加載不出來。

最后追責到了小雪妹子這里,小雪很委屈的說到:“這不能怪我啊,他們好多網頁都引用了外部的css和js文件,尤其那個叫jQuery的最多。但是每次找到老白要這些文件,老白都以公司的禁止跨域請求的規定拒絕給我,我也沒有辦法啊”

沒辦法,公司只好對跨域請求的規定作了一輪修訂,規定了以后通過HTML標簽引入外部文件的時候予以放行,具體來說有:

  • <img>:引入外部圖片

  • <link>:引入外部css

  • <script>:引入外部javascript

  • ......

規則修訂后,投訴總算變少了,渲染的網頁也逐漸恢復了正常。

跨域:JSONP

然而太平日子沒過多久,投訴又多了起來。我一打聽才知道,原來現在開始流行什么前后端分離技術,數據和展示解耦,數據不再直接放在網頁文件里,而是需要單獨通過JavaScript去從服務器拿回來動態展示。

問題出在這些網站的前端網頁和業務數據接口服務器常常不在一起,分屬不同的域名或者使用不同的端口,違反了我們的跨域禁令,導致數據請求不到,頁面經常一片空白,沒有數據。

領導為這事兒左右為難,既想盡快處理這些投訴,又不想放棄安全原則放開這些跨域的請求。

就在這時,經驗老道的老白獻了一策:“既然規則中允許從外部JS文件,我們何不就利用它來實現外部接口的請求呢?”

我們幾個都滿臉問號,不解其意。老白接著說到:“我畫個圖你們就明白了”

我看著老白畫的圖,才明白他說的什么意思,“老白,好計策啊,利用規則中對<script>標簽請求的放行將請求發出去,然后讓服務器返回經過callback函數包裝的JS代碼,最后實現數據的加載!

“小風你很聰明哦”,老白得意的點點頭。

“不過人家服務器憑什么返回你需要的格式?”,小雪問到。

老白撓了撓頭,“額,這個嘛,就需要服務器那邊配合咱們一下啦”

“你這個好像只能支持GET請求吧,遇到POST、PUT、DELETE這些請求咋辦呢?”,我也提了一個問題。

老白的臉一下就變色了,“這個,這個,好像是有這個問題,不過先湊合用著嘛,他們天天投訴你們不嫌煩嘛”

經過討論,我們還是打算把這套方案先推出去,因為需要這些網站后臺的配合,他們大部分都不太情愿,不過迫于沒有其他方案,在我們的游說之下還是勉強同意了。

為了方便推廣,我們還給這門技術取了一個名字:JSONP,就是JSON with Padding的意思。

跨域:CORS

漸漸地,投訴變少了,不過奇怪的是,公司的上網業務也變少了。一打聽才知道,人類都不用我們了,用上了隔壁的Chrome瀏覽器。

負責打探消息的老白回來了,“不好了,咱們的JSONP技術大家都不用了,轉投隔壁Chrome瀏覽器的CORS技術了”

領導一聽急了,“這是啥技術,能比我們的JSONP還好?”

老白激動的說到,“是啊,領導,這CORS全稱叫跨域資源共享(Cross-origin resource sharing),不像咱們那樣投機取巧實現,走得是正規路子,而且還解決了只支持GET請求的問題,什么請求都能發”

“你快說說,他們到底怎么搞的?”

老白來到畫板前,開始畫起圖來,一邊畫一邊給大家講解:“他們在正式的跨域請求之前,先發送了一個OPTIONS請求去詢問服務器是否允許接下來的跨域請求”

“OPTIONS?你要不說我都忘記HTTP協議里還有這么一種請求了”,我笑著說道。

“這怎么個詢問法呢?”,領導鄒著眉頭問。

老白繼續說到,“他們和那些網站服務器商定了一下,在OPTIONS請求里新增了幾個字段:”

  • Origin:發起請求原來的域

  • Access-Control-Request-Method:將要發起的跨域請求方式(GET/PUT/POST/DELETE/······)

  • Access-Control-Request-Headers:將要發起的跨域請求中包含的請求頭字段

“服務器在響應字段中來表明是否允許這個跨域請求,瀏覽器收到后檢查如果不符合要求,就拒絕后面的請求”

  • Access-Control-Allow-Origin:允許哪些域來訪問(*表示允許所有域的請求)

  • Access-Control-Allow-Methods:允許哪些請求方式

  • Access-Control-Allow-Headers:允許哪些請求頭字段

  • Access-Control-Allow-Credentials:是否允許攜帶Cookie

老白說完,圖也畫完了:

“每次都要發起詢問,好費事哦”,小雪看著圖說到。

老白搖頭說到:“唉,小雪說到點上了,為了避免每次都要詢問,他們還做了兩個重要的優化呢”

見我們都伸直了脖子等待答案,老白緩了緩才繼續說到:“第一,如果是一個簡單請求,那就直接發起請求,只需在請求中加入Origin字段表明自己來源,在響應中檢查Access-Control-Allow-Origin,如果不符合要求就報錯,不需要再單獨詢問了”

“那什么是簡單請求呢?”,我問到。

“簡單請求就是請求方式屬于HEAD、GET、POST三者之一,請求頭只有下面這些,不符合要求的就是非簡單請求,就得詢問了”

  • Accept

  • Accept-Language

  • Content-Language

  • Last-Event-ID

  • Content-Type:(application/x-www-form-urlencoded、multipart/form-data、text/plain)

“那第二個優化又是什么呢?”

“前面的服務器響應字段中我少說了一個,還有一個Access-Control-Max-Age,它表明了這個詢問結果的有效期,后面瀏覽器在有效期內也可以不必再次詢問”

聽完老白的講解,大家都紛紛點贊,這比我們的JSONP方式不知道高到哪里去了。

領導當即決定咱們也要支持這種跨域方式,盡快減少公司的損失。

我們幾個趕緊行動,加了幾天班總算把這套方案給實現了。功夫不負有心人,咱們的業務又慢慢有了起色。

未完待續······

彩蛋:

早上,我剛到公司,小雪妹子就轉過頭告訴我:“風哥,主管讓你去趟他的辦公室,他好像不太高興,你當心點”

“你知道是什么事情嗎?”

“我也不太清楚,只聽說你執行了什么錯誤的JavaScript代碼”

我心里一緊,感覺大事不妙

預知后事如何,請聽下回分解……


推薦閱讀

  • ? 沒錯,你離分布式搜索只差一個Elasticsearch入門!

  • Python開發之:Django基于Docker實現Mysql數據庫讀寫分離、集群、主從同步詳解 | 原力計劃

  • 全球Python調查報告:Python 2正在消亡,PyCharm比VS Code更受歡迎

  • 無代碼來了,還要程序員嗎?

  • 再見,Eclipse | 原力計劃

  • 區塊鏈共識算法總結 | 原力計劃

真香,朕在看了!

總結

以上是生活随笔為你收集整理的因为一个跨域请求,我差点丢了饭碗的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 性视频免费看 | 韩国一区视频 | av大片在线看 | 伊人伊人伊人伊人 | 毛片网站有哪些 | 成人激情四射 | 青少年xxxxx性开放hg | 精品视频免费观看 | 人妻内射一区二区在线视频 | 丰满双乳秘书被老板狂揉捏 | 亚洲精品国产精品乱码不卡 | 欧洲久久久久 | 欧美成人精品欧美一 | 欧美日韩免费做爰视频 | 亚洲人性生活视频 | 欧美v视频 | 福利视频在线播放 | 午夜天堂网| 亚洲成人网络 | 超碰日韩 | 亚洲图片自拍偷拍区 | 激情小说综合 | 亚洲精品国产精品乱码视色 | 不卡视频免费在线观看 | 成年午夜视频 | 国产精品久久久久久久久久久久久久 | 7m精品福利视频导航 | 午夜激情在线播放 | 怎么可能高潮了就结束漫画 | 成年人三级网站 | 欧美性另类 | 免费午夜视频在线观看 | 日本黄色片免费 | 亚洲色图17p | 思思99精品视频在线观看 | 电影寂寞少女免费观看 | 一级h片| 久久免费视频99 | 久久频 | 夜夜爽妓女8888视频免费观看 | 91成人一区| 白白色免费视频 | 秋霞国产午夜精品免费视频 | 亚洲乱码一区二区 | 日本一级理论片在线大全 | 欧美日韩一区二 | 95精品视频 | a猛片免费播放 | 国产三级在线免费观看 | 欧美亚洲韩国 | 亚洲 欧美 自拍偷拍 | 欧美日韩综合网 | 精品成人免费一区二区在线播放 | 91在线观看视频 | 情侣在线视频 | 久久网伊人 | 国产亚洲AV无码成人网站在线 | 国产精品综合久久久 | 日本一二三区在线视频 | 日本妇乱大交xxxxx | 天天插天天爽 | 无码人妻精品一区二区三区99v | 成人免费视频播放 | 五月天色网站 | 制服丝袜在线播放 | 亚洲国产欧美一区二区三区深喉 | 天天毛片 | 性色视频网站 | 五月婷婷丁香网 | 国产精品入口久久 | 日本成人在线播放 | 久久1024 | 大屁股白浆一区二区 | 日韩中文字幕免费在线观看 | 97人妻精品一区二区 | 在线观看福利网站 | 国产妇女乱一性一交 | 欧美bdsm调教视频 | 丰满人妻一区二区三区免费视频棣 | 国产精品扒开腿做爽爽爽a片唱戏 | 麻豆短视频在线观看 | 天天天天天天天天干 | 殴美一区二区 | 日韩精品一区二区三区视频在线观看 | 久草新在线 | 欧美精品黑人 | av手机在线免费观看 | 久久精品123| 九九av在线 | 欧美乱妇日本无乱码特黄大片 | 国产图片区 | 午夜剧场免费观看 | 国产精品久久精品三级 | 一级少妇女片 | 日韩欧美精品一区二区 | 午夜男人的天堂 | 在线免费成人网 | 色开心 | 肉色欧美久久久久久久免费看 |