.net core 发起web请求_温故知新 .Net重定向深度分析
在早期的.NET Framework程序員心里,重定向Redirect其實(shí)分為兩種:
Response.Redirect:Response對(duì)象的Redirect方法提供了一種實(shí)現(xiàn)客戶端重定向的方法
Server.Transfer:Server對(duì)象的Transfer方法使用服務(wù)器執(zhí)行重定向,并避免HTTP請(qǐng)求
關(guān)鍵區(qū)別是發(fā)生轉(zhuǎn)移的地方:
Client Redirect vs Server Redirect
Response.Redirect方法的默認(rèn)行為:當(dāng)前頁(yè)面暫停執(zhí)行,并向?yàn)g覽器發(fā)送302響應(yīng)碼和新的跳轉(zhuǎn)URL;
瀏覽器識(shí)別302響應(yīng)并向跳轉(zhuǎn)URL發(fā)起請(qǐng)求, 在network上會(huì)呈現(xiàn)兩個(gè)請(qǐng)求:原始和新地址請(qǐng)求。
Response.Redirect("http://www.news.com",false); // 參數(shù)2控制當(dāng)前頁(yè)執(zhí)行是否應(yīng)該終止Server.Transfer 方法在服務(wù)器轉(zhuǎn)向新的頁(yè)面請(qǐng)求,并停止當(dāng)前頁(yè)面的執(zhí)行;因?yàn)榉?wù)器不會(huì)將更改通知給客戶端瀏覽器, 在network依舊呈現(xiàn)一個(gè)原始請(qǐng)求。
由于頁(yè)面地址在瀏覽器中不會(huì)更改,因此用戶有可能會(huì)感覺(jué)異樣。
Server.Transfer("/default.aspx");// 由于使用了Web服務(wù)器的工作進(jìn)程,因此Server.Transfer方法的目標(biāo)URL必須是同一服務(wù)器上的虛擬路徑,因此您不能使用包含“http”或“https”的地址ASP.NET MVC以至于.NET Core均淡化了服務(wù)端重定向的操作,可采用MVC Controller/Action替代
合理選擇重定向方式
以上核心差異, 某些情況下需要合理選擇重定向方式:
① 性能:直接的觀感是 Response.Redirect相比Server.Transfer多引入了一個(gè)HTTP往返,可能有更好的性能, 實(shí)際上這個(gè)從來(lái)不是問(wèn)題。
② 基本安全性:某些時(shí)候?qū)τ谛马?yè)面的請(qǐng)求地址可能要保密 ,Server.Transfer是在服務(wù)端請(qǐng)求,不會(huì)將請(qǐng)求的詳情暴露在瀏覽器上。
③ 收藏夾:Server.Transfer在服務(wù)器上工作,用戶雖收到新頁(yè)面內(nèi)容,但瀏覽器中的地址不會(huì)更新。因此,用戶無(wú)法為某些頁(yè)面添加書簽。
④ AJAX用法:Server.Transfer方法缺乏與瀏覽器的交互,意味著它可能會(huì)破壞某些AJAX或JavaScript功能。
⑤ Response.Redirect 能向所有Origin資源發(fā)起重定向;而Server.Transfer 只能向web服務(wù)內(nèi)資源重定向( 同Origin)。
⑥ 請(qǐng)求次數(shù)導(dǎo)致的問(wèn)題 :Client Redirect是由先向?yàn)g覽器響應(yīng)302,在302響應(yīng)的同時(shí)可追加某些信息以利于 后續(xù)重定向;而Server.Transfer 對(duì)于瀏覽器而言只有一次請(qǐng)求, 這個(gè)差異可能是一個(gè)隱藏的分水嶺。
我們來(lái)分析標(biāo)準(zhǔn)單點(diǎn)登錄CAS中發(fā)生的三次302重定向:
第一,二次重定向發(fā)生在SSO、website1不同域之間的重定向(其中第二次是Post請(qǐng)求之后302重定向),只能使用Client Redirect;
第三次由 http://www.website1.com?ticket=ST-OOOO-XXXX-OOOO 跳轉(zhuǎn)回同站點(diǎn)的首頁(yè)www.website1.com 也不能使用 Server.Transfer,
因?yàn)樘D(zhuǎn)后的首頁(yè)部分資源依賴于302響應(yīng)時(shí)寫入的認(rèn)證Cookie for website1。
HTTP 3XX響應(yīng)碼,傻傻分不清楚
HTTP 3XX規(guī)范約定:是永久/臨時(shí);重定向前后的Method、Body是否變化。
部分常見(jiàn)3xx響應(yīng)碼的常規(guī)用法:
301 “永久移動(dòng)”
站點(diǎn)改版,比如我們?cè)趎ginx中強(qiáng)制要求使用 HTTPS:
server { listen 80; listen [::]:80; server_name www.website1.com; return 301 https://$host$request_uri; }302 “對(duì)象已移動(dòng)”或“找到”
如果附帶目標(biāo)URL,瀏覽器將發(fā)起重定向, 這也是目前口口相傳應(yīng)用最廣泛的 重定向。
307 “臨時(shí)重定向”
指示所請(qǐng)求的資源已被臨時(shí)移動(dòng)到Location標(biāo)頭提供的URL;
307和302之間的唯一區(qū)別是307保證在發(fā)出重定向請(qǐng)求時(shí),Method和Body不會(huì)更改,當(dāng)重定向地址是非GET操作時(shí),比302更好。
總結(jié):本文簡(jiǎn)要分析了Client Redirect,Server Redirect的核心差異、使用場(chǎng)景;
最后給出了HTTP 3XX響應(yīng)碼的標(biāo)準(zhǔn)規(guī)范。
+ https://stackoverflow.com/questions/39693050/alternative-to-server-transfer-in-asp-net-core
+ https://developer.mozilla.org/en-US/docs/Web/HTTP/Redirections
+ https://apereo.github.io/cas/4.2.x/protocol/CAS-Protocol.html
● 臨近年關(guān),修復(fù)ASP.NET Core因?yàn)g覽器內(nèi)核版本引發(fā)的單點(diǎn)登錄故障
● MongoDB副本集自動(dòng)故障轉(zhuǎn)移原理(含客戶端)
● HTTP Strict Transport Security (HSTS) in ASP.NET Core
● 2020年了,再不會(huì)Https就老了
● 全網(wǎng)最深刻的ASP.NET Core跨平臺(tái)技術(shù)內(nèi)幕
轉(zhuǎn)載是一種動(dòng)力,分享是一種美德 ~~..~~
如果你覺(jué)得文章還不賴,您的鼓勵(lì)是原創(chuàng)干貨作者的最大動(dòng)力,讓我們一起激濁揚(yáng)清。
總結(jié)
以上是生活随笔為你收集整理的.net core 发起web请求_温故知新 .Net重定向深度分析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: jedis使用_Mybatis的二级缓存
- 下一篇: c++字符串输入_【pwn】什么是格式化