TCP/IP协议族分为以下5层。
应用层:预存了各类通用的应用服务。比如:FTP(文件传输协议)、DNS(域名系统)、HTTP(超文本传输协议)。
传输层:TCP(传输控制协议)、UDP(用户数据报协议)。
网络层:用来处理在网络上流动的数据包。数据包是网络传输的最小数据单位。含IP网际协议。
数据链路层:链路接口。
物理层:网络硬件。
URI 统一资源标识符。 URI有两种形式,URL和URN
URL 统一资源定位符。包含三部分,协议类型、服务器地址、资源的路径
URN 统一资源名。通过唯一名称找到资源,不管是在哪个服务器上。
三次握手:
1、发送端首先发送一个带SYN标志的数据包给对方:数据包发给你了。
2、接收端收到后,回传一个带有SYN/ACK标志的数据包:我收到你发给我的数据包了。
3、最后,发送端再传回一个带ACK标志的数据包:明白。
客户端:
HTTP协议:生成针对目标服务器的HTTP请求报文。
TCP协议:将HTTP请求报文分割成报文段。
IP协议:搜索对方的地址,一边中转一边传送。
服务器:
TCP:将接收到的报文段重组成报文。
HTTP:对请求内容进行处理。
Web的结构组件
代理
缓存
网关(转换成其他协议)
隧道(进行盲转发的特殊代理)
Agent代理(代表用户发出HTTP请求的客户端程序,如Web浏览器。其他的,如网络蜘蛛,Web机器人)
报文 分为请求报文和响应报文。
报文分为三部分:
起始行
首部(以空行结束)
主体
首部分类
通用首部
请求首部
响应首部
实体首部(描述主体的长度和内容,或者资源自身)
扩展首部(规范中没有定义的新首部)
方法
GET
POST
PUT
DELETE
HEAD(服务器在响应中只返回首部,不会返回实体的主体部分)
OPTIONS(询问服务器或特定资源支持哪些方法)
TRACE(允许客户端在最终请求发给服务器时,看看它变成什么样子了)
常见的状态码
100:说明收到了请求的初始部分,请客户端继续。
101:说明服务器正在根据客户端的指定,将协议切换成Update首部所列的协议。
200:请求成功。
204:no content,没有实体的主体部分可以返回。
206:范围请求。
301:永久重定向,新的URL位于响应报文的Location首部。
302:临时重定向。
303:临时重定向。
304:not modified,资源未被修改,可以使用缓存。
307:临时重定向。
400:发送了错误的请求。
401:未授权。
402:还未使用,保留以作未来之用。
403:拒绝请求,但不想说明拒绝原因。
404:无法找到所请求的URL。
405:method not allowed,请求中带有所请求的URL不支持的方法。
406:not acceptable,实体类型不是可接受的。
500:请求发生错误。
503:服务器暂时不可用。
首部字段
通用首部字段:
Cache-Control
Connection
请求首部字段:
Host
Referer
User-Agent
Origin
Accept
Accept-Charset
Accept-Encoding
Accept-Language
Authorization
Cookie
响应首部:
Set-Cookie
实体首部:
Allow
Location
Content-Type
Content-Length
ETag
Expires
Last-Modified
HTTP事务的时延
除非客户端或服务端超载,或正在处理复杂的动态资源,否则HTTP时延就是由TCP网络时延构成的。
这些TCP网络时延的大小取决于硬件速度、网络或服务器的负载,请求和响应报文的尺寸,以及客户端与服务器之间的距离。
https
就是http + ssl,ssl(安全套接字层),有加密、认证、完整性保护的作用。
缓存
强缓存:如果缓存没有过期,则直接使用缓存,不发送HTTP请求。
有两种:
http 1.0
Expires讲的是到期时间,但如果修改了本地时间,就有问题了。
http 1.1
Cache-Control讲的是有效时长。
总的来说,强缓存有个问题,如果资源已经发生改变,你还直接使用缓存?
协商缓存:发送HTTP请求并携带缓存标识,服务器根据缓存标识判断,如果资源没有发生改变,则返回304,告知浏览器使用缓存;如果资源发生改变了,则返回新的数据和新的缓存标识,返回200。
http 1.0
Last-Modified和If-Modified-Since讲的是最后修改时间,有个问题,就是本地打开缓存也会修改这个时间。
http 1.1
Etag和If-No-Match将的是当前资源文件的一个唯一标识。