一:什么是http
http是hypertext transfer protocal(超文本传输协议)的简写,它是TCP/IP协议的应用层协议,用于定义WEB浏览器和WEB服务器之间交换数据的过程。http是学习web开发的基础。
HTTP协议的版本有http/1.0、http/1.1。在http1.0协议是属于短连接,即客户端与web服务器端建立连接后,只能获得一个资源。而http1.1协议版本是属于长连接,即客户端和web服务器端建立连接后,在一次连接信道里可以获取多个web资源。
上图所示,通过浏览器访问本地搭建好的tomcat服务器,打开tomcat首页,会有四次请求,如果这四次请求是四次连接那么对服务器造成的压力是巨大的,http1.1协议有效的解决了这个问题,一次请求后在一段时间内会保持连接状态(Connection: keep-alive )。
从过程开http协议包括两部分,http请求和http响应。
二:http请求
什么是http请求
客户端连上web服务器后,想服务器请求某个web资源,称客户端想服务端发送一个http请求。一个完整的http请求包括三部分:一个请求行、若干个请求头以及请求体。
请求行:请求行用于描述客户端的求情方式、请求资源名称、以及使用的http协议版本号。
请求行中的GET 为请求方式,请求方式一般有:POST,GET,HEAD,OPTION,DELETE,TRACE,PUT.
常用的有:GET,POST
如果用户没有设置,默认情况下浏览器想服务器发送的都是GET请求,如在浏览器中直接输入地址,点击超链接等都是get,用户如果想把请求方式改为post,可通过更改表单的提交方式实现
| 1 2 3 |
不管是post还是get,都用于想服务器请求某个web资源,这两种方式的主要区别主要表现在数据传递上:
get方式,在请求的url地址后面以“?”的形式带上交给服务器的请求数据,多个数据之间用"&"隔开,如 应用广场 - 微博-随时随地发现新鲜事,get方式在url后面附带参数是用限制的,其数据容量不能超过1k;如post请求方式,是在请求体中想服务器发送数据,它传输的数据是没有大小限制的
请求头:请求头用户描述客户端请求哪台主机,以及客户端的一些环境信息等。
http常用请求头:
Accept:text/html,image/* 浏览器告诉服务器,浏览器支持的数据类型
Accept-Charset:浏览器告诉服务器,客户机采用的编码
Accept-Encoding:浏览器告诉服务器,客户机支持的数据压缩格式
Accept-Language:客户机的语言环境
Host:告诉服务器向访问的主机名
If-Modified-Since:客户机通过这个头告诉服务器,资源的缓存时间。例如新浪首页一般会把首页缓存,浏览器访问的时候是带着时间值过来的,如果服务器的时间值比浏览器带过来的时间值新,那么服务器就回送新的数据给浏览器
referer:客户机通过这个头告诉服务器,是从哪个资源访问到当前资源的
User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.43 Safari/537.31 告诉服务器,客户机的软件环境
cookie:客户机通过这个头可以想服务器带数据,这些数据是在浏览器端的
Range:只是服务器只传输一部分Web资源,这个头可用来实现断电续传功能,range可通过三种格式设置传输的字节范围
range:bytes=1000-2000,传输范围从1000-2000字节
range:bytes=1000- 传输web资源中第1000个字节以后的所有内容
range:bytes=1000 传输最后1000个字节
Connection:请求后是否保持连接状态
请求数据:请求数据一般和请求头之间空一行,上图中因为是get方式所以没有请求数据,只有post的请求方式才有请求数据。
三、http响应
一个http响应代表服务器向客户端回送的数据,它包括:一个状态行、若干个响应头以及响应报文体
状态行:用于描述服务器对请求的处理结果。格式:http协议版本号 状态码 描述。 如:http/1.1 200 OK
状态码用于描述服务器对请求的处理结果,它是一个三位十进制数字,响应状态码分五类,如下图所示:
其中302表示重定向。
304表示户端已经执行了GET,但文件未变化,304响应禁止包含消息体,因此始终以消息头后的第一个空行结尾。
响应头:用于描述服务器的基本信息,以及数据的描述,服务器通过这些数据的描述,可以通知客户端如何处理一会它回送的数据。
http常用响应头:
Location:配合状态码是302使用,用于告诉浏览器要找的资源。
Server:Apache 通过这个响应头告诉浏览器服务器的类型
Content-Encoding: gzip 通过这个头,服务器告诉浏览器数据的压缩格式
Content-Length: 68217,服务器通过这个头,告诉浏览器回送数据的长度
Content-Type: text/html,服务器 通过这个头,告诉浏览器回送数据的类型,浏览器根据这个类型来解析数据
Last-Modified: Tue, 02 Apr 2013 13:48:01 GMT,服务器通过这个头,告诉浏览器当前资源的缓存时间
Refresh: 通过这个头,告诉浏览器多长时间刷新一次
Content-Disposition:attachment;filename=1.jpg,通过这个头,告诉浏览器以下载方式打开数据
Transfer-Encoding: chunked,服务器通过这个头,告诉浏览器数据的传送格式
ETag:和缓存相关的头
Expires: Tue, 02 Apr 2013 13:50:43 GMT,服务器通过这头,把回送的数据返回多长时间,-1或0则不缓存。
Cache-control:no-cache
Progma:no-cache, 服务器通过以上这两个头,控制浏览器不缓存数据。
Connection:close/keep-Alive,响应完了后的状态,是断开还是保持连接
Accept-Ranges:说明wen服务器是否支持range
Content-Range:1000-3000/5000 指定返回的web资源的字节范围.
Date:当前时间
响应报文体:代表服务器向客户端回送的数据



