浅谈http协议

1.http基础概念

2.请求与响应过程

3.请求头响应头及请求方式简述

4.客户端缓存(cookie,session及其他缓存机制)

1.什么是http????

HTTP是一套计算机通过网络进行通信的规则。使HTTP客户(如Web浏览器)能够从HTTP服务器(Web服务器)请求信息和服务,HTTP是一种无状态的协议。

1.1无状态的协议

无状态是指Web浏览器和Web服务器之间不需要建立持久的连接,

这意味着当一个客户端向服务器端发出请求,然后Web服务器返回响应(response),连接就被关闭了

2. 一次完整的http请求

域名解析:

(1) 浏览器首次搜索自身的DNS缓存,检查自身的缓存(缓存时间大概为 几分钟)中有没有相应的域名IP地址。如果有,则检查是否过期,如果没有过期,那么将结果返回并结束域名解析的过程;否则,往下执行;

(2) 在浏览器自身没找到IP地址的话,浏览器就会在操作系统搜索DNS缓存。如果存在,同样需要检查是否过期;

(3) 如果操作系统中也没有找到,那么就读取本地的HOST文件(在C盘下:Windows\System32\drivers\etc),在本地文件里面查找;

(4) 如果在本地HOST文件下也没能找到,那么浏览器发起一个DNS的系统调用。过程如下:

  1. 宽带运营商服务器查看本地缓存,如果找到就结束该过程,否则继续执行;

  2. 宽带运营商服务器代替浏览器发起一个迭代DNS的请求:首先找到根域的DNS IP地址拿到顶级域COM域的IP地址;接着在COM域服务器的地址中寻找主域名(如:imooc.com)的DNS服务器的地址;最后在主域名DNS服务器中找到请求的域名的IP地址,主域名DNS服务器就将该地址发送给运营商服务器。这个时候运营商服务器将结果返回给操作系统内核,然后内核从操作系统DNS服务器上拿去IP地址并返回给浏览器,最后就是浏览器拿到了请求域名的IP地址。

( 1 ) 建立TCP连接

三次握手 建立连接

( 2 ) 浏览器向服务器发送请求命令

( 3 ) 服务器响应

( 4 ) Web服务器关闭TCP连接

请求方式:

GET

GET是http的默认请求方式,一般用来获取数据,传输的数据经过url编码后放在路径?之后,多个键值对通过&连接,另外get的传输长度一般不推荐超过255个字节。

GET方法一般被视为安全方法, 因为它仅用来获取数据而不会对服务器有其他改动。像HEAD、GET、OPTIONS 和 TRACE这几种http方法是被认为是“安全的”,它们只会进行获取数据而不会修改服务器的状态,可用于记录日志、创建缓存或者创建其他统计信息。相反,像POST、PUT、DELETE 和 PATCH 等方法是有可能产生副作用。网络爬虫等一般不会使用这些方式

POST

POST一般用来上传文件或者提交一个完整的web表单。浏览器中提交表单时,这里与get类似,每个键值对都是通过&分割, 其他非字母数字会进行url转码。

其他请求方式

  • HEAD获取某个URI响应头信息,基本与GET相同但是不返回响应主体。
  • PUT通过提供的URI获取到特定的内容主体,如果存在则修改内容,如果不存在则创建。
  • DELETE通过URI删除指定内容
  • TRACE返回接受到的请求,用来查看数据经过中间服务器时发生了哪些变动
  • OPTIONS返回给定URL支持的所有HTTP方法,这样可以用来检查web服务器的功能
  • CONNECT要求使用SSL和TLS进行TCP通信
  • PATCH请求修改局部数据

这些请求方法本质上没有区别,最终都是TCP请求,唯一的区别就是每个请求方法,使用的时候,规范规定的使用格式不同,原则上必须按照规范规定的格式使用,其实也可以违反规范使用,比如你可以使用GET方法请求数据,也可以使用GET方法提交数据,当然你可以用POST方法提交数据,也可以用POST方法获取数据。

下面是Chrome发起的http请求报文头部信息:

clipboard3.png
  • Accept 就是告诉服务器端,我接受那些MIME类型
  • Accept-Encoding 接受哪些压缩方式的文件
  • Accept-Lanague 告诉服务器能够发送哪些语言
  • Connection 告诉服务器支持keep-alive特性
  • Cookie 每次请求时都会携带上Cookie以方便服务器端识别是否是同一个客户端
  • Host 用来标识请求服务器上的那个虚拟主机,比如Nginx里面可以定义很多个虚拟主机.那这里就是用来标识要访问那个虚拟主机。
  • User-Agent 用户代理,一般情况是浏览器,也有其他类型,如:wget curl 搜索引擎的蜘蛛等
  • 安全请求首部:
  • Authorization: 客户端提供给服务器的认证信息;
  • accessToken: 一般作为请求操作时的访问令牌,比如你让用户用QQ登陆后要去拿用户的QQ头像,这时候向腾讯API发送请求时就需要带上access_token。

响应头:


clipboard4.png
  • Access-Control-Allow-Credentials: 允许跨域
  • Access-Control-Allow-Headers: 允许访问的请求头
  • Access-Control-Allow-Methods: 请求方式
  • Access-Control-Allow-Origin: 域名
  • Access-Control-Expose-Headers:
  • Transfer-Encoding:chunked 分块传输编码 是http中的一种数据传输机制,允许HTTP由网页服务器发送给客户端应用(通常是网页浏览器)的数据可以分成多个部分

拓展:(WebSocket) 有状态

需要通过浏览器发出websocket连线请求,然后服务器发出回应,浏览器和服务器之间就形成了一条快速通道。两者之间就直接可以数据互相传送。

特点:持久的连接

互相沟通的Header是很小的-大概只有 2 Bytes

服务器不再被动的接收到浏览器的请求之后才返回数据,而是在有新数据时就主动推送给浏览器。

webSocket api

  1. 创建webSocket对象

var Socket = new WebSocket(url, [protocol] );//第一个参数 url, 指定连接的 URL。第二个参数 protocol 是可选的,指定了可接受的子协议。

  1. 方法:


    QQ截图20180114160210.png

详细了解 参考资料(https://www.zhihu.com/question/20215561


浏览器存储机制

cookie、localstorage、sessionStorage

clipboard.png

cookie的内容主要包括:名字、值、过期时间、路径和域

Secure – 安全

指定cookie的值通过网络如何在用户和WEB服务器之间传递。

这个属性的值或者是“secure”,或者为空。缺省情况下,该属性为空,也就是使用不安全的HTTP连接传递数据。如果一个 cookie 标记为secure,那么,它与WEB服务器之间就通过HTTPS或者其它安全协议传递数据。不过,设置了secure属性不代表其他人不能看到你机器本地保存的cookie。换句话说,把cookie设置为secure,只保证cookie与WEB服务器之间的数据传输过程加密,而保存在本地的 cookie文件并不加密。如果想让本地cookie也加密,得自己加密数据。

Web Storage的概念和cookie相似,区别是它是为了更大容量存储设计的。Cookie的大小是受限的,并且每次你请求一个新的页面的时候Cookie都会被发送过去,这样无形中浪费了带宽,另外cookie还需要指定作用域,不可以跨域调用。

除此之外,Web Storage拥有setItem,getItem,removeItem,clear等方法,不像cookie需要前端开发者自己封装setCookie,getCookie。

最主要的区别:

  • localStorage生命周期是永久,这意味着除非用户显示在浏览器提供的UI上清除localStorage信息,否则这些信息将永远存在。
  • sessionStorage生命周期为当前窗口或标签页,一旦窗口或标签页被永久关闭了,那么所有通过sessionStorage存储的数据也就被清空了。

Cache

1.Application Cache

html5提供的一种应用缓存机制,使得基于web的应用程序可以离线运行。优点有如下几点:

离线浏览: 用户可以在离线状态下浏览网站内容。

更快的速度: 因为数据被存储在本地,所以速度会更快。

减轻服务器的负载: 浏览器只会下载在服务器上发生改变的资源。

使用:

1.开启应用缓存:在html标签制定manifest,manifest特性与 缓存清单(cache manifest) 文件关联,这个文件包含了浏览器需要为你的应用缓存的资源(文件)列表

clipboard1.png

2.编写缓存清单文件

clipboard2.png

CACHE:

这是缓存文件中记录所属的默认段落。在 CACHE: 段落标题后(或直接跟在 CACHE MANIFEST 行后)列出的文件会在它们第一次下载完毕后缓存起来。

NETWORK:

在 NETWORK: 需要与服务器连接的白名单资源。所有类似资源的请求都会绕过缓存,即使用户处于离线状态。可以使用通配符“*”代表除以上指定之外全部需要从服务器拉取。

FALLBACK:

FALLBACK: 段指定了一个后备页面,当资源无法访问时,浏览器会使用该页面。该段落的每条记录都列出两个 URI—第一个表示资源,第二个表示后备页面。两个 URI 都必须使用相对路径并且与清单文件同源。可以使用通配符,类似404.html。

CACHE, NETWORK, 和 FALLBACK 段落可以以任意顺序出现在缓存清单文件中,并且每个段落可以在同一清单文件中出现多次。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,463评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,868评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,213评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,666评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,759评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,725评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,716评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,484评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,928评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,233评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,393评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,073评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,718评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,308评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,538评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,338评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,260评论 2 352

推荐阅读更多精彩内容

  • 本文为原创作品。欢迎转载,转载请注明出处:林东洲的博客 | Lindz Blog。 作为一个 Weber,掌握必要...
    Lindz阅读 827评论 0 4
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,647评论 18 139
  • Http协议详解 标签(空格分隔): Linux 声明:本片文章非原创,内容来源于博客园作者MIN飞翔的HTTP协...
    Sivin阅读 5,220评论 3 82
  • http协议有http0.9,http1.0,http1.1和http2三个版本,但是现在浏览器使用的是htt...
    一现_阅读 1,860评论 0 3
  • 喜欢的东西:阳光,1988,你镜头下的猫。
    江添阅读 95评论 0 0