FE.BASE-HTTP基本梳理

媒介

本文梳理本人浏览《HTTP威望指南》碰到的相干题目与相干解答。如有毛病请斧正。

OSI参考模子

运用层,示意层,会话层,传输层,收集层,数据链路层,物理层

URL

<计划>://<用户>:<暗码>@<主机>:<端口>/<途径>;<参数>?<查询>#<片断>

假如<标签>内有保留受限字符(比方暗码有@),这些可经由过程encodeURIComponent转义。
DNS剖析历程详解
为何域名根服务器只能有13台呢?Avery Lu

状况码

HTTP状况码

重定向302、303、307的辨别

【1】HTTP1.0(RFC1945)和HTTP1.1(RFC2616)对302的定义雷同:假如客户端发出POST要求后,收到服务端的302状况码,那末不能自动的向新的URI发送反复要求,必需跟用户确认是不是该重发,因为第二次POST时,环境能够已发作变化(POST要领不是幂等的),POST操纵会不符合用户预期。

【2】303和307是HTTP1.1新加的,是对原302状况码的细化。HTTP1.1划定303处置惩罚应是:POST重定向为GET,307处置惩罚应该是:POST重定向为POST(不一定是POST,非GET、HEAD要求即可)303和307的存在,归根结柢是因为POST要领的非幂等属性引发的。

【3】然则浏览器完成HTTP1.0的302二次要求POST时未讯问用户的情况下就变成GET(相当于303)

参考资料 HTTP状况码302、303和307的故事

HTTP报文

HTTP报文构成(部份):

- 起始行
 - 要求起始行:要领 URL HTTP版本
 - 相应起始行:HTTP版本 状况码 缘由短语
- 首部
 - 通用首部: Date:Tue, 3 Oct 1974 02:16:00 GMT
   通用缓存首部:  Cache-Control
 - 要求首部: Accept:*/*
            From
            Host
            Referer
            User-Agent
   条件要求首部: If-Modified-Since
                If-Match
   平安要求首部: Cookie
               Authorization
            ...
 - 相应首部: Server:cloudflare-nginx
 - 实体首部: Content-Type:text/html;charset-iso-latin-1
    内容首部: Content-Length
    实体缓存首部:ETag
                Expires:Fri, 01 Mar 2019 13:37:39 GMT
                Cache-Control:max-age=600
                Last-Modified:在服务器末了被修正的时候
 - 扩大首部
- 主体

HTTP报文浅析
HTTP 实体和编码

ETag、Expires、Last-Modified剖析

依据是不是须要向服务器从新提议HTTP要求将缓存历程分为两个部份,离别是强迫缓存协商缓存

强迫缓存

有3种:
1.不存在该缓存效果和缓存标识,强迫缓存失效,则直接向服务器提议要求
2.存在该缓存效果和缓存标识,但该效果已失效,强迫缓存失效,则运用协商缓存
3.存在该缓存效果和缓存标识,且该效果还没有失效,强迫缓存见效,直接返回该效果

掌握强迫缓存的字段离别是Expires和Cache-Control。到了HTTP/1.1,Expire已被Cache-Control替换,缘由在于Expires掌握缓存的道理是运用客户端的时候与服务端返回的时候做对照,那末假如客户端与服务端的时候因为某些缘由(比方时区差别;客户端和服务端有一方的时候不正确)发作偏差。所以同时存在时,只要Cache-Control见效

浏览器的缓存寄存在哪:
内存缓存(from memory cache):js和图片等
硬盘缓存(from disk cache):css文件

协商缓存

有2种:
1.协商缓存见效,返回304
2.协商缓存失效,返回200和要求效果
掌握协商缓存的字段离别有:
Last-Modified / If-Modified-Since
服务端返回last-modified即末了修正时候,客户端下次发送if-modified-since(时候)后服务器比对。
Etag / If-None-Match
服务端返回Etag即唯一标识,客户段下次发送If-None-Match(标识)后服务器比对。

个中Etag / If-None-Match的优先级比Last-Modified / If-Modified-Since高。

缓存优先级递减序次

no-store;(制止保留暂时文件,庇护秘要信息)
no-cache;(1.0的键名是Pragma,1.1是Cache-Control;在开释缓存之前,强迫高速缓存将要求原始服务器考证。)
must-revalidate;(缓存必需在运用之前考证旧资本的状况,而且不可运用逾期资本。)
max-age;(相对秒)
expries;(相对日期时候)
参考:Cache-Control-MDN

承载TCP段的IP分组

TCP收到HTTP报文数据流后分段成IP分组,IP分组包含:
IP分组首部(20B)+TCP段首部(20B)+TCP数据块(0+B)
《FE.BASE-HTTP基本梳理》

Nagle和TCP_NODELAY

Nagle算法勉励发送最大传输单位(MTU:1500B),但确认分组耽误确认要等100-200ms。(为何MTU值广泛都是1500?)
TCP_NODELAY要领即可禁用Nagle(nodejs默许开启)

socket.setNoDelay([noDelay])
request.setNoDelay([noDelay])

MSL和TIME_WAIT

MSL(最大分段生计期)指明TCP报文在Internet上最长生计时候,每一个详细的TCP完成都必需挑选一个肯定的MSL值。RFC1122发起是2分钟。凌驾该数值会有TIME_WAIT积累与端口耗尽题目。

耐久链接&管道化链接

HTTP/1.0+"Connection:keep-alive"节省了翻开链接和封闭链接的开支。
HTTP/1.1耐久链接默许激活(条件:主体部份长度与Content-Length一致或分块传输编码),除非客户端发送报文有Connection:close。
HTTP/1.1许可在耐久链接上运用要求管道,在相应抵达之前可将多条要求放入行列,下降收集环回时候。(客户端不应在管道上发送POST如许非幂等要求,因为失足没法平安重试)

网关&隧道&中继

协定网关担任将一个协定转成另一个协定,罕见的有HTTP/FTP、HTTP/HTTPS、HTTPS/HTTP。

资本网关担任HTTP要求与服务端运用转换,最盛行的协定是CGI(输入要求,转交,相应),为防备每条CGI要求新开历程,涌现了FastCGI作为耐久保卫历程。

隧道担任让HTTP运用接见非HTTP协定的顺序。经由过程CONNECT要领要求隧道网关竖立一条抵达恣意目标服务器端口的TCP链接,并对客户端和服务器之间的后续中继数据举行盲转发。

中继担任处置惩罚HTTP中竖立衔接的部份,然后对字节举行盲转发。

web爬虫

谢绝爬虫要领1:域名更目录放robots.txt,爬虫会依据它做挑选。

# this robots.txt allows Slurp & Webcrawler to crawl

User-Agent: slurp
User-Agent: webcrawler
Disallow: /private
Allow: /public

User-Agent: *
Disallow:

谢绝爬虫要领2:robot-control标签
index|follow|noarchive|all|none

<meta name="robots" content="noindex">

SSL和HTTPS

对称秘钥加密即编解码运用雷同秘钥,如DES,3-DES,RC2,RC-4。瑕玷是发送者和吸收者对话前要存有该秘钥。

公然秘钥加密运用非对称秘钥:客户端持公然秘钥,服务端持私有秘钥。防备了上述对称秘钥的瑕玷。如RSA。

对报文运用非对称秘钥数字署名,能够证实作者和防备改动。

数字证书构造:版本号,序列号,署名算法,颁布者,有效期,对象称号,公然秘钥,其他扩大信息,数字署名。

OpenSSL是SSL和TLS协定以及一个全功能通用加密库的开源完成。

SSL握手须要做的事情:
交流协定版本号;挑选一个两头都相识的暗码;对两头的身份举行认证;天生暂时会话秘钥,以便加密信道。

SSL握手历程:
1.客户端发送可挑选的暗码并要求证书
2.服务器发送选中的暗码和证书
3.客户端发送保密信息,客户端和服务器天生秘钥。
4.客户端和服务器相互示知,最先加密历程。

HTTP2.0和HTTP1.X比拟的新特征

HTTP/1 瑕玷总结

二进制:HTTP1.x的剖析是基于文本。文本的表现形式有多样性,而二进制完成轻易且硬朗。

多路复用:即衔接同享,即每一个request都是是用作衔接同享机制的。一个request对应一个id,如许一个衔接上能够有多个request,每一个衔接的request能够随机的混淆在一起,吸收方能够依据request的 id将request再归属到各自差别的服务端要求内里。

header紧缩:HTTP2.0运用encoder来削减须要传输的header大小,通信两边各自cache一份header fields表,既防备了反复header的传输,又减小了须要传输的大小。

服务端推送:比方客户端收到sytle.css数据的同时,服务端会将sytle.js的文件推送给客户端,当客户端再次尝试猎取sytle.js时就能够直接从缓存中猎取到。

浏览器输入 URL 后发作了什么?
HTTPS加密协定详解(四):TLS/SSL握手历程

    原文作者:seasonley
    原文地址: https://segmentfault.com/a/1190000018366212
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞