首頁 > web前端 > H5教程 > 主體

url完整結構以及同源跨域處理的介紹

不言
發布: 2019-03-02 15:15:51
轉載
3402 人瀏覽過

這篇文章帶給大家的內容是關於url完整結構以及同源跨域處理的介紹,有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。

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

#url的完整結構

協定類型(protocol)

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

主機名稱(hostname)
是指存放資源的伺服器的網域名稱系統(DNS) 主機名稱或IP 位址。
   有時,在主機名稱前也可以包含連接到伺服器所需的使用者名稱和密碼(格式:username:password)。
連接埠號(port)    整數,可選,省略時使用方案的預設端口,各種傳輸協定都有預設的連接埠號,
   如http的預設連接埠為80,https的預設連接埠為443
路徑及檔名(path)    由零或多個「/」符號隔開的字串,一般用來表示主機上的一個目錄或檔案位址
參數(parameters)    傳遞參數,可有多個參數,用「&」符號隔開,每個參數的名稱和值用「=」符號隔開
hash值   #是用來指導瀏覽器動作的,對伺服器端完全無用。所以,HTTP請求中不包括#。
   這些字元都不會被傳送到伺服器端。
   改變#不觸發網頁重載
   改變#會改變瀏覽器的訪問歷史
   
   預設情況下,Google的網路蜘蛛忽略URL的#部分。
   但是,Google也規定,如果你希望Ajax產生的內容被瀏覽引擎讀取,
   那麼URL中可以使用"#!",Google會自動將其後面的內容轉成查詢字串_escaped_fragment _的值 

同源策略

協定相同網域相同埠相同

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

(1) Cookie、LocalStorage 和 IndexDB 无法读取。
(2) DOM 无法获得。
(3) AJAX 请求不能发送。
登入後複製

Cookie

Cookie 是伺服器寫入瀏覽器的一小段訊息,只有同源的網頁才能共享。

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表示这是格林尼治时间。
    反之,不以这样的格式来书写,系统将无法识别。
    该变量可省,如果缺省时,则Cookie的属性值不会保存在用户的硬盘中,
    而仅仅保存在内存当中,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之间的通信协议为加密认证协议时,
    浏览器才向服务器提交相应的Cookie。当前这种协议只有一种,即为HTTPS。
登入後複製
cookie 在Request Headers 中的傳輸格式
    Cookie: KEY=VALUE; KEY=VALUE; KEY=VALUE
    是没有 域 和 过期时间 的
登入後複製

跨網域處理

兩個網頁一級網域相同,只是二級域名不同,瀏覽器允許透過設定document.domain共享Cookie。

document.domain = 'example.com';
登入後複製

如果兩個網頁不同來源,就無法拿到對方的DOM。

典型的例子是iframe窗口和window.open方法打开的窗口,它们与父窗口无法通信。
登入後複製

AJAX

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

vue專案中開發環境的跨網域處理

proxyTable

dev: {
     
    // Paths
    assetsSubDirectory: 'static',
    assetsPublicPath: './',
    proxyTable: {
        '/api': {
            target: 'http://temp.com',// 请换成你需要跨域请求的地址
            changeOrigin: true,
            pathRewrite: {
              '^/api': ''
            }
        }
    }
}
登入後複製

proxyTable中的pathRewrite的/api理解成用'/api'代替target裡面的位址,
後面元件中我們掉介面時直接用api代替

有三種方法來規避這個限制

JSONP
WebSocket
CORS
登入後複製
    JSONP
    是服务器与客户端跨源通信的常用方法。
    最大特点就是简单适用,老式浏览器全部支持,服务器改造非常小。
    它的基本思想是,网页通过添加一个
        
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!