http那些事
Posted wenwenli
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了http那些事相关的知识,希望对你有一定的参考价值。
1. 浏览器行为与http协议
浏览器和服务器的交互过程
当浏览器中输入网址回车后:
浏览器会先检查网络是不是通,如果通会到DNS服务器上获取网址的ip地址,然后发送http请求,服务器接到请求并处理(三次握手),返回html相应,浏览器处理html页面和资源。
首先,客户机和服务器建立连接(TCP连接)。只要单击某个超级链接,HTTP的工作开始
然后,建立连接后,客户机发送一个请求给服务器(HTTP请求),请求格式为:统一资源标识符(URL)、协议版本号,后面是MIME信息,包括请求修饰符、客户机信息和可能的内容。
再然后,服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。
最后,客户端接收服务器所返回的信息通过浏览器显示在用户的显示屏上,然后客户机与服务器断开连接。
2. DNS是谁在维护?
DNS是Domain Name System域名系统,用于将域名转换为IP
运营商自己维护,公司维护公司的,国家级的国家维护
顶级域名baidu.com,二级域名www.baidu.com
域名资源记录,域名服务器,作用,存储资源记录和帮助域名解析,域名解析
DNS污染,墙
3. 事务,全都是真才成立,其中任何一个失败,则全部失败,这种操作就是事务。
4. ios/OSI协议,事实协议(TCP/IP协议栈)
TCP是http的底层协议
应用层,为用户提供所需的各种服务,如http,ftp,dns,smtp等,https多两个TLS和SSL,http2
传输层,为应用层实体提供端到端的通信功能,保证数据包的顺序传送及数据完整。有两种协议,TCP(端对端,一对一)和UDP(不安全,传输完整性不保证,广播)
网络层,主要解决主机到主机的通信问题。IP协议是互联网层最主要的协议
网络接口层,负责监视数据在主机和网络之间的交换
路由器和网关的功能类似,路由器可以设置DNS。
网关,限制网络通信,网卡
5.
目前应用版本HTTP1.1,HTTP2有,但是用的不多。
HTTP默认端口号是80
HTTPS默认端口号是443,HTTPS比HTTP多了TLS和SSL(链路加密)
6. 请求和响应
request headers
response header
7. 请求方法
GET ,请求获取Request-URI所标识的资源
POST,在Request-URI所标识的资源后附加新的数据 //Request-URI指的是请求路径吧
HEAD,请求获取由Request-URI所标识的资源的响应消息报头,即只获取响应头部信息
PUT,
DELETE
TRACE,主要用于测试或诊断
CONNECT,保留将来使用
OPTIONS,请求查询服务器的性能,或者查询与资源相关的选项和需求
8. HTTP的状态码
1xx: 提示信息,表示请求已接收,继续处理
2xx:成功,表示请求已被成功接收、理解、接受
3xx:重定向,要完成请求必须进行更进一步的操作
4xx: 客户端错误, 请求有语法错误或请求无法实现
5xx:服务器端错误,服务器未能实现合法的请求
9. cookie和session
cookie 可以在客户端或服务器端设置
session 只保存在服务器端,通过唯一的值sessionID来区别每个用户。
服务器是根据session生成客户端的cookie,作为服务器识别用户的id,实现用户的登陆
身份令牌放到请求头上,防止跨站攻击
10. 缓存机制
优点,提高效率,减少消耗
11. HTTP的链路安全
加密重要数据
对非重要数据签名
12. HTTP2
使用二进制格式传输,更高效、更紧凑
对报头压缩,降低开销
多路复用,一个网络连接实现实现并行请求
服务器主动推送,减少请求的延迟
13. HTTP和反向代理
tcpdump抓包的
什么是代理,什么是正向代理,什么是反向代理
代理就是不自己动手,找别人代理自己
代理有缓存的作用,安全性问题,敏感数据访问问题,相当于国外代购,主要功能是限制和提速(缓存)
框表示局域网,或是机房,出口IP有一个,还可以做负载均衡
代理的本质是一样的,将请求做一个转发,实现不同
反向代理的用途
加密和ssl加速,负载均衡,缓存静态内容,压缩,减速上传,安全,外网发布
反向代理服务器
安装nginx
1. mac本直接执行
brew install homebrew/nginx/openresty 即可,参考 http://openresty.org/cn/installation.html
2. mac有自带的python, 2.7系列都可以。安装pip,执行 sudo easy_install pip
3. 安装完成后,修改server。打开
/usr/local/etc/openresty/nginx.conf,复制以下代码到文件中
server {
listen 6060;
server_name beidou.com;
location / {
index index.html index.htm;
root /Users/admin/halley/src/privatesource/front;
try_files $uri $uri/ /index.html;
}
location ^~ /api/ {
proxy_set_header Host $host;
proxy_set_header Proxy-Client-IP $remote_addr;
proxy_set_header x-forwarded-for $proxy_add_x_forwarded_for;
client_body_buffer_size 128k;
proxy_pass http://127.0.0.1:8008/;
}
}
修改root地址,改为自己的目录。
nginx的反向代理
在http模块内
http {
upstream web_crm{
server 127.0.0.1:8080
}
server{
location /crm/{
proxy_pass http://web_crm/crm/;
proxy_redirect off;
proxy_set_header Host $host;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade; //防止nginx服务器覆盖客户端的ip和其他信息
proxy_set_header Connection ‘upgrade‘;
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for
}
}
}
14. 针对请求的优化
前端的性能影响因素,网络,DOM的处理,浏览器的渲染
w3cprocessing module
navigationStart阶段,请求开始计时,
redirectStart阶段,针对缓存的重定向,本地的重定向,先检查是否有缓存策略,有的话就使用本地缓存
unloadStart阶段,如果本地缓存里有原来的东西,先unload,然后再请求
unloadEnd
redirectEnd阶段,
fetchStart阶段,如果本地有缓存,则本阶段是从本地获取缓存
fetchEnd阶段,如果缓存满足要求,就不要联网了,请求完成,如果不能满足,则进行下面的步骤
domainLookupStart阶段,找DNS,DNS服务器的地址内置到了本地的电脑上,如果是动态的ip,则由DHCP动态赋值,一般是在路由器上设置的
domainLookupEnd阶段,
connectStart阶段,TCP连接开始
(secureConnectionStart)如果是https连接的话,就有这步
connectEnd阶段,TCP连接成功
requestStart阶段,
responseStart阶段
responseEnd阶段
domLoading阶段,Processing
domInteractive阶段,内存处理dom文档的标记,dom转成树形结构
domContentLoaded阶段,
domComplete阶段,dom处理完毕
loadEventStart阶段,onLoad事件触发,浏览器开始渲染dom结构
loadEventEnd阶段
15. tcp三次握手和四次挥手
数据发送和数据接收
传输层是TCP协议,网络层是IP协议
数据在电脑中的传输和解析过程
TCP数据包的组成,并且可以分包
traceroute www.baidu.com 追踪路由器
为什么是三次握手,来回确认,然后建立连接
第一次客户端:诶呀,这不是小明吗,第二次服务器端:是呀,这不是小李吗,第三次客户端:好久不见呀,来聊聊。
四次挥手,再见,第一次客户端:我有事,要不我先走?第二次服务器端:啊,你还有事啊,第三次服务器端:你有事,你就先忙吧,我这也没有事了,第四次客户端:那我就先走啦。
网络断开的话就是客户端重试,服务器端超时
事物完没完成由上层协议决定
16. CDN概念
负载均衡,瓶颈,跨网络,网络链路
CDN是一个分发策略,综合方案,镜像服务器,同步数据,网络链路的优化,目的,提速
17. 缓存机制
缓存的优点:
减少响应延迟
减少网络带宽消耗
网络属于I/O开销,和I/O相关都属于开销,服务器的处理压力和处理速度
浏览器第一次请求
再次请求
缓存的配置,需要在服务器上配置,一般都是使用内置的,一般不重写
以上是关于http那些事的主要内容,如果未能解决你的问题,请参考以下文章