中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

url完整結構以及同源跨域處理指的是什么-創(chuàng)新互聯(lián)

這篇文章給大家分享的是有關url完整結構以及同源跨域處理指的是什么的內(nèi)容。小編覺得挺實用的,因此分享給大家做個參考。一起跟隨小編過來看看吧。

成都創(chuàng)新互聯(lián)服務項目包括河東網(wǎng)站建設、河東網(wǎng)站制作、河東網(wǎng)頁制作以及河東網(wǎng)絡營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術優(yōu)勢、行業(yè)經(jīng)驗、深度合作伙伴關系等,向廣大中小型企業(yè)、政府機構等提供互聯(lián)網(wǎng)行業(yè)的解決方案,河東網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟效益。目前,我們服務的客戶以成都為中心已經(jīng)輻射到河東省份的部分城市,未來相信會繼續(xù)擴大服務區(qū)域并繼續(xù)獲得客戶的支持與信任!

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

url的完整結構

協(xié)議類型(protocol)

通過URL可以指定的主要有以下幾種:http、ftp、gopher、telnet、file等
URL的組成協(xié)議 1、protocol(協(xié)議):指定使用的傳輸協(xié)議,下表列出 protocol 屬性的有效方案名稱。
最常用的是HTTP協(xié)議,它也是目前WWW中應用最廣的協(xié)議。
   
   http —— 超文本傳輸協(xié)議訪問該資源。 格式 http://
   https —— 用安全套接字層傳送的超文本傳輸協(xié)議訪問該資源。 格式 https://
   ftp —— 通過 FTP訪問資源。格式 FTP://
   mailto —— 電子郵件地址 通過 SMTP 訪問。 格式 mailto:
   ldap —— 輕型目錄訪問協(xié)議搜索
   file —— 資源是本地計算機上的文件。格式file://
   news —— Usenet新聞組
   gopher —— Gopher協(xié)議
   telnet —— Telnet協(xié)議

主機名(hostname)
   是指存放資源的服務器的域名系統(tǒng) (DNS) 主機名或 IP 地址。
   有時,在主機名前也可以包含連接到服務器所需的用戶名和密碼(格式:username:password)。
端口號(port)    整數(shù),可選,省略時使用方案的默認端口,各種傳輸協(xié)議都有默認的端口號,
   如http的默認端口為80,https的默認端口為443
路徑及文件名(path)    由零或多個“/”符號隔開的字符串,一般用來表示主機上的一個目錄或文件地址
參數(shù)(parameters)    傳遞參數(shù),可有多個參數(shù),用“&”符號隔開,每個參數(shù)的名和值用“=”符號隔開
hash值    #是用來指導瀏覽器動作的,對服務器端完全無用。所以,HTTP請求中不包括#。
   這些字符都不會被發(fā)送到服務器端。
   改變#不觸發(fā)網(wǎng)頁重載
   改變#會改變?yōu)g覽器的訪問歷史
   
   默認情況下,Google的網(wǎng)絡蜘蛛忽視URL的#部分。
   但是,Google還規(guī)定,如果你希望Ajax生成的內(nèi)容被瀏覽引擎讀取,
   那么URL中可以使用"#!",Google會自動將其后面的內(nèi)容轉成查詢字符串_escaped_fragment_的值

同源策略

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

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

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

Cookie

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

cookie的組成部分
    Set-Cookie: NAME=VALUE;Expires=DATE;Path=PATH;Domain=DOMAIN_NAME;SECURE

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

跨域處理

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

document.domain = 'example.com';

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

典型的例子是iframe窗口和window.open方法打開的窗口,它們與父窗口無法通信。

AJAX

除了架設服務器代理(瀏覽器請求同源服務器,再由后者請求外部服務),

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

proxyTable

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

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

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

JSONP
WebSocket
CORS
    JSONP
    是服務器與客戶端跨源通信的常用方法。
    大特點就是簡單適用,老式瀏覽器全部支持,服務器改造非常小。
    它的基本思想是,網(wǎng)頁通過添加一個<script>元素,向服務器請求JSON數(shù)據(jù),
    這種做法不受同源政策限制;服務器收到請求后,將數(shù)據(jù)放在一個指定名字的回調(diào)函數(shù)里傳回來。
    
    WebSocket
    WebSocket是一種通信協(xié)議,使用ws://(非加密)和wss://(加密)作為協(xié)議前綴。
    該協(xié)議不實行同源政策,只要服務器支持,就可以通過它進行跨源通信。

    CORS
    CORS是跨源資源分享(Cross-Origin Resource Sharing)的縮寫。
    它是W3C標準,是跨源AJAX請求的根本解決方法。
    相比JSONP只能發(fā)GET請求,CORS允許任何類型的請求。

CORS詳解

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

整個CORS通信過程,都是瀏覽器自動完成,不需要用戶參與。對于開發(fā)者來說,CORS通信與同源的AJAX通信沒有差別,代碼完全一樣。瀏覽器一旦發(fā)現(xiàn)AJAX請求跨源,就會自動添加一些附加的頭信息,有時還會多出一次附加的請求,但用戶不會有感覺。

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

兩種請求

瀏覽器將CORS請求分成兩類:簡單請求(simple request)和非簡單請求(not-so-simple request)。

只要同時滿足以下兩大條件,就屬于簡單請求

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

對于簡單請求,瀏覽器直接發(fā)出CORS請求。具體來說,就是在頭信息之中,增加一個Origin字段。

下面是一個例子,瀏覽器發(fā)現(xiàn)這次跨源AJAX請求是簡單請求,就自動在頭信息之中,添加一個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字段用來說明,本次請求來自哪個源(協(xié)議 + 域名 + 端口)。服務器根據(jù)這個值,決定是否同意這次請求。

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

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

    
    
    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

上面的頭信息之中,有三個與CORS請求相關的字段,都以Access-Control-開頭。

  1. Access-Control-Allow-Origin

    該字段是必須的。它的值要么是請求時Origin字段的值,要么是一個*,表示接受任意域名的請求。

  2. Access-Control-Allow-Credentials

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

  3. Access-Control-Expose-Headers

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

非簡單請求

非簡單請求是那種對服務器有特殊要求的請求,比如請求方法是PUT或DELETE,或者Content-Type字段的類型是application/json。

非簡單請求的CORS請求,會在正式通信之前,增加一次HTTP查詢請求,稱為"預檢"請求(preflight)。

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

"預檢"請求用的請求方法是OPTIONS,表示這個請求是用來詢問的。頭信息里面,關鍵字段是Origin,表示請求來自哪個源。

除了Origin字段,"預檢"請求的頭信息包括兩個特殊字段。

Access-Control-Request-Method

該字段是必須的,用來列出瀏覽器的CORS請求會用到哪些HTTP方法,上例是PUT。

Access-Control-Request-Headers

該字段是一個逗號分隔的字符串,指定瀏覽器CORS請求會額外發(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...

預檢請求的回應

服務器收到"預檢"請求以后,檢查了Origin、Access-Control-Request-Method和Access-Control-Request-Headers字段以后,確認允許跨源請求,就可以做出回應。

    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回應中,關鍵的是Access-Control-Allow-Origin字段,
表示http://api.bob.com可以請求數(shù)據(jù)。該字段也可以設為星號,表示同意任意跨源請求。

感謝各位的閱讀!關于url完整結構以及同源跨域處理指的是什么就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。

本文名稱:url完整結構以及同源跨域處理指的是什么-創(chuàng)新互聯(lián)
網(wǎng)站鏈接:http://www.rwnh.cn/article6/cegdog.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供定制網(wǎng)站、用戶體驗、網(wǎng)頁設計公司、網(wǎng)站維護、微信公眾號、網(wǎng)站排名

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站托管運營
贵南县| 龙南县| 额尔古纳市| 图木舒克市| 安阳市| 孝昌县| 保靖县| 永靖县| 原平市| 宣城市| 尼木县| 安吉县| 黄梅县| 沐川县| 蓬溪县| 南澳县| 波密县| 广饶县| 西畴县| 英吉沙县| 横峰县| 万年县| 南部县| 广河县| 龙泉市| 元阳县| 大宁县| 阿拉善左旗| 会昌县| 鲁山县| 于都县| 望奎县| 虹口区| 延寿县| 电白县| 高尔夫| 林口县| 阿城市| 正宁县| 左贡县| 招远市|