久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Nginx跨域問(wèn)題解析與解決

瀏覽:157日期:2023-03-13 15:37:08
目錄
  • 什么是跨域
  • 跨域場(chǎng)景
  • 解決跨域的四種方式

什么是跨域

  • 域: 是指瀏覽器不能執(zhí)行其他網(wǎng)站的腳本
  • 跨域: 它是由瀏覽器的 同源策略 造成的,是瀏覽器對(duì) JavaScript 實(shí)施的安全限制,所謂同源(即指在同一個(gè)域)就是兩個(gè)頁(yè)面具有相同的協(xié)議 protocol,主機(jī) host 和端口號(hào) port 則就會(huì)造成 跨域

跨域場(chǎng)景

場(chǎng)景的跨域場(chǎng)景有哪些,請(qǐng)參考下表

當(dāng)前url請(qǐng)求url是否跨域原因http://www.autofelix.cnhttp://www.autofelix.cn/api.php協(xié)議/域名/端口都相同http://www.autofelix.cnhttps://www.autofelix.cn/api.php協(xié)議不同http://www.autofelix.cnhttp://www.rabbit.cn主域名不同http://www.autofelix.cnhttp://api.autofelix.cn子域名不同http://www.autofelix.cn:80http://www.autofelix.cn:8080端口不同

解決跨域的四種方式

  • nginx的反向代理
  • 使用 nginx 反向代理實(shí)現(xiàn)跨域,是最簡(jiǎn)單的跨域方式
  • 只需要修改 nginx 的配置即可解決跨域問(wèn)題,支持所有瀏覽器,支持session,不需要修改任何代碼,并且不會(huì)影響服務(wù)器性能
// nginx配置server {    listen       81;    server_name  www.domain1.com;    location / {proxy_pass   http://www.domain2.com:8080;  #反向代理proxy_cookie_domain www.domain2.com www.domain1.com; #修改cookie里域名index  index.html index.htm;# 當(dāng)用webpack-dev-server等中間件代理接口訪問(wèn)nignx時(shí),此時(shí)無(wú)瀏覽器參與,故沒(méi)有同源限制,下面的跨域配置可不啟用add_header Access-Control-Allow-Origin http://www.domain1.com;  #當(dāng)前端只跨域不帶cookie時(shí),可為*add_header Access-Control-Allow-Credentials true;    }}

jsonp請(qǐng)求

  • jsonp 是服務(wù)器與客戶端跨源通信的常用方法。最大特點(diǎn)就是簡(jiǎn)單適用,兼容性好 兼容低版本IE,缺點(diǎn)是只支持 get 請(qǐng)求,不支持 post 請(qǐng)求
  • 原理時(shí)網(wǎng)頁(yè)通過(guò)添加一個(gè) <script> 元素,向服務(wù)器請(qǐng)求 json 數(shù)據(jù),服務(wù)器收到請(qǐng)求后,將數(shù)據(jù)放在一個(gè)指定名字的回調(diào)函數(shù)的參數(shù)位置傳回來(lái)
//jquery實(shí)現(xiàn)<script>$.getJSON("http://autofelix.com/api.php&callback=?", function(res) {     // 處理獲得的數(shù)據(jù)     console.log(res)});</script>
  • 后端語(yǔ)言代理
  • 可以通過(guò)一種沒(méi)有跨域限制的語(yǔ)言中轉(zhuǎn)一下,通過(guò)后端語(yǔ)言去請(qǐng)求資源,然后再返回?cái)?shù)據(jù)
  • 比如 http://www.autofelix.cn 需要調(diào)用 http://api.autofelix.cn/userinfo 去獲取用戶數(shù)據(jù),因?yàn)樽佑蛎煌瑫?huì)有跨域限制
  • 可以先請(qǐng)求 http://www.autofelix.cn 下的 php 文件,比如 http://www.autofelix.cn/api.php,然后再通過(guò)該 php 文件返回?cái)?shù)據(jù)
// api.php 文件中的代碼public function getCurl($url, $timeout = 5){    $ch = curl_init();    curl_setopt($ch, CURLOPT_URL, $url);    curl_setopt($ch, CURLOPT_HEADER, 0);    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);    curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);    $result = curl_exec($ch);    curl_close($ch);    return $result;}$result = getCurl("http://api.autofelix.cn/userinfo");return $result;
  • 后端語(yǔ)言的設(shè)置
  • 主要通過(guò)后端語(yǔ)言主動(dòng)設(shè)置跨域請(qǐng)求,這里以 php 作為案例
// 允許所有域名訪問(wèn)header("Access-Control-Allow-Origin: *");// 允許單個(gè)域名訪問(wèn)header("Access-Control-Allow-Origin: https://autofelix.com");// 允許多個(gè)自定義域名訪問(wèn)static public $originarr = [   "https://autofelix.com",   "https://baidu.com",   "https://csdn.net",];// 獲取當(dāng)前跨域域名$origin = isset($_SERVER["HTTP_ORIGIN"]) ? $_SERVER["HTTP_ORIGIN"] : "";if (in_array($origin, self::$originarr)) {    // 允許 $originarr 數(shù)組內(nèi)的 域名跨域訪問(wèn)    header("Access-Control-Allow-Origin:" . $origin);    // 響應(yīng)類型    header("Access-Control-Allow-Methods:POST,GET");    // 帶 cookie 的跨域訪問(wèn)    header("Access-Control-Allow-Credentials: true");    // 響應(yīng)頭設(shè)置    header("Access-Control-Allow-Headers:x-requested-with,Content-Type,X-CSRF-Token");}

到此這篇關(guān)于Nginx跨域問(wèn)題解析與解決的文章就介紹到這了,更多相關(guān)Nginx跨域內(nèi)容請(qǐng)搜索以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持!

標(biāo)簽: Nginx
主站蜘蛛池模板: 伊人激情网 | 99视频精品 | 日韩视频在线观看 | 久久一区| 一区二区三区国产在线观看 | 人人看人人射 | 一区二区色 | 国产视频久久久久 | 国产综合在线视频 | 永久91嫩草亚洲精品人人 | 国产日韩一区二区 | 亚洲资源在线 | 成人免费福利视频 | 欧美伦理一区二区 | 美女午夜影院 | 亚洲国产91 | 亚洲综合视频一区 | 欧美日韩亚洲国产 | 亚洲国产精品成人 | 99精品国自产在线 | 国产欧美在线一区二区 | 成人在线视频网站 | 精品免费av| 亚洲毛片网站 | 国产一区久久精品 | 在线观看免费黄色片 | 91亚洲免费 | 久久综合久久综合久久综合 | 中国一级毛片 | 国产区免费观看 | 国产精品视频一区二区三区 | 欧美aaa视频| 性色国产 | 精品99视频| 成人激情视频在线观看 | 一区二区三区久久 | 国产丝袜一区 | 欧美日韩黄色一级片 | 国产一区二区三区欧美 | 久草久草久 | 午夜在线观看免费 |