HTTP
文章目录
1.HTTP协议
1.1.HTTP介绍
超文本传输协议,客户端连上web服务器后,若想获得web服务器中的某个web资源,需遵守一定的通讯格式,HTTP协议用于定义客户端与web服务器通迅的格式
基于请求和响应的模式(先有请求,后有响应)
浏览器与Web服务器交互过程
1.2.HTTP协议的版本
HTTP最早的版本是0.9,于1990年被提出,后来,为了进一步完善HTTP,先后在1996年提出了版本1.0,在1997年提出了1.1,这里只对1.0和1.1进行介绍。
1.2.1.HTTP/1.0
HTTP1.0有着明显的缺陷:
每次只能处理一个HTTP请求,导致客户端与服务端交互比较耗时
发送请求后,服务器做出响应,链接立即断开
1.0 交互过程图
1.2.2.HTTP/1.1(使用的版本)
HTTP1.1克服了HTTP1.0的缺陷,它支持持久连接,也就是说一个TCP连接上可以传送多个HTTP请求和响应,减少资源消耗。
1.1 交互过程图
1.3.HTTP 请求消息
请求消息:指的是客户端访问某个URL地址、单击网页的某个超链接或者提交网页上的form表单时客户端给服务端发送的数据
响应消息:服务器接收到请求数据后,会将处理后的数据回送给客户端,即HTTP响应消息。
在HTTP消息中,处理服务端的响应实体内容(HTML网页、图片等)以外,其它信息对用户都是不可见的,想要观察这些数据,必须借助工具进行查看。
1.3.1.使用Chrome查看HTTP头
在网页任意地方右击选择审查元素或者按下Shift + Ctrl + c
打开Chrome自带的调试工具,截图如下
选择Network标签,刷新网页(在打开调试工具的情况下刷新)
刷新后在左边找到该网页URL,点击后右边选择Headers,就可以看到当前网页的HTTP头了
1.3.2.请求方式
请求方式 | 介绍 |
---|---|
POST | 向指定的资源提交要被处理的数据数据,请求服务器进行处理(提交表单或者上传文件) |
GET | 从指定的资源请求数据。请求获取URI所标示的资源 |
HEAD | 请求获取由URI所标识资源的响应消息头 |
OPTIONS | 请求查询服务器的性能,或者查询与资源相关的选项和需求 |
DELETE | 请求服务器删除URI所 标识的资源 |
TRACE | 请求服务器会送收到的请求信息,主要用于测试或者诊断 |
PUT | 将网页放置到指定URL位置(上传/移动) |
CONNECT | 保留将来使用 |
常用POST和GET
区别
GET把参数列表显示在地址栏中,安全级别低,不支持大数据
POST把参数封装在请求体中,安全级别高,支持大数据
请求头
请求头主要用于向服务器传递附加消息,例如客户端可以接收的数据类型、压缩方法、语言等。
1.3.3.请求头
常见请求头 | 描述 (红色掌握,其他了解) |
---|---|
Referer | 浏览器通知服务器,当前请求来自何处。如果是直接访问,则不会有这个头。常用于:防盗链 |
If-Modified-Since | 浏览器通知服务器,本地缓存的最后变更时间。与另一个响应头组合控制浏览器页面的缓存。 |
Cookie | 与会话有关技术,用于存放浏览器缓存的cookie信息。 |
User-Agent | 浏览器通知服务器,客户端浏览器与操作系统相关信息 |
Connection | 保持连接状态。Keep-Alive 连接中,close 已关闭 |
Host | 请求的服务器主机名 |
Content-Length | 请求体的长度 |
Content-Type | 如果是POST请求,会有这个头,默认值为application/x-www-form-urlencoded,表示请求体内容使用url编码 |
Accept: | 浏览器可支持的MIME类型。文件类型的一种描述方式。MIME格式:大类型/小类型[;参数]例如: text/html ,html文件text/css,css文件 text/javascript,js文件 image/*,所有图片文件 |
Accept-Encoding | 浏览器通知服务器,浏览器支持的数据压缩格式。如:GZIP压缩 |
Accept-Language | 浏览器通知服务器,浏览器支持的语言。各国语言(国际化i18n) |
1.3.4.请求体
当请求方式是post的时,请求体会有请求的参数,格式如下:
username=李四&password=123456
如果请求方式为get,那么请求参数不会出现在请求体中,会拼接在url地址后面
http://localhost:8080...?username=zhangsan&password=123
1.3.5.响应
当服务器收到浏览器的请求后,会回送响应消息给客户端
上图中的Status Code为状态码500表示请求失败,状态码由三位数字组成,状态码的第一位数字定义了响应的类别,后面两位没有具体的分类,第一位数字有5种类型的取值,如下:
- 1xx:表示请求已接收,需要继续处理
- 2xx:表示请求已成功被服务器接收、理解并接收
- 3xx:为完成请求,客户端需要进一步细化请求
- 4xx:客户端的请求有错误
- 5xx:服务器出现错误
常见的状态码
- 200 :请求成功处理,一切OK
- 302 :请求重定向
- 304 :服务器端资源没有改动,通知客户端查找本地缓存
- 强制不使用缓存Chrome快捷键为:Ctrl + Shift + R
- 404 :客户端访问资源不存在
- 500 :服务器内部出错
推荐链接:http://www.runoob.com/http/http-status-codes.html
常见响应头 | 描述 |
---|---|
Location | 指定响应的路径,需要与状态码302配合使用,完成跳转。 |
Content-Typ | e 响应正文的类型(MIME类型) |
取值:text/html;charset=UTF-8 | |
Content-Disposition | 通过浏览器以下载方式解析正文 |
取值:attachment;filename=xx.zip | |
Set-Cookie | 与会话相关技术。服务器向浏览器写入cookie |
Content-Encoding | 服务器使用的压缩格式 |
取值:gzip | |
Content-length | 响应正文的长度 |
Refresh | 定时刷新,格式:秒数;url=路径。url可省略,默认值为当前页。 |
取值:3;url=www.njmsita.com //三秒刷新页面到www.njmsita.com | |
Server | 指的是服务器名称,默认值:Apache-Coyote/1.1。可以通过conf/server.xml |
Last-Modified | 服务器通知浏览器,文件的最后修改时间。与If-Modified-Since一起使用。 |
1.4.GET 和 POST 演示
http://www.w3school.com.cn/tags/html_ref_httpmethods.asp
通过案例演示GET 和 POST 两种方式请求是如何传递数据
创建一个html文件,填写表单
GET
请注意,查询字符串(名称/值对)是在 GET 请求的 URL 中发送的:
POST
请注意,查询字符串(名称/值对)是在 POST 请求的 HTTP 消息主体中发送的
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<form action="#" method="post">
<input type="text" name="username" /><br />
<input type="text" name="password" /><br />
<input type="submit" value="测试提交" />
</form>
</body>
</html>