Http协议
<大纲>
简介
发展历程
http1.0和http1.1的区别
会话方式
请求报文
响应报文
1.简介
- 全名:超文本传输协议 (Hypertext transfer protocol)
- 是一种详细规定了浏览器和万维网服务器之间互相通信的规则
- 客户端与服务端通信时传输的内容我们称之为***报文***,HTTP规定了报文格式
- 客户端发送给服务器的称为”请求报文“;
- 服务器发送给客户端的称为”响应报文“。
2.发展历程
- 超文本传输协议的前身是世外桃源(Xanadu)项目
- 超文本的概念是泰德˙纳尔森(Ted Nelson)在1960年代提出的。
- 超文本要解决的通信要求是:在一台计算机上获取并显示存放在多台计算机里的文本、数据、图片和其他类型的文件;它包含两大部分:超文本转移协议和超文本标记语言(HTML)。
Telnet协议解决了一台计算机和另外一台计算机之间一对一的控制型通信的要求。
邮件协议解决了一个发件人向少量人员发送信息的通信要求。
文件传输协议解决一台计算机从另外一台计算机批量获取文件的通信要求,但是它不具备一边获取文件一边显示文件或对文件进行某种处理的功能。
新闻传输协议解决了一对多新闻广播的通信要求。
3.会话方式
-
浏览器与服务器之间的通信过程要经历***四个步骤***
- 建立连接
- 发送请求信息
- 回送请求信息
- 关闭连接
-
浏览器与WEB服务器的连接过程是短暂的,每次连接只处理一个请求和响应。
-
对每一个页面的访问,浏览器与WEB服务器都要建立一次单独的连接。
4.http1.0和http1.1的区别
- 在HTTP1.0版本中,浏览器请求一个带有图片的网页,会由于下载图片而与服务器之间开启一个新的连接;
- 在HTTP1.1版本中,允许浏览器在拿到当前请求对应的全部资源后再断开连接,提高了效率。
5.请求报文
报文格式
请求首行(请求行);
请求头信息(请求头)(中间内容);
空行;
请求体;(最后一行)(POST请求没有请求体)
请求方式
-
GET请求
GET /Hello/index.jsp HTTP/1.1 Accept: */* Accept-Language: zh-CN User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E) Accept-Encoding: gzip, deflate Host: localhost:8080 Connection: Keep-Alive Cookie: JSESSIONID=C55836CDA892D9124C03CF8FE8311B15
-
请求行:GET /Hello/index.jsp HTTP/1.1:GET请求,请求服务器路径为Hello/index.jsp,协议为1.1;
-
Accept: /:告诉服务器,当前客户端可以接收的文档类型, /,就表示什么都可以接收;
-
Accept-Language: zh-CN:当前客户端支持的语言,可以在浏览器的工具à选项中找到语言相关信息;
-
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0…:与浏览器和OS相关的信息。有些网站会显示用户的系统版本和浏览器版本信息,这都是通过获取User-Agent头信息而来的;
可以用它开发多端应用
-
Accept-Encoding: gzip, deflate:支持的压缩格式。数据在网络上传递时,可能服务器会把数据压缩后再发送;
-
Host:localhost:请求的主机名为localhost;
-
Connection: keep-alive:客户端支持的链接方式,保持一段时间链接,默认为3000ms;
-
Cookie: JSESSIONID=369766FDF6220F7803433C0B2DE36D98:因为不是第一次访问这个地址,所以会在请求中把上一次服务器响应中发送过来的Cookie在请求中一并发送过去。
-
GET请求没有请求体,请求数据附加在URL后面,显性向服务器发送
-
-
POST请求
POST /Hello/target.html HTTP/1.1 Accept: application/x-ms-application, image/jpeg, application/xaml+xml, image/gif, image/pjpeg, application/x-ms-xbap, */* Referer: http://localhost:8080/Hello/ Accept-Language: zh-CN User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E) Content-Type: application/x-www-form-urlencoded Accept-Encoding: gzip, deflate Host: localhost:8080 Content-Length: 14 Connection: Keep-Alive Cache-Control: no-cache Cookie: JSESSIONID=774DA38C1B78AE288610D77621590345 //空行 keyword=hello
-
POST请求有请求体,而GET请求没有请求体。
-
Referer: http://localhost:8080/hello/index.jsp:请求来自哪个页面
例如你在百度上点击链接到了这里,那么Referer:http://www.baidu.com;
如果你是在浏览器的地址栏中直接输入的地址,那么就没有Referer这个请求头了;
-
Content-Type: application/x-www-form-urlencoded:决定浏览器采用何种方式对响应体进行处理
MIME类型 描述 text/plain 纯文本 text/html HTML文档 text/xml XML文档 application/x- msdownload 需要下载的资源 image/jpeg
image/gif
image/…图片资源 说明会使用url格式编码数据;url编码的数据都是以“%”为前缀,后面跟随两位的16进制,例如“传智”这两个字使用UTF-8的url编码用为“%E4%BC%A0%E6%99%BA”;
-
Content-Length:14:请求体的长度,这里表示14个字节。
-
keyword=hello:请求体内容!hello是在表单中输入的数据,keyword是表单字段的名字。
-
6.响应报文
响应首行(响应行);
响应头信息(响应头);
空行;
响应体;
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-Type: text/html;charset=UTF-8
Content-Length: 274
Date: Tue, 07 Apr 2015 10:08:26 GMT
//空行
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" >
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>Hello</h1>
</body>
</html>
响应码
响应码对浏览器来说很重要,它告诉浏览器响应的结果;
- 200:请求成功,浏览器会把响应体内容(通常是html)显示在浏览器中;
- 404:请求的资源没有找到,说明客户端错误的请求了不存在的资源;
- 500:请求资源找到了,但服务器内部出现了错误;
- 302:重定向,当响应码为302时,表示服务器要求浏览器重新再发一个请求,服务器会发送一个响应头Location,它指定了新请求的URL地址;