浏览器中输入URL到完整渲染出来,HTTP过程如下图:
HTTP协议的三次握手
在客户端和服务端之间发送请求和返回响应的过程,是需要进行TCP connection。
TCP(Transmission Control Protocol) 传输控制协议
TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接: 用来规由于网络延迟等问题而造成的不必要开销。
URI, URL, URN
URI 统一资源标志符,包含URL 和URN
URL 统一资源定位符, (访问http://www.baidu.com 默认访问的端口是80端口)
URN 永久同意资源标志符
HTTP跨域请求资源:
如何设置响应头才可以让跨域请求资源生效?
方式一:
// node
response.writeHead(200, {
"Access-Control-Allow-Origin" : "*"
})
注释: 在跨域请求中,实际数据是已经返回了,只不过浏览器的同源策略解析数据内容,发现不允许将其拦截。
方式二:
<script src="http://www.google.com"></script>
浏览器不会限制img,script元素中的src对应的路径发送的请求和返回值。
在设置响应头
response.writeHead(200, {
"Access-control-Allow-Origin" : "*"
})
其中” * “表示所有服务的请求都被允许跨域,但是这样太不安全。所以应当设置成当前确定的域。
比如:
response.writeHead(200, {
"Access-control-Allow-Origin" : "http://www.baidu.com"
})
CORS预请求
自定义请求头在跨域的时候,也是不被允许的。
请求头:
headers: {
"X-Test-Cors": "123"
}
报错如下:
解决方法:
// 在响应头中设置
response.writeHead(200, {
"Access-Control-Allow-Headers": "X-Test-Cors"
})
会发现页面的请求中多了一个请求,这个请求的方法是OPTIONS。目的是为了去获取浏览器的认可。