HTTP协议简介
超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。
http://www.meteormall.top:80/ 这是一个URL地址,其中:
- http是协议(schema),浏览器默认的就是http协议。
- www.meteormall.top:80是域名,80是http协议默认端口号,可以省略。
- / 资源路径,表示是服务器端根路径下的资源。
HTTP协议是请求响应式协议,一次请求跟一次响应构成了一次HTTP事务。
HTTP协议是无状态的,任何两次请求之间都没有依赖关系。
协议分层
要在网络上传输,必须依赖网络的基础设施。在计算机网络中,对协议进行了分层,不同的协议完成不同的功能:
- 应用层(HTTP协议)
- 传输层(TCP协议)
- TCP是保证通讯数据有序可靠的协议
- 端口号:默认的Http协议的端口号是80
- 网络层,为了完成网络定位
- IP:92.184.216.34
- 域名:baidu.com
- DNS服务器(域名解析服务器)完成域名到ip的解析
- 数据链路层和物理层
如果ip地址是一个大商场,那么端口号可以比作是商场内某个商店的门牌号。
7.浏览器渲染并展示HTML
HTTP请求报文
HTTP请求报文包括:请求行、请求头和请求体。
请求行
GET / HTTP/1.1
- GET是请求方法。常见的请求方法:GET,POST ,PUT
- / 是资源路径
- HTTP/1.1 是协议版本号
- HTTP 0.9/1.0,现在都不用了
- HTTP 2
- \r\n表示一行的结束。
请求头
- key:value 形式
- Host:www.example.com
- host头,表示请求的域名或主机名是什么
- Connection:keep-alive
- connection头,是HTTP/1.1增加的,keep-alive的目的是请求结束后不断掉请求 ,用这个连接继续发多个请求。即,一个连接可以发多个请求
- User-Agent:Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36
- 表示发起请求的应用程序是什么,浏览器也是个应用程序,而发起HTTP请求的时候,并不一定是浏览器,任何应用程序都可以发送HTTP请求,只要按照同样的格式发起就行了。请求发出者,据此可以做一些兼容性以及定制化需求。服务器可以根据发起请求的浏览器类型(手机还是PC等),返回不同的定制化的需求。如手机的屏幕比较小,返回的版本和PC的版本可能是不一样的。
- 更多请求头,可以参阅相关RFC文档
请求报文格式总结
- 请求行
- 请求方法
- 资源路径
- 协议版本号
- 请求头
- Host
- Connection
- User-Agent
- 请求体
HTTP响应报文
HTTP响应报文包括:状态行、响应头和响应体。
状态行
Http /1.1 200 Ok
- HTTP/1.1是协议版本
- 200是状态码
- OK 原因
- \r\n表示一行的结束。
常见的状态码
- 200 OK(以2开头的都是成功的)
- 304 Not Modified(与重定向和缓存相关的)
- 404 Not Found(请求出错了,服务端找不到这个资源) 也可能被服务器藏起来了
- 500 Internal Server Error(服务器端在请求时出错了 服务器端内部错误) 一般开发是写代码有错误时这个错误
响应头
- 格式:key:valeu \r\n 键值对的格式
- Server:Web服务器
- content-Type:内容类型,HTML,音频,视频,图片..
- content-length:内容长度。为了在一条连接上发多个请求 找到每个请求的边界
响应体
- 分隔符:空行 \r\n
- 响应头和响应体之间通过同行隔开
- 响应体可以是文本或二进制
- 一般情况下,响应体大小由响应头中Content-Length头指定
响应报文格式总结
- 状态行
- 协议版本
- 状态码
- 原因短语
- 响应头
- Content-Type
- Content-Length
- Server
- 响应体
- 可以是二进制或文本,与响应头通过空行分割
- 长度一般由Content-Length头指定
chrome 下按F12->Network可以查看HTTP请求响应的信息。