HTTP(HyperText Transfer Protocol)超文本协议传输协议,是互联网上应用最为广泛的一种网络协议,所有WWW文件都必须遵守这个标准,设计HTTP是为了提供一种发布和接收HTML页面的方法
HTTP是一个客户端与服务器端请求和应答的标准(TCP),就是客户端按一定规则向服务器发送数据,而服务器也按一定规则回应数据,客户端是终端用户,服务器端是网站,通过使用Web浏览器、网络爬虫或其他工具,客户端发起一个到服务器上指定端口(默认端口为80)的HTTP请求
HTTP协议是一种无状态的,以请求/响应方式运行的协议,它使用可扩展的语义和自描述消息格式,与基于网络的超文本信息系统灵活的互动
HTTP协议是一种应用层协议
特点:
在Web应用中,服务器把网页传给浏览器,实际就是把网页的HTML代码发送给浏览器,浏览器解析后显示出来,浏览器和服务器之间的传输应用层协议就是HTTP
Elements:查看或修改HTML元素的属性、CSS属性、监听事件、断点等
Console:控制台一般用于执行一次性代码,查看JavaScript对象,查看调试日志或异常信息
Sources:查看和调试页面HTML文件源码、JavsScript源码、CSS源码,给JS代码添加断点等
Network:查看header等与网络连接相关的信息
Network中的每一项就是一次请求/响应过程,点击项可以查看本次请求/响应的报文信息
浏览器 | ← TCP连接 → | 服务器 |
---|---|---|
发送请求 → | ||
← 做出响应 | ||
← 断开TCP连接 → |
HTTP协议分为两部分:请求协议、响应协议,接收请求的一端一定要响应对方
不管是请求还是响应,HTTP协议都是由一个一个简单的协议项组成,报文中每个协议项都单独占用一行
协议名:协议内容(值)
HTTP协议的请求报文和响应报文的结构基本相同,由三大部分组成:
请求报文中传递参数的方式:URL(GET),request Body(POST)
请求行:分为三个部分
METHOD | 空格 | URL | 空格 | VERSION | 换行 |
---|
请求行单独占一行;请求路径不包含域名
请求头:请求头是所有当前需要用到的协议项的集合
协议项就是浏览器在请求服务器的时候事先告诉服务器的一些信息,即事先约定
常见的请求头有:
host:当前URL中要请求的服务器主机名(域名)
accept-encoding:声明浏览器支持的压缩编码类型,如gzip
accept_charset:浏览器支持的字符集
referer:表示此次请求来自哪个网址
accept-language:可接收的语言类型,有权重之分
cookie:如果当前请求的服务器在浏览器中设置了cookie,当浏览器再次请求该服务器时会传递此数据
user-agent:用户代理,当前发起请求的浏览器内核信息
accept:浏览器可接收的数据类型,如txt/html,image/img
content-length(POST):当前要提交数据的长度(字节)
if-modified-since(GET):请求某个资源文件时,询问此资源文件是否被修改过
空行:分隔请求头和请求主体
请求主体:浏览器发送给服务端的数据
参数格式:?参数1=值1&参数2=值2&参数3=值3&......
二进制数据,如图片
GET是从服务器上获取数据,POST是向服务器传送数据
GET把参数加到URL中,POST把数据加到表单中
GET传送的数据量较小,不能大于2KB,POST传送的数据量大
GET安全性较低,POST更安全,但GET执行效率更好
做数据查询时使用GET方式,做数据添加、修改、删除或数据包含机密信息时使用POST方式
响应行:分为三个部分
VERSION | 空格 | STATUS CODE | 空格 | REASON | 换行 |
---|
协议版本:表示报文使用的 HTTP 协议版本
状态码:三位数,用代码表示处理的结果
状态描述:作为数字状态码的补充,是更详细的解释文字
响应头:需要用到的协议项的集合
常见的响应头有:
server:服务器主机信息
date:响应时间
last-modified:文件最后修改时间
content-length:响应主体的长度(字节)
content-type:响应内容的数据类型,如text/html,image/png
location:重定向,解析到此项时立即跳转,不会再解析后面的内容
refresh:重定向(刷新),解析到此项时准备跳转,刷新一般有时间限制,到时间才跳转
content-encoding:文件编码格式
cache-control:缓存控制,no-cached:不要缓存
空行:分隔响应头和响应主体
响应主体:服务器返回给浏览器的数据
头字段 key:value 的形式,最后用CRLF换行表示字段结束。如前后端分离时经常遇到要协商传输数据的类型,"Content-type:application/json",HTTP头字段非常灵活,不仅可以使用标准里的 Host、Content 等已有头,也可以添加自定义头
头字段注意事项:
用户在浏览器输入地址后回车
先到本地DNS查找域名对应的IP地址,如果本地DNS中没有找到,再到DNS服务器查
首先从浏览器缓存中查看,如下可以查看浏览器中域名对应IP的解析
chrome://net-internals/
解析域名对应的IP地址后,浏览器就可以发起与服务器的三次握手
连接建立之后就开始组装HTTP请求报文,并发送报文
服务器收到请求报文之后开始解析报文,生成响应数据,发送响应数据
浏览器收到响应后,开始渲染页面