文章目录
HTTP(超文本传输协议)
超文本传输协议是一种通信协议,允许将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器。
超文本:简单来说就是在文本内容中有链接。
一、HTTP的前世今生
在HTTP0.9的时候只有GET请求,每个请求都是短连接,当时还没有状态码、缓存等东西。
二、透过TCP/IP看HTTP
HTTP协议是构建在TCP/IP协议之上的,省TCP/IP协议的子集。
TCP/IP协议族
TCP/IP协议其实是一系列与互联网相关联的协议集合起来的总称
分层管理是TCP/IP协议的重要的特征。
链路层加首尾信息,其他层加头部信息?
三、三次握手
四、DNS解析
会先从host文件中找域名对应的IP地址,如果没有就请求本地的DNS服务器,如果没有就去去找首选的DNS服务器,一般设置为8.8.8.8等,还是没有就去上层服务器中查找,直到根服务器。
五、HTTP协议特点
支持客户/服务器模式
客户/服务器模式的工作的方式是客户端向服务器发出请求,服务器端响应请求,并进行相应服务。
简单快速
- 客户向服务器请求服务的时候,只需要传送请求方法和路径。
- 请求方法常用的有GET、HEAD、POST等。每种方法规定了客户与服务器联系的类型不同。
- 由于HTTP简单,使得HTTP服务器的程序规模小,因而通信速度很快。
灵活
- HTTP可以传输任意类型的数据对象
- 正在传输的类型由Content-Type(Content-Type是HTTP包中用来表示内容类型的标识)加以标记。
无连接(每次连接只处理一个请求)
- 无连接的含义是限制每次连接只处理一个请求。
- 服务器处理完客户的请求,并收到客户的应答之后,即断开连接。
- 采用这种方式可以节省传输时间。
无状态(如果后续处理需要前面的信息,则它必须重传)
- HTTP协议是无状态协议
- 无状态指的是对于事务处理没有记忆能力,缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能会导致链接传送的数据量大。
- 另外一方面,在服务器不需要先前信息的时候,它的应答就比较快。
六、URI与URL(有协议)
我们输入浏览器里面的WEB地址应该叫URI还是URL?
URI
-
一个紧凑的字符串用来标示抽象或者物理资源
-
A URI可以进一步被分为定位符、名字或者两种都是。
-
术语:Uniform Resource Locator(URL)是URI的子集,除了确定一个资源,还提供了一种定位该资源的主要访问机制(如其网络“位置”)
URL
- URL是URI的一种,但是不是所有的URI都是URL
- URI和URL最大的差别就是“访问机制”即协议
- URN是唯一标识的一部分,是身份信息
你的qq号也是一个URI(腾讯服务器内可以识别就是你的QQ账户),URI就是网络资源的头衔,通过URI标记可以把网络世界里面的每一个事物都加以标记并区分开来。
七、HTTP报文结构分析-请求报文
八、HTTP报文头
HTTP的报文头大体可以分为四类,分别是:
- 通用报文头
可以用在请求报文中,也可以用在响应报文中。 - 请求报文头
- 响应报文头
- 实体报文头
在HTTP/1.1里面一共规范了47种报文头字段。
九、请求报文头部分解释
ACCEPT(指明可接收类型)
作用:浏览器端可以接受的媒体类型。
Accept:text/html 表示浏览器可以接受服务器回发的类型为text/html,也就是常说的html文档,如果服务器无法返回text/html类型的数据,那么服务器应该返回一个406错误(Non Acceptable)
Accept-Encoding(指明编码方式)
作用:浏览器申明自己接收的编码方法,通常指定压缩方法,是否支持压缩,支持什么压缩方法(gzip、deflate)
Accept-Language(指明接收语言)
作用:浏览器申明自己接收的语言
Accept-Language:zh-cn,zh;q=0.7,en-us,en;q=0.3
客户端在服务器有中文版资源的情况下,会返回中文版对应的响应,没有中文版的时候,则请求返回英文版响应。
Host(指明主机和端口号)
作用:请求报文头中主要用于指定被请求资源的Internet主机和端口号,它通常从HTTP URL中提取出来的。
Referer(指明从哪个页面链接过来的)
当浏览器向Web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器借此可以获得一些信息用于处理。
User-Agent(指明操作系统和浏览器名称版本)
作用:告诉HTTP服务器,客户端使用的操作系统和浏览器名称版本
很多情况下我们会通过User-Agent来判断浏览器类型,从而进行不同的兼容设计。
Content-Type(说明报文体内对象媒体类型)
作用:说明报文体内对象媒体类型
application/xhtml+xml:XHTML格式
application/xml:XML数据格式
application/atom+xml:Atom XML聚合格式
application/json:JSON数据格式
application/pdf:pdf格式
application/msword:Word文档格式
application/octet-stream:二进制流数据(如常见的文件下载)
application/x-www-form-urlencoded:表单提交
十、通用报文头部分解释
Connection
- Connection:keep-alive
当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,如果客户端再次访问这个服务器上的页面,会继续使用这一条已经建立的连接。 - Connection:close
代表一个Request完成后,客户端和服务器之间用于传输HTTP数据的TCP连接会关闭,当客户端再次发送Request,需要重新建立TCP连接。
十一、HTTP请求方法解析
HTTP/1.1常用方法:
- GET
- POST
- HEAD
- PUT
- DELETE
- OPTIONS
- TRACE
- CONNECT
GET(没请求体,发送数据在URL中的?后面)
- GET方法用来请求访问已被URI识别的资源
- 指定的资源经过服务器端解析后返回响应内容
http://localhost/login.php?username=aa&password=1234
从上面的URL请求中,很容易就可以辨认出表单提交的内容。
可以通过浏览器记录就查到你的信息。
POST
- POST方法与GET功能类似,一般用来传输实体的主体。
- POST方法的主要目的不是获取响应主体的内容,主要是提交。
PUT(PUT是幂等的,而POST不是幂等的)
- 从客户端向服务器传送的数据取代指定的文档的内容
- PUT方法与POST方法最大的不同是:PUT是幂等的,而POST不是幂等的。
幂等:不管进行多少次重复操作,都得到相同结果。
HEAD(请求报文头)/DELETE
HEAD
- 类似于GET请求,只不过返回的响应中没有具体的内容,用于获取报文头。
DELETE
- 请求服务器删除指定的资源
OPTIONS
用于查询针对请求URI指定的资源支持的方法
TRACE/CONNECT
TRACE
- 回显服务器收到的请求,主要用于测试或者诊断。
CONNECT
- 开启一个客户端与所请求资源之间的双向沟通的通道,它可以用来创建隧道。
十二、状态码
用来表示网页服务器超文本传输协议响应状态的3位数字代码。