1、HTTP协议概述
HTTP是什么?超文本传输协议。(Hyper Text Transfer protocal)
HTTP1.0:每次发出请求都需要建立网络连接
HTTP1.1:(主流)在一次网络连接上发多次请求和得到多次响应。多了一些头。
特点
1.支持客户端/服务器模式。
2.简单快速:请求服务时,只需传送请求方法和路径。方法常用的有GET、HEAD、POST。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
3.灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
4.无连接:限制每次连接只处理一个请求。处理完客户的请求,并收到客户的应答后,即断开连接。节省传输时间。
5.无状态:无状态是指协议对于事务处理没有记忆能力。后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。
明确:
浏览器遇到以下标记时,会自动发出请求
<link rel="stylesheet" href="main.css">
<srcipt type="text/javascript" src="xxx.js"></script>
<img src="1.jsp" />
2.HTTP协议的组成
请求部分
GET /1.html HTTP/1.1 //请求消息行位于第一行
Host img.mukewang.com //请求消息头从第二行开始到第一个空行结束
User-Agent Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36
Accept image/webp,image/*,*/*;q=0.8
Referer http://www.imooc.com/
Accept-Encoding gzip, deflate, sdch
Accept-Language zh-CN,zh;q=0.8
HTTP/1.1 200 OK //响应消息行位于第一行
Date: Fri, 22 May 2009 06:07:21 GMT //响应消息头从第二行开始到第一个空行结束
Content-Type: text/html; charset=UTF-8
<html> //响应正文
<head></head>
<body>
<!-- sss -->
</body>
</html>
3.HTTP请求消息
- 请求行:三个部分,分别是请求方式、资源路径、HTTP版本
GET /index.html HTTP/1.1
请求方式
请求方式 | 含义 |
---|---|
GET | 请求获取请求行URI所标识的资源 |
POST | 向指定资源提交数据进行处理请求(例如提交表单或者上传文件 |
HEAD | 请求获取请求行URI所标识的资源响应消息头 |
PUT | 将网页放置到指定的URL位置 |
DELETE | 请求服务器删除URI所标识的资源 |
TRACE | 回显服务器收到的请求,主要用于测试或诊断。 |
CONNECT | 保留将来使用 |
OTIONS | 允许客户端查看服务器的性能 |
GET:默认的
http://localhost:8080/app1/1.html?username=abc&password=123
提交的数据显示出来了,相对不安全,协议的第一行有长度限制
HTTP 协议 未规定 GET 和POST的长度限制
GET的最大长度显示是因为 浏览器和 web服务器限制了 URI的长度
IE则最大长度为2083byte,支持Chrome,则最大长度 8182byte
POST:可以通过<form method=”post”/>
username=abc&password=123提交的数据在请求正文中的,相对安全,长度没有限制。
/app1/1.html :请求的资源地址。(URI)
URL:协议+主机:端口+资源地址
http://localhost:8080/app1/1.html
请求消息头
作用:向服务器端传递附加信息(暗号指令)
Accept:告知服务器,客户端可以接受的数据类型(MIME类型)
文件系统:通过文件的扩展名区分不同的文件的。txt jpeg
MIME类型:大类型/小类型。 txt--->text/plain html---->text/html js---->text/javascript (具体对应关系:Tomcat\conf\web.xml)
请求行之后,便是若干请求头
消息头 | 描述 |
---|---|
Accept | 用来指出客户端程序能够处理的MIME(多用途互联网邮件拓展)类型 |
Accept-Charset | 告知服务器端客户端所使用的字符集 |
Accept-Encoding | 指定客户端能够进行解码的数据编码方式,可以定义多个编码方式逗号分隔 |
Accept-Language | 指定客户端期望服务器返回那个国家语言的文档 |
Authorization(授权)Proxy-Authorization | 当客户端访问受口令保护的网页时Web服务器会发送401响应状态码和WWW-Authenticate响应头要求客户使用Authorization请求头来应答 |
Proxy-Authorization | 请求头是服务器端向代理服务器发送的验证信息 |
Host | 资源所在的主机名端口号 |
if-Match | 浏览器和代理服务器都可以缓存服务器回送的网页文档 |
if-Match-Since | 与if-Match类似它的值为GMT格式的时间 |
Range 和 if-Range | 用于指定服务器只需返回文档中的部分内容及内容范围,对大文档的断点继传非常有用 |
Max-Forword | 指定当前请求可以途经的代理服务器数量没经过一个代理服务器此数值就减1 |
Referer | 通过浏览器地址中输入URL地址的情况不会发送Referer请求头 |
User-Agent | 用户代理简称UA |
通过链接会使用Referer请求头
常被网站管理员用来追踪网站的访问者是如何导航进入网站的,还可以用于网站的防盗链
Content-Type:告知服务器,请求正文的MIME类型
默认类型:application/x-www-form-urlencoded(表单enctype属性的默认取值)
具体体现:username=abc&password=123
其他类型:multipart/form-data(文件上传时用的)
If-Modified-Since:告知服务器,当前访问的资源,缓存中的文件的最后修改时间。
User-Agent:告知服务器,浏览器的类型
Content-Length:请求正文的数据长度
Cookie:(*****重要)会话管理有关
请求正文:
数据能提交到服务器,表单中的输入域必须有name属性值
POST请求是才有正文 username=abc&password=123
3.HTTP响应消息
响应状态行
响应状态行:三个部分,分别是HTTP版本、状态码、状态码信息描述
HTTP/1.1 200 OK
状态码由三位数字组成第一个数字定义了响应的类别
状态码 | 说明 |
---|---|
1xx | 表示请求已接收需要继续处理 |
2xx | 表示请求以成功被服务器接收、理解、并接受 |
3xx | 为完成请求,客户端需进一步细化请求 |
4xx | 客户端的请求有错误 |
5xx | 服务器端出现错误 |
记住常用的响应码:
100:继续
101:协议切换
200:一切正常
302/307:请求重定向
304:服务器上的资源没有发生改变
400:请求无效
404:访问的地址不存在
500:服务器端错误
HTTP响应消息头
消息头 | 描述 |
---|---|
Accept_Range | 说明服务器是否接收客户端使用Range请求头字段请求资源不使用Accept_Range: none |
Age | 指出当前网页文档可以在客户端或者代理服务器中缓存的有效时间 |
Etag | 用于向客户端传送代表实体内容特征的标记信息,这些标记信息称为实体标签 |
Location | 通知客户端获取请求文档的新地址。其值是一个使用绝对路径的URL |
Retry-After | 可以与503状态码配合使用告诉客户端在什么时间可以重新发送请求 |
Server | 用于指定服务器软件产品的名称 |
Vary | 用于指定影响服务器所生成的响应内容 的那些请求头字段名 |
Refresh | 告诉浏览器自动刷新页面的时间 |
响应消息头
作用:服务器端向客户端传递的附加信息(暗号指令)
Location:告知客户端,你去访问的地址。
和302/307实现请求重定向
Content-Encoding:告知客户端,响应正文使用的压缩编码(gzip)
Content-Length:告知客户端,响应正文的长度
Content-Type:告知客户端,响应文正的MIME类型。默认text/html
Refresh:告知客户端,定时刷新
Content-Disposition:告知客户端,用下载的方式打开
attachment;filename=23.jpg
Set-Cookie:(*****)会话有关
------------------------------------------------------------------------
Expires: -1 控制时间的
Cache-Control: no-cache (1.1)
Pragma: no-cache (1.0)
三头一块用,用于告知浏览器,不要缓存。
HTTP其他头字段
通用头字段
Cache-Control
用在请求消息中,用于通知位于客户端和服务器端之间的代理服务器如何使用已缓存的页面
Connection
用于指定处理完本次请求、响应后,客户端和服务器端是否还要继续保持连接
Date
表示HTTP消息产生的当前时间,它的值是GMT时间
Pragma
主要在HTTP1.1通知代理服务器和客户端如何使用缓存页面,它的值只能固定设置no-cache
Transfer-Encoding
服务器端和客户端不是持久化连接当服务器端关闭TCP连接客户端就知道相应的数据就已发送完毕
Trailer
放置在整个HTTP消息尾部可以在实体内容部分之后放置头字段信息
Upgrade
用于指定客户端想要从当前协议切换的新的通信协议
Via
用于指定HTTP消息所途径的代理服务器所使用的协议和主机名称,这个头字段由代理服务器产生
Warning
头字段和状态码不能说明的一些附加警告信息
实体字段头
Allow
Allow:GET,HEAD,PUT
指定了请求资源所支持的请求方式必须和405状态码一起使用
Content-Langage
返回网页文档的国家语言的类型
Content-Length
表示实体内容的长度
Content-Location
用于指定响应消息中实体内容的实际位置路径
Content-Range
指定服务器返回的部分实体内容的位置信息
Content-MD5
实体内容的完整性检查
MD5数字摘要算法是一种散列算法能够对一段信息进行运算产生一个16个字节的数字摘要
Content-Type
指出实体内容的MIME类型
Content-Encoding
指定实体内容的压缩编码方式
Expires
指定当前文档的过期时间
Last-Modified
指定文档的最后更改时间
URI和URL的区别
如果URl的一种实现,那么URL就是用定位的方式实现的URI
URI,是uniform resource identifier,统一资源标识符,用来唯一的标识一个资源。
URI一般由三部组成:
①访问资源的命名机制
②存放资源的主机名
③资源自身的名称,由路径表示,着重强调于资源。
URL是uniform resource locator,统一资源定位器,它是一种具体的URI,即URL可以用来标识一个资源,而且还指明了如何locate这个资源。
URL一般由三部组成:
①协议(或称为服务方式)
②存有该资源的主机IP地址(有时也包括端口号)
③主机资源的具体地址。如目录和文件名等
URN,uniform resource name,统一资源命名,是通过名字来标识资源
如:
URL=( http://localhost(127.xx.xx.xxx):8080/app1/1.html);
URI= (app1/1.html);
网友评论