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
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。