共计 1901 个字符,预计需要花费 5 分钟才能阅读完成。
WEB 访问的过程
1. 客户端用户在浏览器输入 url,形如 http://www.baidu.com
2. 客户端操作系统做 dns 解析,获得目标服务器的 ip 地址
3. 客户端操作系统打开一个自由端口,向服务器发起连接请求
4. 经过 3 次握手,服务端确认与该客户端的连接,也开发一个自由端口
5. 客户端开始发送请求数据,以 4KB 为一个请求数据包,发送 http request 请求
6. 服务器开始接受请求数据包,接收完成后处理数据,request handling
7. 服务器开始向客户端发送响应数据,4KB,发送 http response
8. 响应结束后,服务器会经过 4 次握手断开连接,关闭各自的自由端口
服务器向客户端发送响应数据会,连接还在吗?HTTP1.0 版,连接不在,已经断开,下次发送数据时,需要再次进行握手连接 HTTP1.1 Connection:Keep-Alive 请求响应后,不会立即断开,会有一小段时间的保活状态,如果这段时间内没有请求了,即断开连接。
1.1 相较与 1.0 有哪些好处?
持久连接
虚拟主机
代理连接
HTTP 协议是什么?
Hyper Text Transfer Protocol:超文本传输协议是 TCP/IP 协议族(栈)中“应用层”的一个协议,用于在服务端和客户端传递超文本内容。MIME:multipurpose Internet Mail Extension(多用途的互联网邮件扩展)
URL 的组成
URI:Unified Resource Identifier 统一资源识别,包含 URL 和 URN
URL:Unified Resource Locator 统一资源定位,即常见的浏览器地址
URN:Unified Resource Naming 统一资源命名,mailto:admin@163.com
URL 的完整格式
<scheme>://<user>:<pwd>@<host>:<port>;<params>?<query>#<frag>
scheme:方案,指定以哪种协议从服务器获取指定资源,方案名不区分大小写,常见 HTTP HTTPS FTP MAILTO RTSP FILE NEWS TELNET 等
user:用户名,某些方案访问资源时需要指定用户名,默认值是 anonymouse
pwd:密码,默认值为 e-mail 地址,例:ftp://admin:123456@172.168.1.16/adm/secret.xls
host:资源所在服务器的 ip 地址或域名,如是域名需要 dns 解析成 ip
params:参数,某些方案会使用参数来指定输入参数,每个参数都用名值对的形式,一个 url 可以有多个参数,用;分开,例:https://www.ccb.com/login.jsp;jsessionid=gy65edfgt6
query:查询参数,以? 开始 & 分隔,可以多个
frag:网页中的位置,对应元素的 id
注:js 中的 encodeURI 不会对“; / ? : @ & = + $ , # ‘”进行编码,而 encodeURIComponent 会
HTTP 通信
请求响应原理
1.message:消息 / 报文,在 http 客户端与服务器之间传递的数据块 2.http 协议规定,消息必须符合特定的格式才能被彼此理解,分两种:
request message:客户端向服务器发送的请求消息
response message:服务器返回给客户端的消息
3.message 消息的结构
StartLine:起始行,必须,基本的描述信息
Header:消息头部 / 报文。可选
Body:消息正文 / 主体。可选
起始行和消息头是纯 ASCII 字符,每行以 CRLF(回车换行)结束
消息主体是一个可选的数据块,可以为空或者是字符数据或者二进制数据
4. 详细描述
起始行格式:请求方法空格请求 URL 空格所用协议 / 版本 CRLF
请求方法
含义
是否有请求体
GET
从服务器获取资源
否
POST
向服务器发送资源
是
PUT
让服务器保存资源
是
DELETE
让服务器删除资源
否
HEAD
获取资源的响应头信息
否
OPTIONS
询问服务器可以提交哪些请求方法
否
TRACE
追踪传输路径
否
消息头部:描述请求本身、客户端、请求主体的特征,可分 4 种
通用头部:请求消息响应消息都可用。Connection Date Cache-Control Pragma
请求专用头部:只在请求消息中 Host Referer User-Agent Client-IP Accept If-Modified-Since Cookie
实体头部:描述消息主体特征 Location Content-Length Expires Last-Modified Content-Type
扩展头部:自定义
请求主体:文件传输 multipart/form-data