Http知识点总结

以下是我学习web开发以来对于http相关知识的理解,如理解有误之处,望大佬们多多指点。


一、cookie和session

Cookie(机制)

        1、服务器通过在http的响应头带上set-Cookie,可以设置该域名对应的Cookie值

        2、浏览器访问指定域名时,必须在request 头部带上Cookie值

        3、Cookie可以设置过期时间,到达过期时间,浏览器会自动清除该Cookie

Session(应用)

        1、Session是对Cookie这种机制的一种应用,所以说Cookie是Session的基石

        2、Session一般用来识别用户的,因为http协议本身是无连接状态的,需要通过Cookie中携带的SeesionID来判断请求的是哪个用户

        3、SeesionID一般都是一串随机数字,一般通过在服务器的内存中存储 随机数(SeesionID) 对应 用户(用户常用的个人信息) 的哈希表,可以快速使用SeesionID找到对应的用户信息


二、浏览器的缓存机制

    1、缓存分为两种缓存,强缓存(命中缓存条件则直接使用缓存资源)和协商缓存(当发现有缓存资源时,会发http报文进行确认,确认资源没被修改则使用缓存资源)


    2、强缓存,有两种配置方式,通过服务器响应静态资源的response头部加入[Expires] 或者 [Cache-Control] 字段,进行配置

        ① [Expires](早期方案)使用的方式是:服务器在responese头部中发送Expires: Mon,10 Dec 2018 02:25:22GMT,意思是告诉浏览器 该静态资源过期的具体时间(绝对时间,以浏览器本地时间为准)

        ② [Cache-Control] 使用的方式是:服务器在responese头部中发送 Cache-Control: max-age=300 ,意思是告诉浏览器该静态资源有效的相对时间,指的是从接收到资源以后开始计时的300秒(相对时间)

        ③ 强缓存的缺点: [Expires]和[Cache-Control] 共有缺点,缓存的静态资源在过期时间内,服务器进行了更改,客户端还是依旧使用缓存资源,因为该资源没有过期。

            解决的办法:通过更新HTML中引用资源的URL,比如在最后加上查询参数 ?v=1 ,让浏览器主动放弃缓存,加载新缓存。

        ④ 强缓存的优点:

            只要命中强缓存,浏览器就会直接使用缓存文件,不会向服务器发送请求,速度会更快。

    3、协商缓存,有两种常见使用方式,通过服务器响应静态资源的response头部加入[ETag](下次协商的request带上[If-None-Match]) 或者[Last-Modified](下次协商的request带上[If-Modified-Since]) 。

        ① [ETag] 使用的方式是: 服务器在responese头部中发送 ETag:W/"e-cbxLFQW5zapn79tQwb/g6Q",ETag中携带的值其实就是该文件的摘要(类似MD5,代表该文件独一无二的值),浏览器通过存储该值,在下次需要请求静态资源时的request包头中加入 If-None-Match:W/"e-cbxLFQW5zapn79tQwb/g6Q" ,告诉服务器当前缓存文件的摘要,服务器会取出该文件,计算文件摘要,若值与浏览器返回的值一致,则给浏览器返回304表示可以使用缓存中的资源。

        ② [Last-Modified] 使用的方式是: 服务器在responese头部中发送Last-Modified:Sun, 24 Jun 2018 15:37:08 GMT,Last-Modified中携带的值其实就是该文件的在服务器是最后的修改时间,浏览器通过存储该值,在下次需要请求静态资源时的request包头中加入 If-Modified-Since:Sun, 24 Jun 2018 15:37:08 GMT ,告诉服务器当前缓存文件的最后修改时间(指上次在服务器中的),服务器会取出该文件,查询文件最后修改时间,若值与浏览器返回的值一致,则给浏览器返回304表示可以使用缓存中的资源。

        ③ 两者的缺点,以及解决办法

       [ETag] 的缺点:当服务器采用集群负载均衡的方式搭建时,每一台服务器上计算文件摘要的值都是不同的,当浏览器上次访问服务器和这次访问的服务器不同的时候,ETag得到的值也就会不同,但是文件还是一样的。

       [Last-Modified]的缺点: 系统上的文件有时内容不会改变,但是修改时间变了,又或者是某些文件修改非常频繁(毫秒级别),但是Last-Modified值记录的边界只是秒为单位,有可能照成文件不一样但是最后修改时间是“一样的”这种现象。

        解决方法:两者同时使用,也是现在最常见的解决方案。服务器会优先验证ETag,一致的情况下,才会继续比对Last-Modified,最后才决定是否返回304。

        协商缓存的缺点:虽然协商成功后服务端只需要回复一个body为空的Response报文,但任然还需要发送Request请求与浏览器确认是否可以使用缓存,相对于强缓存更慢一些。


三、常见状态码

    2XX系列:表示请求已经成功,成功的方式不同而已

        200:表示请求成功,服务器也成功返回响应

    3XX系列:表示需要重定向到其他位置

        301:永久重定向,浏览器会记下来,下次访问会直接发请求到被重定向的新位置

        302:临时重定向,只是这一次的请求被重定向了,下次还是会将请求,发送到旧的位置上

        304:缓存重定向,表示缓存的内容没被改变,浏览器可以直接使用缓存

    4XX系列:表示客户端错误

        401:表示未授权,需要做用户验证

        403:表示用户被禁止访问

        404:表示用户请求的资源找不到

    5XX系列:表示服务器错误

        500:服务器处理请求过程中发生了错误

        503:服务器暂时无法使用,可能是因为停机维护或者服务器超载


四、http报文



请求头部,编码后的格式:

GET / HTTP/1.1\r\nHost: localhost:3000\r\nConnection: keep-alive\r\nCache-Control: max-age=0\r\nUpgrade-Insecure-Requests: 1\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36\r\nAccept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8\r\nAccept-Encoding: gzip, deflate, sdch, br\r\nAccept-Language: zh-CN,zh;q=0.8\r\n\r\n

解码后的样子

request请求头部


GET / HTTP/1.1      使用get方法请求http服务器  路径是/    HTTP版本是1.1 (必要条件)

Host: localhost:3000      请求的主机地址和端口是 localhost:3000 (必要条件)

Connection: keep-alive      是否需要tcp的持久连接,keep-alive为持久连接 ,close为非持久连接 

Cache-Control: max-age=0     当前没有缓存内容

Upgrade-Insecure-Requests: 1     告诉服务器可支持使用https不使用http的说明

User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36    当前浏览器使用版本,以及浏览器运行的环境

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8    声明当前浏览器接收的MIME(多用户网络邮件扩展协议,其中包含各种超文本协议、多媒体协议等)类型

Accept-Encoding: gzip, deflate, sdch, br    声明当前浏览器可以支持的解码(解压缩)方式

Accept-Language: zh-CN,zh;q=0.8:     声明流量器所使用的语言,中文-简体中文,希望服务器返回中文的优先级是0.8

 (分隔body的\r\n是必要条件,无论有否body 都需要带有才能识别请求)


response响应头部


HTTP/1.1 200 OK    响应头部最开始必须是声明协议版本HTTP/1.1 返回状态码  状态描述字符串(必要条件)

Date: Sat, 03 Mar 2018 05:09:34 GMT    返回后端在响应时的GMT的时间

Content-Type: text/html    返回body的MIME类型(必要条件,如果不返回,浏览器只能靠猜)

Content-Length: 14615    返回body的字节长度(必要条件)

Last-Modified: Sun, 11 Feb 2018 04:46:00 GMT    返回文件的最后修改的GMT时间,做缓存使用

Connection: Keep-Alive    是否需要tcp的持久连接,keep-alive为持久连接 ,close为非持久连接

Set-Cookie: BAIDUID=78D8AD1F7CE86739B74B83D25E4D0BDC:    返告诉客户端,当前用户在该域名的cookie值(持续对话使用的)

Server: BWS/1.1    服务器名字

Cache-control: no-cache    该页面不需要缓存

Accept-Ranges: bytes    服务器支持Range请求,该请求支持的单位是字节

 (分隔body的\r\n是必要条件,无论有否body 都需要带有才能识别请求)

<html>.....<\html>

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

推荐阅读更多精彩内容