浅谈 HTTP 协议
程序员文章站
2022-07-11 17:37:59
一、 HTTP简介 1. 超文本传输协议 Hyper Text Transfer Protocol 2. 是一种用于分布式、协作式和超媒体信息系统的应用层协议 3. HTTP是万维网的数据通信的基础 4. HTTP有很多应用,但最著名的是用于web浏览器和web服务器之间的双工通信 二、 HTTP ......
一、 http简介
- 超文本传输协议 hyper text transfer protocol
- 是一种用于分布式、协作式和超媒体信息系统的应用层协议
- http是万维网的数据通信的基础
- http有很多应用,但最著名的是用于web浏览器和web服务器之间的双工通信
二、 http 请求/响应的步骤
- 客户端连接到web服务器
- 一个http客户端,通常是浏览器,与web服务器的http端口(默认为80)建立一个tcp套接字连接
- 发送http请求
- 通过tcp套接字,客户端向web服务器发送一个文本的请求报文,一个请求报文由请求行、请求头部、空行和请求数据4部分组成
- 服务器接受请求并返回http响应
- web服务器解析请求,定位请求资源,服务器将资源复本写到tcp套接字,由客户端读取,一个响应由状态行、响应头部、空行和响应数据4部分组成
- 释放连接tcp连接
- 若connection 模式为close,则服务器主动关闭tcp连接,客户端被动关闭连接,释放tcp连接;若connection 模式为keepalive,则该连接会保持一段时间,在该时间内可以继续接收请求
- 客户端浏览器解析html内容
- 客户端浏览器首先解析状态行,查看表明请求是否成功的状态代码,然后解析每一个响应头,响应头告知以下为若干字节的html文档和文档的字符集,客户端浏览器读取响应数据html,根据html的语法对其进行格式化,并在浏览器窗口中显示
- 面试题:在浏览器地址栏键入url,按下回车之后会经历的流程:
- 浏览器向dns服务器请求解析该url中的域名所对应的ip地址
- 解析出ip地址后,根据该ip地址和默认端口80,和服务器建立tcp连接
- 浏览器发出读取文件(url 中域名后面部分对应的文件)的http请求,该请求报文作为tcp三次握手的第三个报文的数据发送给服务器
- 服务器对浏览器请求作出响应,并把对应的html文本发送给浏览器
- 释放tcp连接
- 浏览器将该html文本并显示内容
三、 http请求方法
- get:获取一个页面、图片(资源)
- post:提交数据
- head
- put
- delete
- trace
- options
- connect
四、 http状态码
- 状态代码的第一个数字代表当前响应的类型:
- 1xx消息——请求已被服务器接收,继续处理
- 2xx成功——请求已成功被服务器接收、理解、并接受
- 3xx重定向——需要后续操作才能完成这一请求
- 4xx请求错误——请求含有词法错误或者无法被执行
- 5xx服务器错误——服务器在处理某个正确请求时发生错误
- 常见的:"200 ok","404 not found"
五、 url:统一资源定位符
- url包含的信息:
- 传送协议
- 层级url标记符号(为 // ,固定不变)
- 访问资源需要的凭证信息(可省略)
- 服务器(通常为域名,有时为ip地址)
- 端口号(以数字方式表示,可省略,http的默认值为80,https的默认值为443)
- 路径(以 / 字符区别路径中的每一个目录名称)
- 查询(get模式的窗体参数,以 ? 字符为起点,每个参数以 & 隔开,再以 = 分开参数名称与数据,通常以utf8的url编码,避开字符冲突的问题)
- 片段(以“#”字符为起点)
- 示例:
http://www.luffycity.com:80/news/index.html?id=250&page=1
- http,是传送协议
-
www.luffycity.com
,是服务器 - 80,是服务器上的网络端口号
- /news/index.html,是路径
- ?id=250&page=1,是查询
六、 http请求格式
-
请求(request)
- 浏览器:服务器
- get 请求没有请求数据
- 浏览器:服务器
-
格式:
请求方式 url路径 协议版本\r\n k1:v1\r\n k2:v2\r\n \r\n 数据
七、 http响应格式
-
响应(response)
- 服务器:浏览器
-
格式:
协议版本 状态码 状态码描述\r\n k1:v1\r\n k2:v2\r\n \r\n 响应数据(响应体)