国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

跨域

chaos_G / 2149人閱讀

摘要:所謂同源是指協(xié)議域名端口三者相同,即便兩個不同的域名指向同一個地址,也非同源,看看下面的產(chǎn)生跨域的場景你就會明白同源策略的含義。

前端跨域問題我想很多同學(xué)遇到過,或者是剛剛請求數(shù)據(jù)成功, 然而轉(zhuǎn)眼之后就會報錯
XMLHttpRequest cannot load http://www.server.com/server.... No "Access-Control-Allow-Origin" header is present on the requested resource.Origin "http://www.client.com" is therefore not allowed access.
我不知道大家有沒有遇到過反正我是遇到過,不管在什么時候你都有可能遇到跨域
跨域是什么?
跨域是指一個域下的文檔或腳本試圖去請求另一個域下的資源,這里跨域是廣義的。 其實我們通常所說的跨域是狹義的,是由瀏覽器同源策略限制的一類請求場景。
為什么會產(chǎn)生跨域?
產(chǎn)生跨域的主要原因是因為同源策略,什么是同源策略呢?我們來看下面的解釋

同源策略/SOP(Same origin policy)是一種約定,由Netscape公司1995年引入瀏覽器,它是瀏覽器最核心也最基本的安全功能,如果缺少了同源策略,瀏覽器很容易受到XSS、CSFR等攻擊。所謂同源是指"協(xié)議+域名+端口"三者相同,即便兩個不同的域名指向同一個ip地址,也非同源,看看下面的產(chǎn)生跨域的場景你就會明白同源策略的含義。
那么有的人會問了,同源策略會產(chǎn)生跨域為什么還要存在呢?平常我們訪問網(wǎng)站的時候都是一個地址對應(yīng)相同的內(nèi)容,如果同源策略不存在網(wǎng)站的dom很有可能被釣魚網(wǎng)站復(fù)制,那樣你就會上當(dāng)。
那有的人又問了有了同源策略就安全嗎?不是有了它就安全是因為同源策略是基礎(chǔ)的安全機制,面對強大的攻擊還是需要強大的攻防的

跨域場景
url 說明 是否可以通信
http://www.kuayu.com/img.jpg 同一域名,不同文件,不同路徑 可以
http://www.kuayu.com/img2.jpg 同一域名,不同文件,不同路徑 可以
url 說明 是否可以通信
http://www.kuayu.com:6666/img.jpg 同一域名,不同端口 不可以
http://www.kuayu.com/img2.jpg 同一域名,不同端口 不可以
url 說明 是否可以通信
https://www.kuayu.com/img.jpg 同一域名,不同協(xié)議 不可以
url 說明 是否可以通信
http://www.kuayu.com/img.jpg 主域相同,子域不同 不可以
http://kuayu11.com/img2.jpg 主域相同,子域不同 不可以
跨域的解決辦法

jsonp

Jsonp(JSON with Padding) 是 json 的一種"使用模式",可以讓網(wǎng)頁從別的域名(網(wǎng)站)那獲取資料,即跨域讀取數(shù)據(jù)。
為什么我們從不同的域(網(wǎng)站)訪問數(shù)據(jù)需要一個特殊的技術(shù)(JSONP )呢?這是因為同源策略。
同源策略,它是由Netscape提出的一個著名的安全策略,現(xiàn)在所有支持JavaScript
的瀏覽器都會使用這個策略。同源策略上面咱們已經(jīng)簡單的價紹過了,詳細請看上面

首先我們先設(shè)置script標(biāo)簽,一個簡單的jsonp實現(xiàn),其實就是拼接url,然后將動態(tài)添加一個script元素到頭部,我來看下面菜鳥教程給與的客戶端例子

   
   
   
       
       JSONP 實例
   
   
   
// 使用函數(shù)

我們再來封裝一下簡單的jsonp函數(shù)完整的代碼如下面

    
       
       
           
           JSONP 實例
       
       
       
上面的代碼使用方式和咱們菜鳥教程生成的方式是一樣的

后臺解決跨域
一般有兩種解決方法

1.后臺返回的數(shù)據(jù)格式改成jsonp的形式

2.后臺response添加header,response.setHeader("Access-Control-Allow-Origin", "*");
"Access-Control-Allow-Origin", "*" 表示所有網(wǎng)站都可以訪問
或者可以指定某個具體域名訪問response.setHeader("Access-Control-Allow-Origin", "url")

我們來看看后臺代碼node + koa 的實現(xiàn),我們可以通過設(shè)置header的Access-Control-Allow-Origin就像是我們設(shè)置的token,設(shè)置的json格式或是其它格式啊,當(dāng)然下面的代碼是通過使用koa-cors插件進行的解決跨域問題。

var koa = require("koa");
var route = require("koa-route");
var cors = require("koa-cors");
var app = koa();

app.use(cors());

app.use(route.get("/", function() {
  this.body = { msg: "Hello World!" };
}));
app.listen(3000)

其實這一切都歸根揭底為cors,那么它是什么呢?它為什么可以解決跨域的問題呢?那我們具體來看看它到底是什么

cros:跨域資源共享 瀏覽器將CORS請求分成兩類:簡單請求(simple request)和非簡單請求(not-so-simple
request),咱們在這里只說一下簡單的請求方式:
請求方法是以下三種方法之一:
HEAD
GET
POST
HTTP的頭信息不超出以下幾種字段:
Accept
Accept-Language
Content-Language
Last-Event-ID
Content-Type:只限于三個值application/x-www-form-urlencoded、multipart/form-data、text/plain
Access-Control-Allow-Origin
該字段是必須的。它的值要么是請求時Origin字段的值,要么是一個*,表示接受任意域名的請求。
Access-Control-Allow-Credentials
值是一個布爾值,表示是否允許發(fā)送Cookie。默認情況下,Cookie不包括在CORS請求之中。設(shè)為true,即表示服務(wù)器明確許可,Cookie可以包含在請求中,一起發(fā)給服務(wù)器。這個值也只能設(shè)為true,如果服務(wù)器不要瀏覽器發(fā)送Cookie,刪除該字段即可
vue解決跨域方案
我們可以在vue-cli配置文件里面設(shè)置一個代理,跨域的方法有很多,通常需要后臺來進行配置。
我們可以直接通過node.js代理服務(wù)器來實現(xiàn)跨域請求。

接下來我們可以通過vue項目中config文件夾下的index.js配置文件

dev: {
    // Paths
    assetsSubDirectory: "static",
    assetsPublicPath: "/",
    proxyTable: {},

    // Various Dev Server settings
    host: "0.0.0.0", // can be overwritten by process.env.HOST
    port: 8080, // can be overwritten by process.env.PORT, if port is in use, a free one will be determined
    autoOpenBrowser: false,
    errorOverlay: true,
    notifyOnErrors: true,
    poll: false, // https://webpack.js.org/configuration/dev-server/#devserver-watchoptions-
    .......
    ...
  }

上面是我從vue項目中拿出來的代碼供大家便于尋找,接下來我們需要新建一個js文件,名為proxy.js配置代碼如下:

module.exports = {
  proxy: {
        "/api": {    //將www.qj.com映射/apiUrl
            target: "https://www.qj.com",  // 接口域名
            secure: false,  // 如果是https接口,需要配置這個參數(shù)
            changeOrigin: true,  //是否跨域
            pathRewrite: {
                "^/api": "" //路徑重寫
            }              
        }
  }
}

這把我們需要把proxy.js引入到config文件夾下的index.js中,var proxy = require("./proxy.js"), 然后將proxyTable: proxy.proxy插入到我們的dev對象中進行跨域的使用,我們這時候如果設(shè)置完了,跨域還是沒有解決怎么辦,有時候還得需要更改咱們本地的hosts文件以達到我們解決跨域的目的

總結(jié)
其實在我開發(fā)的經(jīng)歷中遇到跨域的事情還是較少的,一般遇到跨域的時候,基本上都是又后臺來處理,以前也會遇到但是使用jsonp的時候還是比較少的,以及上面我們提到的vue-cli的設(shè)置解決跨域的問題,我們看到是直接設(shè)置webpack的方式來解決,由于vue開發(fā)比較多,所以還是比較關(guān)注vue的解決方法,有的時候還碰到過比如我們開發(fā)web頁面和小程序,在小程序請求都沒有went,但是到web也會造成跨域問題,所以我們只需設(shè)置前臺解決跨域問題就行,或者更安全的方式直接讓后臺一次性解決也免得不小心手機端也跨域了呢。
當(dāng)然還有很多跨域的解決辦法,但是本人遇到與解決的只有這記住方法
參考資料 
正確面對跨域,別慌
菜鳥教程
jsonp跨域請求詳解——從繁至簡
阮一峰cros

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/104531.html

相關(guān)文章

  • ajax跨域,這應(yīng)該是最全的解決方案了

    摘要:關(guān)于,強烈推薦閱讀跨域資源共享詳解阮一峰另外,這里也整理了一個實現(xiàn)原理圖簡化版如何判斷是否是簡單請求瀏覽器將請求分成兩類簡單請求和非簡單請求。 前言 從剛接觸前端開發(fā)起,跨域這個詞就一直以很高的頻率在身邊重復(fù)出現(xiàn),一直到現(xiàn)在,已經(jīng)調(diào)試過N個跨域相關(guān)的問題了,16年時也整理過一篇相關(guān)文章,但是感覺還是差了點什么,于是現(xiàn)在重新梳理了一下。 個人見識有限,如有差錯,請多多見諒,歡迎提出iss...

    ytwman 評論0 收藏0
  • 大話javascript 5期:跨域

    摘要:同源策略所謂同源是指協(xié)議,域名,端口均相同。同源策略是瀏覽器的一個安全功能,不同源的客戶端腳本在沒有明確授權(quán)的情況下,不能讀寫對方資源。需注意的是由于同源策略的限制,所讀取的為跨域請求接口所在域的,而非當(dāng)前頁。 一、什么是跨域 1.URL解析 URL (Uniform Resource Locator )統(tǒng)一資源定位符(URL)是用于完整地描述Internet上網(wǎng)頁和其他資源的地址的...

    jzzlee 評論0 收藏0
  • 用本地運行的demo快速入門跨域

    摘要:學(xué)習(xí)建議在學(xué)習(xí)其中一種跨域方法的時候,建議邊運行項目里的,邊在網(wǎng)上搜索博客文章學(xué)習(xí)這種跨域方法,這樣有助于快速并且深入理解跨域。鑒于網(wǎng)上有很多文章詳細講述跨域知識,只是少了可以本地運行的,所以這里就不再贅述跨域知識。 前言 因為學(xué)習(xí)跨域需要配置本地服務(wù)器,可能會比較麻煩,所以自己根據(jù)網(wǎng)上的博客寫了大多數(shù)跨域的簡單demo,可以自己在本地運行,而且不用配置服務(wù)器。自己對于跨域的理解剛開始...

    yy736044583 評論0 收藏0
  • 用本地運行的demo快速入門跨域

    摘要:學(xué)習(xí)建議在學(xué)習(xí)其中一種跨域方法的時候,建議邊運行項目里的,邊在網(wǎng)上搜索博客文章學(xué)習(xí)這種跨域方法,這樣有助于快速并且深入理解跨域。鑒于網(wǎng)上有很多文章詳細講述跨域知識,只是少了可以本地運行的,所以這里就不再贅述跨域知識。 前言 因為學(xué)習(xí)跨域需要配置本地服務(wù)器,可能會比較麻煩,所以自己根據(jù)網(wǎng)上的博客寫了大多數(shù)跨域的簡單demo,可以自己在本地運行,而且不用配置服務(wù)器。自己對于跨域的理解剛開始...

    GraphQuery 評論0 收藏0
  • 用本地運行的demo快速入門跨域

    摘要:學(xué)習(xí)建議在學(xué)習(xí)其中一種跨域方法的時候,建議邊運行項目里的,邊在網(wǎng)上搜索博客文章學(xué)習(xí)這種跨域方法,這樣有助于快速并且深入理解跨域。鑒于網(wǎng)上有很多文章詳細講述跨域知識,只是少了可以本地運行的,所以這里就不再贅述跨域知識。 前言 因為學(xué)習(xí)跨域需要配置本地服務(wù)器,可能會比較麻煩,所以自己根據(jù)網(wǎng)上的博客寫了大多數(shù)跨域的簡單demo,可以自己在本地運行,而且不用配置服務(wù)器。自己對于跨域的理解剛開始...

    Integ 評論0 收藏0
  • javascript跨域

    摘要:實現(xiàn)跨域的原理通過方式請求載入并執(zhí)行一個文件,相當(dāng)于通過的形式的導(dǎo)入一個外部的方法語法該函數(shù)是簡寫的函數(shù),等價于在中,您可以通過使用形式的回調(diào)函數(shù)來加載其他網(wǎng)域的數(shù)據(jù),如。將自動替換為正確的函數(shù)名,以執(zhí)行回調(diào)函數(shù)。 更多詳情見http://blog.zhangbing.club/Ja... 最近在項目開發(fā)的過程中遇到一些Javascript 跨域請求的問題,今天抽空對其進行總結(jié)一下,以...

    PingCAP 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<