简介
超文本传输协议(英文:HyperText Transfer Protocol,缩写:HTTP)
是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP是万维网的数据通信的基础
概述
HTTP是一个客户端用户和网站请求和应答的标准(TCP)。通过使用网页浏览器、网络爬虫或者其它的工具,客户端发起一个HTTP请求到服务器上指定端口(默认端口为80)。应答的服务器上存储着一些资源,比如HTML文件和图像。
步骤
以下是 HTTP 请求/响应的步骤:
-
客户端连接到Web服务器
一个HTTP客户端,通常是浏览器,与Web服务器的HTTP端口(默认为80)建立一个TCP套接字连接。先建立TCP连接 -
发送HTTP请求
通过TCP套接字,客户端向Web服务器发送一个文本的请求报文
一个请求报文由请求行、请求头部、空行和请求数据4部分组成。 -
服务器接受请求并返回HTTP响应
Web服务器解析请求,定位请求资源。服务器将资源复本写到TCP套接字,由客户端读取。
一个响应由状态行、响应头部、空行和响应数据4部分组成。 -
释放连接TCP连接
若connection 模式为close,则服务器主动关闭TCP连接,客户端被动关闭连接,释放TCP连接;若connection 模式为keepalive(2,3S左右),则该连接会保持一段时间,在该时间内可以继续接收请求; -
客户端浏览器解析HTML内容
客户端浏览器首先解析状态行,查看表明请求是否成功的状态代码。
然后解析每一个响应头,响应头告知以下为若干字节的HTML文档和文档的字符集。
客户端浏览器读取响应数据HTML,根据HTML的语法对其进行格式化,并在浏览器窗口中显示。
在浏览器地址栏键入URL,按下回车之后会经历以下流程
- 浏览器向 DNS 服务器请求解析该 URL 中的域名所对应的 IP 地址;域名解析
- 解析出 IP 地址后,根据该 IP 地址和默认端口 80,和服务器建立TCP连接;TCP连接
- 浏览器发出读取文件(URL 中域名后面部分对应的文件)的HTTP 请求,该请求报文作为 TCP 三次握手的第三个报文的数据发送给服务器;发起HTTP请求
- 服务器对浏览器请求作出响应,并把对应的 html 文本发送给浏览器;HTTP响应
- 释放 TCP连接;
- 浏览器将该 html 文本并显示内容;
HTTP请求的特点
无状态保存
HTTP协议 自身不对请求和响应之间的通信状态进行保存。也就是说在HTTP这个级别,协议对于发送过的请求或响应都不做持久化处理。
无连接
无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
补充:http1.1之后设置为keep alive不再立刻断开tcp连接
cookie
产生原因:http无状态保存的特性
作用:下次客户端访问时会携带cookie进行访问,服务器会知道和上次访问的是同一个服务器
session
产生原因:http无状态保存的特性
保存用户登陆之后的状态,操作,退出登录会消除session
作用:记忆用户的登陆状态
HTTP请求方法
GET:地址栏显示路径,在请求行里
POST:地址栏不显示路径,在请求体中
常见状态码
200 OK //客户端请求成功
302 //重定向
400 Bad Request //客户端请求有语法错误,不能被服务器所理解
401 Unauthorized //请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用
403 Forbidden //服务器收到请求,但是拒绝提供服务
404 Not Found //请求资源不存在或者输入了错误的URL
500 Internal Server Error //服务器发生不可预期的错误
503 Server Unavailable //服务器当前不能处理客户端的请求,一段时间后可能恢复正常、
URL
https://zhihu.com:443/s?q=da&qq=gy
- https:协议
- //:层级URL标记符号,固定不变
- zhihu.com:域名,或者是ip
- 443:端口号,https默认是443,http默认是80
- /:目录路径
- 查询:GET模式的窗体参数,以“?”字符为起点,每个参数以“&”隔开,再以“=”分开参数名称与数据,通常以UTF8的URL编码,避开字符冲突的问题