HTTP概述
什么是http协议
网络通信中存在不同的主机、网络、设备,需要遵循一套统一的通信协议才可以有效的进行通信。
HTTP协议就是一套基于tcp/ip协议的应用层协议
它规定了客户端(通常是浏览器)和服务器之间的通信方式。
基本原则
HTTP协议基于请求响应模型
一次请求对应一次响应
请求只能是客户端发出服务器端只能被动的等待请求,做出响应。
HTTP协议详解
HTTP协议分为HTTP请求和HTTP响应
HTTP请求
HTTP请求结构
一个典型的HTTP请求分为 一个请求行 若干请求头 一个空行 实体内容
一个请求行
GET /books/java.html HTTP/1.1
请求方式:一共有8种请求方式(:GET、POST、HEAD、OPTIONS、PUT、DELETE、TRACE、CONNECT),但是真正使用的只有两种 GET POST,其他六种很少使用。
POST和GET之间的区别:请求参数的提交方式不同,GET请求请求参数位于URL后面,所能传输的请求参数最大不超过1KB,安全性比较低.POST提交请求参数位于请求的实体内容中,没有大小限制,也比较安全
只有当一个表单method明确被指定为POST时,才是POST提交,其他情况下都是GET提交.
请求的资源:/books/java.html
所遵循的协议:HTTP/1.1
若干请求头
http协议中请求头非常多,下面列出常见的请求头及其功能:
Accept: text/html,image/*
-- 通知服务器当前浏览器可以接受那些格式的数据
Accept-Charset: ISO-8859-1
-- 浏览器可以接受的字符集编码
Accept-Encoding: gzip,compress
-- 浏览器可以接受的压缩格式
Accept-Language: en-us,zh-cn
-- 浏览器接受的语言环境,和国际化相关的头
Host: www.tedu.cn:80
-- 需要访问的虚拟主机的名称
If-Modified-Since: Fri, 17 Feb 2017 18:23:51 GMT
-- 这是和缓存机制相关的头
Referer: http://www.tedu.cn/index.jsp
-- 这是和防盗链相关的头,对当前资源的访问来自哪个页面的超链接
User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0) -- 客户端的基本信息
Cookie
-- 和cookie相关的头
Connection: close/Keep-Alive
-- 是否继续保持连接
Date: Fri, 17 Feb 2017 18:23:51 GMT
-- 当前发送请求的时间
一个空行
空行的作用为分割请求头和实体内容。
实体内容
实体内容中为需要传递给服务器的内容数据。
HTTP响应:
HTTP响应结构
一个典型的HTTP响应分为 一个状态行 若干响应头 一个空行 实体内容。
一个状态行
HTTP/1.1 200 OK
所遵循的协议号:HTTP目前分为1.0和1.1两个版本,其中1.0每次请求都要新建连接,响应结束后断开连接,连接不会复用效率较低。1.1版本在一次请求结束后会保持连接一段时间,下次再次请求时可以复用连接,提高了效率。
状态码:是3位的十进制数,通过不同的状态码表示服务器对请求的不同处理结果。响应状态码分为5类。
状态码 | |
100~199 | 表示接收的请求正在处理 |
200~299 | 表示成功接收请求并已完成整个处理过程,常用200 |
300~399 | 需要进行附加操作以完成请求。例如: 请求的资源已经移动一个新地址,常用302、307和304 |
400~499 | 客户端的请求有错误,常用404 |
500~599 | 服务器端出现错误,常用 500 |
200 表示成功处理完成请求
302 表示请求重定向
304 表示通知浏览器使用缓存中的资源
307 表示通知浏览器使用缓存中的资源
404 找不到资源
500 服务器端错误
原因叙述:一个字符串描述原因。
若干响应头
http协议中响应头头非常多,下面列出常见的响应头及其功能:
Location: http://www.tedu.cn/index.jsp
-- 配合302使用实现请求重定向
Server:apache tomcat
-- 服务器的基本信息
Content-Encoding: gzip
-- 服务器发送的数据使用的压缩格式
Content-Length: 80
-- 服务器发送的数据的大小
Content-Language: zh-cn
--服务器发送的数据使用的语言环境 国际化相关的头
Content-Type: text/html; charset=GB2312
-- 服务器发送的数据是什么格式的,如果是字符格式的数据,则还可以通知服务器发送的数据使用的是什么编码,浏览器会根据这个头指定的编码决定使用哪个编码来打开收到的数据
Last-Modified: Fri, 17 Feb 2017 18:24:11 GMT
-- 和缓存相关的头
Refresh: 1;url=http://www.tedu.cn
-- 定时刷新相关的头,通知浏览器,过几秒后自动刷新访问哪个地址
Content-Disposition: attachment;filename=aaa.zip
-- 通知浏览器以附件的形式打开发送过去的数据,是和文件下载相关的头
Set-Cookie:SS=Q0=5Lb_nQ; path=/search
-- 和Cookie相关的头
Expires: -1
-- 通知浏览器是否缓存
Cache-Control: no-cache
-- 通知浏览器是否缓存
Pragma: no-cache
-- 通知浏览器是否缓存
--之所以一个功能有三个头,是因为历史原因.所以为了网页的兼容性考虑,通常这三个头要一起使用
Connection: close/Keep-Alive
-- 是否保持连接
Date: Fri, 17 Feb 2017 18:24:11 GMT
-- 响应时的时间
一个空行
空行的作用为分割响应头和实体内容。
实体内容
实体内容中为服务器发送回的内容数据。