NodeJS解決跨域問題:Access-Control-Allow-Origin

今天在玩vue-resource時,后臺使用nodejs來提供數據,由于需要跨域,在網上也找到了解決方法。

vue-resource代碼(其實就是ajax技術):

this.$http.get({url:"http://localhost:3000/getdata"})
.then(function (data) {console.log(data)
},function (error) {});

nodejs部分:

var express = require('express');
var app = express();
//設置跨域訪問
app.all('*', function(req, res, next) {res.header("Access-Control-Allow-Origin", "*");res.header("Access-Control-Allow-Headers", "X-Requested-With");res.header("Access-Control-Allow-Methods","PUT,POST,GET,DELETE,OPTIONS");res.header("X-Powered-By",' 3.2.1')res.header("Content-Type", "application/json;charset=utf-8");next();
});app.get('/getdata', function(req, res) {res.send({id:req.params.id, name: req.params.password});
});app.listen(3000);
console.log('Listening on port 3000...');

前世今生

在WEB應用普及的今天,個人信息(賬號、COOKIE等)廣泛應用于網頁。瀏覽器同源策略保證了WEB環境的安全性。同源策略是說,在a.com域名下通過ajax或者XmlHttpRequest等方式訪問b.com的資源時,是不被允許的。

然而在很多時候,出于業務的的需要,我們經常有類似的跨域訪問?的需求。瀏覽器有一些支持跨域訪問的標簽,例如script,img等。有這樣的需求,自然就衍生了一些解決辦法。

比較普遍的是通過jsonp的方式來實現接口。

另外一個方式就是在服務器端配置,允許部分或者所有頁面進行跨域訪問。

JSONP方式

簡單來說,jsonp返回的不是json數據,而且一段通過函數將json數據包起來的js代碼。這樣,就可以通過script標簽來加載這段代碼,實現任意服務器的訪問。?
對于如下一個返回json數據的接口:

http://www.test.com/jsonServerResponse
  • 1

其對應的jsonp方式的用法如下,其中jsonpCallback是客戶端實現的處理json數據的函數。

<script>var data;function jsonpCallback(result) {data = result;}
</script>
<script src="http://www.test.com/jsonServerResponse?callback=jsonpCallback"></script>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

前端頁面在調用接口時,需要以callback=jsonpCallback的形式,將本地實現的處理json數據的函數上傳到服務器。跨域服務器實現相應的jsonp接口

http://www.test.com/jsonServerResponse?callback=jsonpCallback
  • 1

這個接口的返回數據如下

jsonpCallback({'msg':'this is json data'});
  • 1

可以看出,關鍵得在服務器端實現jsonp方式的接口,有了這些,客戶端就可以自由的跨域了!

服務器端

另外一個辦法,直接在服務器端,允許某些來源、某些接口、某些方法以某些形式被跨域調用。

nodejs express配置

app.all('/test', function(req, res, next) {res.header("Access-Control-Allow-Origin", "*");res.header('Access-Control-Allow-Methods', 'PUT, GET, POST, DELETE, OPTIONS');res.header("Access-Control-Allow-Headers", "X-Requested-With");res.header('Access-Control-Allow-Headers', 'Content-Type');next();
});
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

nginx配置

然而添加了這些之后,仍然不好使。查了查,可能是要在nginx上也作設置,在nginx相應路徑添加如下:

location ^~ /test {add_header 'Access-Control-Allow-Origin' '*';add_header 'Access-Control-Allow-Credentials' 'true';add_header 'Access-Control-Allow-Methods' 'OPTION, POST, GET';add_header 'Access-Control-Allow-Headers' 'X-Requested-With, Content-Type';
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

之后重新加載nginx配置即可,大功告成。


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/247575.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/247575.shtml
英文地址,請注明出處:http://en.pswp.cn/news/247575.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

windows10系統下MongoDB的安裝及環境配置

windows10系統下MongoDB的安裝及環境配置&#xff1a; MongoDB的安裝 下載地址&#xff1a; https://www.mongodb.com/download-center (這是windows10環境下的教程&#xff01;請注意&#xff01;) 下載后&#xff0c;我們點擊mongodb-win32-x86_64-2008plus-ssl-3.4.3-signed…

Net EF to MySQL生成edmx文件時報錯:StrongTypingException:表“TableDetails中列“IsPrimaryKey的值為DBNull...

使用Net寫項目&#xff0c;數據庫用的MySQL&#xff0c;EF生成edmx文件時&#xff0c;報錯&#xff0c;StrongTypingException:表“TableDetails"中列“IsPrimaryKey"的值為DBNull。 解決方法&#xff1a; 1.重啟MySQL服務 2.MySQL中運行下以下命令&#xff1a; use …

MongoDB之在mac上設置環境變量

要下班&#xff0c;簡介做個筆記。設置環境變量在基于unix/linux的操作系統下進行程序開發&#xff0c;使用環境變量將會方便。通過設置環境變量將可以在任意目錄通過輸入程序名來執行設定目錄下的程序。不需要通過cd將工作目錄改變到程序目錄再執行程序。而且免去了輸入"…

popup a new windows

popup a new windows window.open(url, newwindow, height500, width850, top0, left0, toolbarno, menubarno, scrollbarsno, resizableno,locationno, statusno); 轉載于:https://www.cnblogs.com/sandy_liao/archive/2010/06/24/1764533.html

CSS clip:rect矩形剪裁功能

CSS中有一個屬性叫做clip&#xff0c;為修剪&#xff0c;剪裁之意。配合其屬性關鍵字rect可以實現元素的矩形裁剪效果。此屬性安安穩穩地存在于CSS2.1中&#xff0c;且使用上基本上沒有類似于max-height/display:table-cell等瀏覽器的兼容性問題。 根據Dreamweaver的自動提示&a…

CSS隱藏元素的十四種方法

通過設置width:0或者height:0隱藏一個元素&#xff0c;文字隱藏可以設置color為背景色或transparent&#xff0c;但內容還在&#xff0c;所以用font-size:0&#xff1b; 將元素的opacity設置為0&#xff0c;元素本身還在&#xff0c;只是看不見&#xff1b; 通過絕對定位將元…

jquery.lazyload.js詳解

簡介lazyload.js用于長頁面圖片的延遲加載&#xff0c;視口外的圖片會在窗口滾動到它的位置時再進行加載&#xff0c;這是與預加載相反的。優點&#xff1a;它可以提高頁面加載速度&#xff1b;在某些情況清晰它也可以幫助減少服務器負載。安裝bower安裝&#xff1a;$ bower in…

Spring Boot Cache使用與整合

參考&#xff1a; 史上最全的Spring Boot Cache使用與整合Spring Cache擴展&#xff1a;注解失效時間主動刷新緩存 項目地址使用本地Caffeine緩存 引入依賴包 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starte…

vue-cli的打包配置文件

轉載原文: 詳解 vue-cli 的打包配置文件代碼&#xff08;給大家寫寫注釋&#xff09;. 一、vue-cli都做了什么 1、build/dev-server.js 文件 項目node的啟動文件&#xff0c;這里面做了webpack配置和node操作&#xff0c; 2、build/webpack.base.conf.js webpack基本配置文件…

Node.js 部署免費/自動續訂 HTTPS

統計了使用 Chrome 瀏覽器&#xff0c;訪問的站點統計中&#xff0c;HTTPS 使用率的增長情況&#xff1a;而在今年 2 月份&#xff0c;Chrome 團隊也宣布&#xff0c;將在 2018 年 7 月份發布的 Chrome 68 中&#xff0c;將沒有部署 HTTPS 的網站標記為 "不安全"。簡…

GSON 循環引用的對象轉為 JSON 造成棧溢出

對象轉 JSON 可能引發棧溢出的異常&#xff0c;一般是因為對象中的循環引用引起不斷遞歸。 常見的作法就是&#xff1a; 換一種 JSON 的序列化工具&#xff0c;比如 fastjson 默認支持消除對同一對象循環引用transient 修飾屬性顯式排除對象的某些屬性1. java對象引用成環說明 …

一些雜七雜八的前端知識1

一、this指向 this是函數運行時自動生成的一個內部對象&#xff0c;只能在函數內部使用 1. 指向全局變量 純粹的函數調用 2. 作為對象方法的調用 對象調用某個函數&#xff0c;這個函數里面所包含的this也就指向使用這個函數的對象了 3. 函數構造新對象時調用 new 4. a…

最新的vue webpack模板沒有dev-server.js文件,進行后臺數據模擬筆記

最新的vue里dev-server.js被替換成了webpack-dev-conf.js 在模擬后臺數據的時候直接在webpack-dev-conf.js文件中修改 第一步&#xff0c;在const portfinder require(‘portfinder’)后添加//第一步 const express require(express) const app express()//請求server var a…

20080331 - What is a PID, How is it useful when troubleshooting a system

PID Process Identifier, 是一個全局唯一的用來標識進程的整數。在多任務系統中&#xff0c;可用來診斷系統中發生錯誤的進程。 轉載于:https://www.cnblogs.com/likun/archive/2008/03/31/1130458.html

記一次el-input使用的坑

記一次el-input使用的坑 el-input使用不同與原生input&#xff0c;所以在vue中改變綁定的數據時需注意 <el-input v-model"form.schedule" input"validateNumber($event)" />要想在input時改變form.schedule的值來改變輸入框顯示的值&#xff0c;以…

使用pm2啟動Node和Vue項目教程

安裝pm2 $ npm install -g pm2 命令行全局安裝pm2 將pm2加入到命令中去?1234ln -s /usr/local/src/node-v8.9.1-linux-x64/bin/pm2 /usr/local/bin/pm2ln -s /usr/local/src/node-v8.9.1-linux-x64/bin/pm2-dev /usr/local/bin/pm2-devln -s /usr/local/src/node-v8.9.1-lin…

對正則的研究

視頻鏈接地址&#xff08;視頻格式可按需增刪&#xff09; /^https?:\/\/.*?(swf|avi|flv|mpg|rm|mov|wav|asf|3gp|mkv|rmvb|mp4)$/i 圖片鏈接地址&#xff08;圖片格式可按需增刪&#xff09; /^https?:\/\/.*?(gif|png|jpg|jpeg|webp|svg|psd|bmp|tif)$/i 24小時制時間&a…

MVVM原理還你

眾所周知當下是MVVM盛行的時代&#xff0c;從早期的Angular到現在的React和Vue&#xff0c;再從最初的三分天下到現在的兩虎相爭。 無疑不給我們的開發帶來了一種前所未有的新體驗&#xff0c;告別了操作DOM的思維&#xff0c;換上了數據驅動頁面的思想&#xff0c;果然時代的進…

poj1316

1&#xff0e;鏈接地址 https://vjudge.net/problem/POJ-1316 2&#xff0e;問題描述 In 1949 the Indian mathematician D.R. Kaprekar discovered a class of numbers called self-numbers. For any positive integer n, define d(n) to be n plus the sum of the digits of …

CSS頁面布局解決方案大全

前端布局非常重要的一環就是頁面框架的搭建&#xff0c;也是最基礎的一環。在頁面框架的搭建之中&#xff0c;又有居中布局、多列布局以及全局布局&#xff0c;今天我們就來總結總結前端干貨中的CSS布局。 居中布局 水平居中 1&#xff09;使用inline-blocktext-align&#xff…