HTTP
什么是HTTP协议
协议是指计算机通信网络中两台计算机之间进行通信所必须共同遵守的规定或规则,超文本传输协议(HTTP)是一种通信协议,它允许将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器
出现的历史来由
对于web在网络中的传输有三个问题:
- 客户端如何知道所求数据地址---URI
- 客户端知道地址后如何获取内容---HTTP
- 所求内容以什么形式被客户端识别---HTML
HTTP请求
组成部分
- 请求行
- HTTP头
- 内容
1.请求行
GET www.cnblogs.com HTTP/1.1
三部分组成:
- 请求方法(常用的有get,post)
- 网址
- HTTP版本
2.HTTP头
三种
- 请求头(request header)
- 普通头(general header)
- 实体头(entity header) 通常来说,由于Get请求往往不包含内容实体,因此也不会有实体头。
3.内容
第三部分内容只在POST请求中存在,因为GET请求并不包含任何实体。
HTTP响应
组成部分
- 状态行
- HTTP头
- 返回内容
1.状态行
HTTP/1.1 200 OK(HTTP状态,状态码)
状态码分类
- 信息类(100-199)
- 响应成功(200-299)
- 重定向(300-399)
- 客户端错误(400-499)
- 服务端错误(500-599)
返回内容
HTTP响应的内容不仅仅是HTML,还可以是其它类型,那么浏览器如何正确对接收到的信息进行处理?这是通过媒体类型确定的(Media Type),具体来说对应Content-Type这个HTTP头。媒体类型的格式为:大类/小类。有8种:
-
application— (比如: application/vnd.ms-excel.)
-
audio (比如: audio/mpeg.)
-
image (比如: image/png.)
-
message (比如,:message/http.)
-
model(比如:model/vrml.)
-
multipart (比如:multipart/form-data.)
-
text(比如:text/html.)
-
video(比如:video/quicktime.)
HTTP头
四大类
1.请求头(HTTP Request Header)
请求头是那些由客户端发往服务端以便帮助服务端更好的满足客户端请求的头。请求头只能出现在HTTP请求中。
- Accept:: 浏览器端可以接受的媒体类型
- Cookies
- User-Agent:告诉HTTP服务器, 客户端使用的操作系统和浏览器的名称和版本.
- Range
- If-Match-Since:把浏览器端缓存页面的最后修改时间发送到服务器去,服务器会把这个时间与服务器上实际文件的最后修改时间进行对比。如果时间一致,那么返回304,客户端就直接使用本地缓存文件。如果时间不一致,就会返回200和新的文件内容。客户端接到之后,会丢弃旧文件,把新文件缓存起来,并显示在浏览器中.
2.响应头(HTTP Response Header)
HTTP响应头是那些描述HTTP响应本身的头,这里面并不包含描述HTTP响应中第三部分也就是HTTP信息的头(这部分由实体头负责)
- Refresh定时刷新
- Set-Cookie:用于把cookie发送到客户端浏览器,每一个写入cookie都会生成一个Set-Cookie.
3.实体头(Entity header)
与内容相关,因此通过HTTP GET方法的请求中没有,POST方法和HTTP响应都有。
- Content-type
- Content-length
- Content-language
- Conent-Encoding
- Content-MD5
- Expires:浏览器会在指定过期时间内使用本地缓存;Last-Modifies 用于指示资源的最后修改日期和时间。
4.通用头(General header)
可以在请求/响应中,描述的是HTTP本身
- connection:HTTP是否持久连接如: 1.Connection: keep-alive 当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的连接
- 2.Connection: close 代表一个Request完成后,客户端和服务器之间用于传输HTTP数据的TCP连接会关闭, 当客户端再次发送Request,需要重新建立TCP连接。
- Date:HTTP发送的日期
- Keep-Alive:HTTP所在的TCP连接时间
- Cache-Control:是否缓存
HTTP特点
1.http协议是无状态的
同一个客户端的这次请求和上次请求是没有对应关系,对http服务器来说,它并不知道这两个请求来自同一个客户端。 为了解决这个问题, Web程序引入了Cookie机制来维护状态.
2.打开一个网页需要浏览器发送很多次Request
服务器把返回数据给浏览器,浏览器解释数据发现有很多引用如CSS,JS。那么又会继续发送请求,直到下载完所有数据
3.HTTP是基于TCP的
HTTP是基于传输层的TCP协议。所以HTTP在开始传输之前,首先需要建立TCP连接,而TCP连接的过程需要所谓的“三次握手”.TCP三次握手之后,建立了TCP连接,此时HTTP就可以进行传输了。一个重要的概念是面向连接,既HTTP在传输完成之间并不断开TCP连接。