码迷,mamicode.com
首页 > Web开发 > 详细

http那些事

时间:2018-07-27 01:15:00      阅读:231      评论:0      收藏:0      [点我收藏+]

标签:bcd   瓶颈   完整性   art   无法   浏览器   Nid   com   pip   

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

  1. Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
  2. Accept-Encoding: gzip, deflate, br
  3. Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
  4. Cache-Control: no-cache
  5. Connection: keep-alive
  6. Cookie: BAIDUID=CA8F324C0F0B6A13B58411F81594F697:FG=1; BIDUPSID=CA8F324C0F0B6A13B58411F81594F697; PSTM=1519610279; BDUSS=kl5OWljSDZudXROQ2J-eE56SnpJLURYemVUdjdtcURkU3FkaFA0Rk5SUFQ5N3BhQVFBQUFBJCQAAAAAAAAAAAEAAACiq3QPODcwMjE4bGkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANNqk1rTapNaR; H_PS_PSSID=1453_26081_21091; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598; BD_CK_SAM=1; PSINO=1; H_PS_645EC=a97avBAZZULv8OatZFkxZSV1x2%2BnNrSoQQNctj0x3DAz%2BE9BRUm9mf%2FYFKPyDjSGidw9; BD_HOME=1; BD_UPN=123253; sug=3; sugstore=1; ORIGIN=2; bdime=0
  7. Host: www.baidu.com
  8. Pragma: no-cache
  9. Referer: https://www.baidu.com/
  10. Upgrade-Insecure-Requests: 1
  11. User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36

 response header

  1. Accept-Ranges: bytes
  2. Age: 1548156
  3. Cache-Control: max-age=2592000  //以上缓存相关
  4. Connection: keep-alive
  5. Content-Encoding: gzip
  6. Content-Type: text/css
  7. Date: Mon, 09 Apr 2018 07:17:25 GMT   //服务器时间
  8. ETag: W/"581afb4e-60b1"                    //客户端缓存
  9. Expires: Sat, 21 Apr 2018 09:14:49 GMT
  10. Last-Modified: Thu, 03 Nov 2016 08:54:38 GMT   //客户缓存 
  11. Ohc-Response-Time: 1 0 0 0 0 0
  12. Server: bfe/1.0.8.13-sslpool-patch      //服务器
  13. Set-Cookie: BDSVRTM=194; path=/
  14. Set-Cookie: H_PS_PSSID=1453_26081_21091; path=/; domain=.baidu.com
  15. Strict-Transport-Security: max-age=172800
  16. Transfer-Encoding: chunked
  17. Vary: Accept-Encoding

 

 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

安装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那些事

标签:bcd   瓶颈   完整性   art   无法   浏览器   Nid   com   pip   

原文地址:https://www.cnblogs.com/wenwenli/p/8711112.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!