协议版本:Http/1.0 Http/1.1
http1.0协议中,客户端与服务器建立连接后,只能获得一个web资源
http1.1协议中,客户端与服务器建立连接后,在一个连接上可以获取多个web资源
一个经典案例:
一个web页面,包含3个img标签,当客户端访问这个页面时,客户端会访问几次服务器,发送几次http请求
1. html 第一次 获取服务器端的web资源1.html
2. <img src=”1.jpg”> 第二次获取服务器端的web资源1.jpg
3. <img src=”2.jpg”> 第三次...
4. <img src=”3.jpg”> 第四次...
http请求
客户端连上服务器后,向服务器请求某个web资源,称之为客户端向服务器发送了一个http请求,一个完整的http请求包括
请求行:GET /book/java.html HTTP/1.1
若干个请求头
一个空行(空行后面跟请求参数)
请求行详解:
请求行中的GET称之为请求方式,请求方式有:
POST/GET/HEAD/OPTIONS/DELETE/TRACE/PUT
常用的有:GET POST
用户如果没有设置,默认情况下浏览器向服务器发送的都是get请求,用户如果想把请求方式改为POST, 可以通过更改表单的提交方式实现
GET和POST的主要区别
如请求方式为get方式,则可以将请求的URL地址后以?的形式带上交给服务器的数据,多个数据之间以&进行分割
例如:GET /book/java.html?name=kermit&password=123456 HTTP/1.1
GET方式的特点,在URL地址后附带的参数是有限的,其数据容量通常不能抄错1K
POST则可以在请求的实体内容中向服务器发送数据,
POST方式的特点:请求的参数不会再URL中显示,请求的参数在请求头下面空一行的下一行显示,传动的数据量无限制
请求头详解:
Accept:用于告诉服务器,客户机支持的数据类型
Accept-Charset:告诉服务器。客户机采用的编码
Accept-Encoding:告诉服务器,客户机支持的数据压缩格式
Accept-language:告诉服务器,客户机的语言环境
host:告诉服务器,想访问的主机名
If-Modified-Since:告诉服务器,资源的缓存时间
Referer:告诉服务器,他是从哪个资源来访问服务器的(防盗链)
User-Agent:告诉服务器,客户机的软件环境
HTTP响应
一个http响应代表服务器向客户端回送的数据,它包括:
一个状态行、若干响应头,一个空行,以及实体内容
状态行:HTTP/1.1 200 OK
格式:HTTP版本号 状态码 原因叙述<CRLF>
状态码用于表示服务器对请求的处理结果,他是一个三位数的十进制数。响应状态码分为5类,如下所示:
100-199 表示成功接收请求,要求客户端继续提交下一次请求才能完成整个处理过程
200-299 表示成功接收请求并已完成整个处理过程,常用200
300-399 表示为完成请求,客户端进一步细化请求。例如:请求资源已经移动到一个新地址,常用302,307和304(302让去找一个指定的其他资源)(307和304拿缓存)
400-499 表示客户的请求有错误,常用404 (403没有权限,服务器拒绝访问)
500-599 表示服务器端出现错误,常用500
响应头:
Location:这个头配合302状态使用,用于告诉客户找谁
Server:服务器通过这个头,告诉浏览器服务器的类型
Content-Encoding:服务器通过这个头,告诉浏览器数据的压缩格式
Content-Length:服务器通过这个头,告诉浏览器回送数据的长度
Content-type:服务器通过这个头,告诉浏览器回送数据的类型
Last-Modified:服务器通过这个头,告诉浏览器当前资源缓存时间
Refresh:服务器通过这个头,告诉浏览器隔多长时间刷新一次
Content-Disposition:服务器通过这个头,告诉浏览器以下载方式打开数据
Transfer-Encoding:服务器通过这个头,告诉浏览器数据的传送格式
Etag:缓存项头的头
Expires:服务器通过这个头,告诉浏览器把回送的资源缓存多长时间,-1或0,则是不缓存
Cache-Control:no-cache
Pragma:no-cache
服务器通过以上两个头,也是控制浏览器不要缓存数据