当你在浏览器输入url到发起http请求,这过程到底发生了什么?其实整个流程如下:
当用户输入url,操作系统会将输入事件传递到浏览器中,在这过程中,浏览器可能会做一些预处理,比如 Chrome 会根据历史统计来预估所输入字符对应的网站,例如输入goog,根据之前的历史发现 90% 的概率会访问「www.google.com 」,因此就会在输入回车前就马上开始建立 TCP 链接甚至渲染了。
接着是输入url之后,点击回车,这时浏览器会对 URL 进行检查,首先判断协议,如果是 http 就按照 Web 来处理,另外还会对这个 URL 进行安全检查
安全检查完成之后,在浏览器内核中会先查看缓存,然后设置 UA 等 HTTP 信息,接着调用不同平台下网络请求的方法。
注意:
浏览器和浏览器内核是不同的概念,浏览器指的是 Chrome、Firefox,而浏览器内核则是 Blink、Gecko,浏览器内核只负责渲染,GUI 及网络连接等跨平台工作则是浏览器实现的
dns查询ip
DNS,英文是Domain Name System,中文叫域名系统,是Internet的一项服务,他将域名和IP地址相互映射的一个分布式数据库
假设用户在浏览器中输入的是www.google.com,大概过程:
如果输入的是域名,则需要进行dns查询,将域名解析成ip;
进行DNS查询的主机或软件叫做DNS解析器,用户使用的工作站或电脑都属于解析器。域名解析就是利用DNS解析器得到对应IP过程,解析器会向域名服务器进行查询处理。
主要过程如下:
如果以上都没有找到,则继续往下向dns域名服务器查询
注意,
域名查询时有可能是经过了CDN调度器的(如果有cdn存储功能的话)
而且,需要知道dns解析是很耗时的,因此如果解析域名过多,会让首屏加载变得过慢,可以考虑dns-prefetch优化
tcp/ip请求
有了 IP 地址,就可以通过 Socket API 来发送数据了,这时可以选择 TCP 或 UDP 协议。
http本质是tcp协议。
TCP是一种面向有连接的传输层协议。他可以保证两端(发送端和接收端)通信主机之间的通信可达。他能够处理在传输过程中丢包、传输顺序乱掉等异常情况;此外他还能有效利用宽带,缓解网络拥堵。
建立TCP连接一开始都要经过三次握手:
三次握手
第一次握手,请求建立连接,发送端发送连接请求报文
第二次握手,接收端收到发送端发过来的报文,可知发送端现在要建立联机。然后接收端会向发送端发送一个报文
第三次握手,发送端收到了发送过来的报文,需要检查一下返回的内容是否是正确的;若正确的话,发送端再次发送确认包
在TCP连接建立完成之后就可以发送HTTP请求了。
注意
浏览器对同一个域名有连接数限制,大部分是 6,http1.0中往往一个资源下载就需要对应一个tcp/ip请求,而像 HTTP 2.0 协议尽管只使用一个 TCP 连接来传输数据,但性能反而更好,而且还能实现请求优先级。
后面会分享更多devops和DBA内容,感兴趣的朋友可以关注下!!
eb或H5中使用OAuth2授权机制来获取第3方平台用户基础信息,进而实现业务逻辑,这是现在比较流行的做法(基本上OAuth已经成为开放授权事实上的标准了)。
对接第3方平台OAuth2用户授权功能时,首先需要在第3方开放平台中填写授权回调域名,一般允许用户填写的授权回调域名都有数量限制(通常为1个),这就造成我们在开发和正式环境中需要来回更改第3方开放平台中授权回调域名。
本文主要讲解如何创建OAuth2授权回调中转URL。
中转URL:该URL主要将第3方平台OAuth2用户授权重定向时传递的code参数以及其他Query参数一起传递给应用的最终回调URL上。因此我们只需要将第3方开放平台中授权回调域名固定为该URL所在域名即可。
思路:创建一个纯静态HTML文件,该URL接收一个redirect_uri参数指向应用最终回调URL,通过JavaScript获取redirect_uri值作为最终回调URL并获取其他参数拼接到最终回调URL上,最后重定向到最终回调URL上。
优势:1). 无需后端服务器进行解析,系统开销小 2). 可以直接将该HTML文件上传到外部平台,对外部平台无任何破坏性
调用方式:
假设中转URL为: https://codebays.com/oauth.html,应用最终回调URL为:https://codebays.com/oauth2/callback。
第3方开放平台授权回调域名固定为codebays.com即可。
构建OAuth2用户授权URL时,参数redirect_uri的值填入:
https://codebays.com/oauth.html?redirect_uri=urlencode(https://codebays.com/oauth2/callback)
代码如下:
思路:Nginx安装LuaJIT扩展(可以直接安装Openresty),Nginx配置文件中配置一个虚拟location(指向路径/oauth.html),虚拟location使用lua脚本来实现rewrite。
优势:1). Nginx+Lua直接解析并重定向,系统开销小
Nginx配置参数如下:
oauth.lua代码如下:
Openresty是一个基于Nginx和Lua的高性能Web平台,用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。
【web说】不局限于web知识分享。
eb或H5中使用OAuth2授权机制来获取第3方平台用户基础信息,进而实现业务逻辑,这是现在比较流行的做法(基本上OAuth已经成为开放授权事实上的标准了)。
对接第3方平台OAuth2用户授权功能时,首先需要在第3方开放平台中填写授权回调域名,一般允许用户填写的授权回调域名都有数量限制(通常为1个),这就造成我们在开发和正式环境中需要来回更改第3方开放平台中授权回调域名。
本文主要讲解如何创建OAuth2授权回调中转URL。
中转URL:该URL主要将第3方平台OAuth2用户授权重定向时传递的code参数以及其他Query参数一起传递给应用的最终回调URL上。因此我们只需要将第3方开放平台中授权回调域名固定为该URL所在域名即可。
思路:创建一个纯静态HTML文件,该URL接收一个redirect_uri参数指向应用最终回调URL,通过JavaScript获取redirect_uri值作为最终回调URL并获取其他参数拼接到最终回调URL上,最后重定向到最终回调URL上。
优势:1). 无需后端服务器进行解析,系统开销小 2). 可以直接将该HTML文件上传到外部平台,对外部平台无任何破坏性
调用方式:
假设中转URL为: https://codebays.com/oauth.html,应用最终回调URL为:https://codebays.com/oauth2/callback。
第3方开放平台授权回调域名固定为codebays.com即可。
构建OAuth2用户授权URL时,参数redirect_uri的值填入:
https://codebays.com/oauth.html?redirect_uri=urlencode(https://codebays.com/oauth2/callback)
代码如下:
思路:Nginx安装LuaJIT扩展(可以直接安装Openresty),Nginx配置文件中配置一个虚拟location(指向路径/oauth.html),虚拟location使用lua脚本来实现rewrite。
优势:1). Nginx+Lua直接解析并重定向,系统开销小
Nginx配置参数如下:
oauth.lua代码如下:
Openresty是一个基于Nginx和Lua的高性能Web平台,用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。
【web说】不局限于web知识分享。
*请认真填写需求信息,我们会在24小时内与您取得联系。