博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
跨域和http请求学习
阅读量:6605 次
发布时间:2019-06-24

本文共 1697 字,大约阅读时间需要 5 分钟。

跨域

1.什么是跨域

跨域:指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器施加的安全机制。 所谓同源,指的是协议,域名和端口号相同。

2.解决方法

(1)jsonp的核心思想是:浏览器的script,img,iframe标签不受同源策略的限制,所以可以通过script标签引入一个js文件,文件载入成功后会执行我们在url参数中指定的callback函数,并且把我们需要的json数据作为参数传入;

优点是兼容性好,缺点是只支持get请求,且只支持跨域http请求这种情况;

(2)CORS 在服务器端通过检查请求头部的origin,从而决定请求应该成功还是失败。具体的方法是在服务端设置Response Header响应头中的Access-Control-Allow-Origin为对应的域名,实现了CORS(跨域资源共享);

(3)  document.domain 必须满足两个条件:1) 页面中嵌入iframe框架,2) 当前页面和iframe中的页面,主域,协议,端口必须完全一致;

(4)window.postMessage(message,targetOrigin) 方法是html5新引进的特性,可以用它来向其它的window对象发送信息,无论这个window对象属于同源或者不同源,

接收消息window.addEventListener('message', function(e){})

http请求

1.在浏览器端输入网站的url地址;

2.浏览器查找缓存

浏览器会查找浏览器缓存,系统缓存,路由缓存,如果没有的话,继续下一步,如果有的话,直接显示

tip:浏览器会把访问过的web网站资源缓存起来,而判断是否使用缓存的条件有以下几种:

(1)是否有这个网站的缓存

(2)这个网站的缓存是否过期,具体看Cache-Control中缓存的有效时间;

(3)跟服务器协商是否使用缓存,如果上次缓存的时候有Last-modified 和 Etag字段,本次请求就会加上If-Modified-Since(上次请求资源的时间)和If-None-Match(上次资源的修改时间);

3.通过DNS获取url对应的ip地址

先在本机的host文件中查找是否有这个url对应的ip,如果没有的话,就请求DNS进行ip地址的获取;

4.建立TCP链接

http在工作之前,需要客户端和服务端建立链接,这个链接的建立是通过tcp(三次握手)来完成的,

5.浏览器向web服务器发送请求

一旦链接已经建立,浏览器就可以给web服务器发送请求命令;

6.浏览器给web服务器发送请求头信息

浏览器在发送了请求后,还要给web服务器发送请求头信息,比如accept-charset(浏览器端指定的字符集),最后发送一个空的请求头代表请求发送完毕,注意:如果是post提交,则会继续提交请求体

7.web服务器进行应答 

应答的第一部分是http版本号,第二部分是协议的状态码

 8.web服务器发送应答头消息 web服务器给浏览器发送应答头消息,也就是关于web服务器自己的信息,最后发送一个空白行代表应答结束 

 9.web服务器发送数据 以应答头里面的content-type所描述的格式发送数据 

 10.web服务器关闭链接 web服务器向浏览器发送了应答数据之后,就要关闭tcp链接(tcp四次握手关闭链接),如果添加了connection:keep-alive,那么就还会保持链接状态 

学习来自:  https://blog.csdn.net/zhttly/article/details/82832582

浏览器渲染过程

1.浏览器获取html文件后,会自上而下进行加载,并且在加载的过程中进行解析和渲染

2.如果遇到外部css文件和图片,浏览器会另外发送一个请求,去获取css文件和响应的图片,这个请求是异步的,不会影响html的加载速度,如果遇到js文件,html文件则会挂起渲染的过程,等待js文件加载完毕,再继续进行渲染;所以一般把js文件写在body的末尾;

你可能感兴趣的文章
大数据下基于Tensorflow框架的深度学习示例教程
查看>>
Linux性能测试top衍生命令atop/htop/slaptop
查看>>
Nginx配置文件详细说明
查看>>
写给iOS程序员的命令行使用秘籍
查看>>
数据加密解密初探
查看>>
DAVINCI DM365-DM368开发攻略——开发环境搭建(DVSDK4.02)
查看>>
我的友情链接
查看>>
jSearch 上码云推荐啦(@红薯 大大亲推)!!!
查看>>
Laravel学习笔记
查看>>
×××的老板,苦逼的程序员
查看>>
python虚拟环境virtualenv下安装MySQL-python
查看>>
OpenStack安装部署
查看>>
ELK部署实战
查看>>
android面试题
查看>>
【原】nginx均衡多tomcat环境配置,及这种环境下的remoteIp及ServerName获取方式
查看>>
chosen.jquery.min.js 使用js手动更新选项
查看>>
spring mvc 视频资料
查看>>
Android系统耗电普遍判断逻辑
查看>>
构造函数与析构函数
查看>>
python代码风格指南:pep8 中文翻译
查看>>