亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

跨域問題產生的原因以及解決方法

跨域问题的产生原因

>浏览器限制
>产生跨域请求
>请求是xhr

跨域问题的解决方式

>1、使用jsonp
>2、修改服务器对Cookie的限制
>3、Nginx配置允许请求跨域

使用jsonp的弊端:

1、使用jsonp解决跨域问题需要后端修改代码支持jsonp

2、请求只能是get,即使改成post还是get

3、发送的不是XHR请求

具体解决方式

1、服务器允许带Cookie的请求,代码修改:

header("Access-Control-Allow-Credentials:true");

header("Access-Control-Allow-Origin:".(isset($_SERVER['HTTP_ORIGIN'])?$_SERVER['HTTP_ORIGIN']:'*'));

header("Access-Control-Allow-Headers:Origin,X-Requested-With,X_Requested_With,X_Token,Content-Type,Accept");

>
>第一行:允许跨域
>第二行:允许哪些请求来源进行跨域
>第三行:允许哪些请求头可进行跨域
>带Cookie的跨域请求Origin需要是完全匹配,不能再使用“*”;要新加“Credentials”属性,并且值为“true”;跨域请求的Header头带“Origin”字段,判断是否有此字段

2、使用jsonp,后端修改代码允许跨域

public function outputJsonp($content, $code = 0, $msg = '')
{
	//省略一部分不重要代码
	$data = [
		'result' => $code,
		'data' => $content,
		'msg' =>$msg
	];
	//jsonp返回
	//这里的callback是前端自定义传过来的,前端工程师如果用过跨域的话,那她肯定知道这个是"$callback"怎么回事
	$callback = $this->getRequest()->getQuery("callback");
	if($callback){
		exit($callback."(".json_encode($data).")");
	}
	exit(json_encode($data));
}

3、Nginx配置允许跨域:

service{

	#省略网站访问正常配置代码
	#······
	location /{
		add_header Access-Control-Allow-Methods *;
		add_header Access-Control-Allow-Max-Age 3600;#请求缓存最大时间
		add_header Access-Control-Allow-Credentials true;#允许跨域请求
		add_header Access-Control-Allow-Origin $http_origin;#获取http请求的Origin字段
		add_header Access-Control-Allow-Headers $http_access_control_request_headers;#获取请求头信息字段

		if ($request_method = OPTIONS){
			return 200;
		}
	}
	
}
點擊查看更多內容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
軟件工程師
手記
粉絲
19
獲贊與收藏
139

關注作者,訂閱最新文章

閱讀免費教程

  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消