久久久久久久视色,久久电影免费精品,中文亚洲欧美乱码在线观看,在线免费播放AV片

<center id="vfaef"><input id="vfaef"><table id="vfaef"></table></input></center>

    <p id="vfaef"><kbd id="vfaef"></kbd></p>

    
    
    <pre id="vfaef"><u id="vfaef"></u></pre>

      <thead id="vfaef"><input id="vfaef"></input></thead>

    1. 站長(zhǎng)資訊網(wǎng)
      最全最豐富的資訊網(wǎng)站

      url完整結(jié)構(gòu)以及同源跨域處理的介紹

      本篇文章給大家?guī)?lái)的內(nèi)容是關(guān)于url完整結(jié)構(gòu)以及同源跨域處理的介紹,有一定的參考價(jià)值,有需要的朋友可以參考一下,希望對(duì)你有所幫助。

      前言:隨著工作時(shí)間的增長(zhǎng),前面學(xué)過(guò)的東西開(kāi)始慢慢遺忘,抽空的時(shí)候就將一些資料整理整理,順一順,也當(dāng)作一種溫習(xí)。
      我只是前端工匠,防止自己成為【一斷網(wǎng)就無(wú)法工作的程序員】

      url的完整結(jié)構(gòu)

      協(xié)議類(lèi)型(protocol)

      通過(guò)URL可以指定的主要有以下幾種:http、ftp、gopher、telnet、file等
      URL的組成協(xié)議 1、protocol(協(xié)議):指定使用的傳輸協(xié)議,下表列出 protocol 屬性的有效方案名稱(chēng)。
      最常用的是HTTP協(xié)議,它也是目前WWW中應(yīng)用最廣的協(xié)議。

      http —— 超文本傳輸協(xié)議訪問(wèn)該資源。 格式 http://
      https —— 用安全套接字層傳送的超文本傳輸協(xié)議訪問(wèn)該資源。 格式 https://
      ftp —— 通過(guò) FTP訪問(wèn)資源。格式 FTP://
      mailto —— 電子郵件地址 通過(guò) SMTP 訪問(wèn)。 格式 mailto:
      ldap —— 輕型目錄訪問(wèn)協(xié)議搜索
      file —— 資源是本地計(jì)算機(jī)上的文件。格式file://
      news —— Usenet新聞組
      gopher —— Gopher協(xié)議
      telnet —— Telnet協(xié)議

      主機(jī)名(hostname)
      是指存放資源的服務(wù)器的域名系統(tǒng) (DNS) 主機(jī)名或 IP 地址。
      有時(shí),在主機(jī)名前也可以包含連接到服務(wù)器所需的用戶(hù)名和密碼(格式:username:password)。
      端口號(hào)(port) 整數(shù),可選,省略時(shí)使用方案的默認(rèn)端口,各種傳輸協(xié)議都有默認(rèn)的端口號(hào),
      如http的默認(rèn)端口為80,https的默認(rèn)端口為443
      路徑及文件名(path) 由零或多個(gè)“/”符號(hào)隔開(kāi)的字符串,一般用來(lái)表示主機(jī)上的一個(gè)目錄或文件地址
      參數(shù)(parameters) 傳遞參數(shù),可有多個(gè)參數(shù),用“&”符號(hào)隔開(kāi),每個(gè)參數(shù)的名和值用“=”符號(hào)隔開(kāi)
      hash值 #是用來(lái)指導(dǎo)瀏覽器動(dòng)作的,對(duì)服務(wù)器端完全無(wú)用。所以,HTTP請(qǐng)求中不包括#。
      這些字符都不會(huì)被發(fā)送到服務(wù)器端。
      改變#不觸發(fā)網(wǎng)頁(yè)重載
      改變#會(huì)改變?yōu)g覽器的訪問(wèn)歷史

      默認(rèn)情況下,Google的網(wǎng)絡(luò)蜘蛛忽視URL的#部分。
      但是,Google還規(guī)定,如果你希望Ajax生成的內(nèi)容被瀏覽引擎讀取,
      那么URL中可以使用"#!",Google會(huì)自動(dòng)將其后面的內(nèi)容轉(zhuǎn)成查詢(xún)字符串_escaped_fragment_的值

      同源策略

      協(xié)議相同域名相同端口相同

      如果非同源,共有三種行為收到限制

      (1) Cookie、LocalStorage 和 IndexDB 無(wú)法讀取。 (2) DOM 無(wú)法獲得。 (3) AJAX 請(qǐng)求不能發(fā)送。

      Cookie

      Cookie 是服務(wù)器寫(xiě)入瀏覽器的一小段信息,只有同源的網(wǎng)頁(yè)才能共享。

      cookie的組成部分

          Set-Cookie: NAME=VALUE;Expires=DATE;Path=PATH;Domain=DOMAIN_NAME;SECURE      NAME=VALUE     NAME是該Cookie的名稱(chēng),VALUE是該Cookie的值。     在字符串“NAME=VALUE”中,不含分號(hào)、逗號(hào)和空格等字符。          Expires=DATE:Expires變量是一個(gè)只寫(xiě)變量,它確定了Cookie有效終止日期。     該屬性值DATE必須以特定的格式來(lái)書(shū)寫(xiě):星期幾,DD-MM-YY HH:MM:SS GMT,     GMT表示這是格林尼治時(shí)間。     反之,不以這樣的格式來(lái)書(shū)寫(xiě),系統(tǒng)將無(wú)法識(shí)別。     該變量可省,如果缺省時(shí),則Cookie的屬性值不會(huì)保存在用戶(hù)的硬盤(pán)中,     而僅僅保存在內(nèi)存當(dāng)中,Cookie文件將隨著瀏覽器的關(guān)閉而自動(dòng)消失。          Domain=DOMAIN-NAME:Domain該變量是一個(gè)只寫(xiě)變量,     它確定了哪些Internet域中的Web服務(wù)器可讀取瀏覽器所存取的Cookie,     即只有來(lái)自這個(gè)域的頁(yè)面才可以使用Cookie中的信息。     這項(xiàng)設(shè)置是可選的,如果缺省時(shí),設(shè)置Cookie的屬性值為該Web服務(wù)器的域名。          Path=PATH:Path屬性定義了Web服務(wù)器上哪些路徑下的頁(yè)面可獲取服務(wù)器設(shè)置的Cookie。     一般如果用戶(hù)輸入的URL中的路徑部分從第一個(gè)字符開(kāi)始包含Path屬性所定義的字符串,     瀏覽器就認(rèn)為通過(guò)檢查。如果Path屬性的值為“/”,     則Web服務(wù)器上所有的WWW資源均可讀取該Cookie。          Secure:在Cookie中標(biāo)記該變量,     表明只有當(dāng)瀏覽器和Web Server之間的通信協(xié)議為加密認(rèn)證協(xié)議時(shí),     瀏覽器才向服務(wù)器提交相應(yīng)的Cookie。當(dāng)前這種協(xié)議只有一種,即為HTTPS。

      cookie 在 Request Headers 中的傳輸格式

          Cookie: KEY=VALUE; KEY=VALUE; KEY=VALUE     是沒(méi)有 域 和 過(guò)期時(shí)間 的

      跨域處理

      兩個(gè)網(wǎng)頁(yè)一級(jí)域名相同,只是二級(jí)域名不同,瀏覽器允許通過(guò)設(shè)置document.domain共享 Cookie。

      document.domain = 'example.com';

      如果兩個(gè)網(wǎng)頁(yè)不同源,就無(wú)法拿到對(duì)方的DOM。

      典型的例子是iframe窗口和window.open方法打開(kāi)的窗口,它們與父窗口無(wú)法通信。

      AJAX

      除了架設(shè)服務(wù)器代理(瀏覽器請(qǐng)求同源服務(wù)器,再由后者請(qǐng)求外部服務(wù)),

      vue項(xiàng)目中 開(kāi)發(fā)環(huán)境的跨域處理

      proxyTable

      dev: {           // Paths     assetsSubDirectory: 'static',     assetsPublicPath: './',     proxyTable: {         '/api': {             target: 'http://temp.com',// 請(qǐng)換成你需要跨域請(qǐng)求的地址             changeOrigin: true,             pathRewrite: {               '^/api': ''             }         }     } }

      proxyTable中的pathRewrite的/api理解成用‘/api’代替target里面的地址,
      后面組件中我們掉接口時(shí)直接用api代替

      有三種方法規(guī)避這個(gè)限制

      JSONP WebSocket CORS
          JSONP     是服務(wù)器與客戶(hù)端跨源通信的常用方法。     最大特點(diǎn)就是簡(jiǎn)單適用,老式瀏覽器全部支持,服務(wù)器改造非常小。     它的基本思想是,網(wǎng)頁(yè)通過(guò)添加一個(gè)<script>元素,向服務(wù)器請(qǐng)求JSON數(shù)據(jù),     這種做法不受同源政策限制;服務(wù)器收到請(qǐng)求后,將數(shù)據(jù)放在一個(gè)指定名字的回調(diào)函數(shù)里傳回來(lái)。          WebSocket     WebSocket是一種通信協(xié)議,使用ws://(非加密)和wss://(加密)作為協(xié)議前綴。     該協(xié)議不實(shí)行同源政策,只要服務(wù)器支持,就可以通過(guò)它進(jìn)行跨源通信。      CORS     CORS是跨源資源分享(Cross-Origin Resource Sharing)的縮寫(xiě)。     它是W3C標(biāo)準(zhǔn),是跨源AJAX請(qǐng)求的根本解決方法。     相比JSONP只能發(fā)GET請(qǐng)求,CORS允許任何類(lèi)型的請(qǐng)求。

      CORS詳解

      CORS需要瀏覽器和服務(wù)器同時(shí)支持。目前,所有瀏覽器都支持該功能,IE瀏覽器不能低于IE10。

      整個(gè)CORS通信過(guò)程,都是瀏覽器自動(dòng)完成,不需要用戶(hù)參與。對(duì)于開(kāi)發(fā)者來(lái)說(shuō),CORS通信與同源的AJAX通信沒(méi)有差別,代碼完全一樣。瀏覽器一旦發(fā)現(xiàn)AJAX請(qǐng)求跨源,就會(huì)自動(dòng)添加一些附加的頭信息,有時(shí)還會(huì)多出一次附加的請(qǐng)求,但用戶(hù)不會(huì)有感覺(jué)。

      因此,實(shí)現(xiàn)CORS通信的關(guān)鍵是服務(wù)器。只要服務(wù)器實(shí)現(xiàn)了CORS接口,就可以跨源通信。

      兩種請(qǐng)求

      瀏覽器將CORS請(qǐng)求分成兩類(lèi):簡(jiǎn)單請(qǐng)求(simple request)和非簡(jiǎn)單請(qǐng)求(not-so-simple request)。

      只要同時(shí)滿足以下兩大條件,就屬于簡(jiǎn)單請(qǐng)求

      (1)請(qǐng)求方法是以下三種方法之一:     HEAD     GET     POST      (2)HTTP的頭信息不超出以下幾種字段:     Accept     Accept-Language     Content-Language     Last-Event-ID     Content-Type:只限于三個(gè)值application/x-www-form-urlencoded、multipart/form-data、text/plain      凡是不同時(shí)滿足上面兩個(gè)條件,就屬于非簡(jiǎn)單請(qǐng)求。

      簡(jiǎn)單請(qǐng)求

      對(duì)于簡(jiǎn)單請(qǐng)求,瀏覽器直接發(fā)出CORS請(qǐng)求。具體來(lái)說(shuō),就是在頭信息之中,增加一個(gè)Origin字段。

      下面是一個(gè)例子,瀏覽器發(fā)現(xiàn)這次跨源AJAX請(qǐng)求是簡(jiǎn)單請(qǐng)求,就自動(dòng)在頭信息之中,添加一個(gè)Origin字段。

               GET /cors HTTP/1.1     Origin: http://api.bob.com     Host: api.alice.com     Accept-Language: en-US     Connection: keep-alive     User-Agent: Mozilla/5.0...

      上面的頭信息中,Origin字段用來(lái)說(shuō)明,本次請(qǐng)求來(lái)自哪個(gè)源(協(xié)議 + 域名 + 端口)。服務(wù)器根據(jù)這個(gè)值,決定是否同意這次請(qǐng)求。

      如果Origin指定的源,不在許可范圍內(nèi),服務(wù)器會(huì)返回一個(gè)正常的HTTP回應(yīng)。瀏覽器發(fā)現(xiàn),這個(gè)回應(yīng)的頭信息沒(méi)有包含Access-Control-Allow-Origin字段(詳見(jiàn)下文),就知道出錯(cuò)了,從而拋出一個(gè)錯(cuò)誤,被XMLHttpRequest的onerror回調(diào)函數(shù)捕獲。注意,這種錯(cuò)誤無(wú)法通過(guò)狀態(tài)碼識(shí)別,因?yàn)镠TTP回應(yīng)的狀態(tài)碼有可能是200。

      如果Origin指定的域名在許可范圍內(nèi),服務(wù)器返回的響應(yīng),會(huì)多出幾個(gè)頭信息字段。

                    Access-Control-Allow-Origin: http://api.bob.com     Access-Control-Allow-Credentials: true     Access-Control-Expose-Headers: FooBar     Content-Type: text/html; charset=utf-8

      上面的頭信息之中,有三個(gè)與CORS請(qǐng)求相關(guān)的字段,都以Access-Control-開(kāi)頭。

      1. Access-Control-Allow-Origin

        該字段是必須的。它的值要么是請(qǐng)求時(shí)Origin字段的值,要么是一個(gè)*,表示接受任意域名的請(qǐng)求。

      2. Access-Control-Allow-Credentials

        該字段可選。它的值是一個(gè)布爾值,表示是否允許發(fā)送Cookie。默認(rèn)情況下,Cookie不包括在CORS請(qǐng)求之中。設(shè)為true,即表示服務(wù)器明確許可,Cookie可以包含在請(qǐng)求中,一起發(fā)給服務(wù)器。這個(gè)值也只能設(shè)為true,如果服務(wù)器不要瀏覽器發(fā)送Cookie,刪除該字段即可。

      3. Access-Control-Expose-Headers

        該字段可選。CORS請(qǐng)求時(shí),XMLHttpRequest對(duì)象的getResponseHeader()方法只能拿到6個(gè)基本字段:Cache-Control、Content-Language、Content-Type、Expires、Last-Modified、Pragma。如果想拿到其他字段,就必須在Access-Control-Expose-Headers里面指定。上面的例子指定,getResponseHeader('FooBar')可以返回FooBar字段的值。

      非簡(jiǎn)單請(qǐng)求

      非簡(jiǎn)單請(qǐng)求是那種對(duì)服務(wù)器有特殊要求的請(qǐng)求,比如請(qǐng)求方法是PUT或DELETE,或者Content-Type字段的類(lèi)型是application/json。

      非簡(jiǎn)單請(qǐng)求的CORS請(qǐng)求,會(huì)在正式通信之前,增加一次HTTP查詢(xún)請(qǐng)求,稱(chēng)為"預(yù)檢"請(qǐng)求(preflight)。

      瀏覽器先詢(xún)問(wèn)服務(wù)器,當(dāng)前網(wǎng)頁(yè)所在的域名是否在服務(wù)器的許可名單之中,以及可以使用哪些HTTP動(dòng)詞和頭信息字段。只有得到肯定答復(fù),瀏覽器才會(huì)發(fā)出正式的XMLHttpRequest請(qǐng)求,否則就報(bào)錯(cuò)。

      "預(yù)檢"請(qǐng)求用的請(qǐng)求方法是OPTIONS,表示這個(gè)請(qǐng)求是用來(lái)詢(xún)問(wèn)的。頭信息里面,關(guān)鍵字段是Origin,表示請(qǐng)求來(lái)自哪個(gè)源。

      除了Origin字段,"預(yù)檢"請(qǐng)求的頭信息包括兩個(gè)特殊字段。

      Access-Control-Request-Method

      該字段是必須的,用來(lái)列出瀏覽器的CORS請(qǐng)求會(huì)用到哪些HTTP方法,上例是PUT。

      Access-Control-Request-Headers

      該字段是一個(gè)逗號(hào)分隔的字符串,指定瀏覽器CORS請(qǐng)求會(huì)額外發(fā)送的頭信息字段,上例是X-Custom-Header。

      OPTIONS /cors HTTP/1.1 Origin: http://api.bob.com Access-Control-Request-Method: PUT Access-Control-Request-Headers: X-Custom-Header Host: api.alice.com Accept-Language: en-US Connection: keep-alive User-Agent: Mozilla/5.0...

      預(yù)檢請(qǐng)求的回應(yīng)

      服務(wù)器收到"預(yù)檢"請(qǐng)求以后,檢查了Origin、Access-Control-Request-Method和Access-Control-Request-Headers字段以后,確認(rèn)允許跨源請(qǐng)求,就可以做出回應(yīng)。

          HTTP/1.1 200 OK     Date: Mon, 01 Dec 2008 01:15:39 GMT     Server: Apache/2.0.61 (Unix)     Access-Control-Allow-Origin: http://api.bob.com     Access-Control-Allow-Methods: GET, POST, PUT     Access-Control-Allow-Headers: X-Custom-Header     Content-Type: text/html; charset=utf-8     Content-Encoding: gzip     Content-Length: 0     Keep-Alive: timeout=2, max=100     Connection: Keep-Alive     Content-Type: text/plain           上面的HTTP回應(yīng)中,關(guān)鍵的是Access-Control-Allow-Origin字段, 表示http://api.bob.com可以請(qǐng)求數(shù)據(jù)。該字段也可以設(shè)為星號(hào),表示同意任意跨源請(qǐng)求。

      贊(0)
      分享到: 更多 (0)
      網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)