前端通过Ajax来获取服务器资源时,会存在跨域问题。因为Ajax只能同源使用(预防某些恶意行为),所以当访问不在同一个域中的资源时,就会出现跨域限制。尤其在开发和测试时,跨域问题会给前端测试带来非常不便。
不过歌珥(跨源资源共享、跨域资源共享)解决了这个问题,它背后的基本思想的是:使用自定义的HTTP头部让浏览器与服务器进行沟通,从而决定请求或响应是否应该成功.CORS需要浏览器和服务器同时支持。整个歌珥通信过程,浏览器是自动完成,而服务器需要手动配置。
ajax。
& lt; !doctype html> & lt; html lang=癳n”比; & lt; head> & lt;元charset=皍tf - 8”比; & lt; meta name=" viewport " 内容="宽度=设备宽度,user-scalable=不,初始=1.0,最大范围=1.0,最小规模=1.0”比; & lt;元http-equiv=癤-UA-Compatible”内容=癷e=边缘”比; & lt; script> loadXMLDoc函数(){ var xmlhttp; 如果(window.XMLHttpRequest) { xmlhttp=new XMLHttpRequest (); } 其他{ xmlhttp=new ActiveXObject (“Microsoft.XMLHTTP”); } xmlhttp。onreadystatechange=function () { 如果(xmlhttp。readyState==4,,xmlhttp。状态==200){ . getelementbyid (“myDiv”)。innerHTML=xmlhttp.responseText; } } xmlhttp。开放(“获得”、“http://127.0.0.1:8000 ajax”,真正的); xmlhttp.send (); } & lt;/script> & lt; title> Document & lt;/head> & lt; body> & lt; h3>交叉origin & lt;按钮类型=鞍磁ァ痹谇肭笫? lt;/button> & lt; div id=" myDiv "祝辞& lt;/div> & lt;/body> & lt;/html>
crossorigin.go
主要包 导入( “net/http” “html/模板” “fmt” “编码/json” ) 类型消息结构体{ 名称字符串的json:“名字” 味精字符串的json:“味精” } 函数main () { http。入口HandleFunc (“/? http。TestCrossOrigin HandleFunc (“/ajax”) http。nil ListenAndServe (“8000”) } 函数入口(w http。ResponseWriter r * http.Request) { t, _:=template.ParseFiles(“模板/ajax。”) t。执行(w, nil) } func TestCrossOrigin http (w。ResponseWriter r * http.Request) { 如果r。方法==暗玫健眥 var消息消息 消息。Name=" benben_2015 " 消息。味精="成功" 因此,犯错:=json.Marshal(消息) 如果犯错!=nil { fmt.Println (err) 返回 } ResponseWithOrigin (w, r, http。StatusOK,结果) 返回 } } func ResponseWithOrigin http (w。ResponseWriter r * http。请求,json代码int[]字节){ w.Header ()。集(“内容类型”、“application/json;charset=utf - 8”) w.WriteHeader(代码) w.Write (json) }
当从http://localhost: 8000/页面(ajax。)通过ajax访问http://localhost: 8000/ajax时,就会出现下图所示的错误:
w.Header ()。集(“Access-Control-Allow-Origin”、“*”)//?”表示接受任意域名的请求,这个值也可以根据自己需要,设置成不同域名
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。