javaweb的http协议的一些讲解的复习
http的讲解的复习
客户机与服务器的交互一般分为四个步骤:1、建立链接 2、客户机发送请求 3、服务机回应相应信息 4、关闭连接
在web浏览器和web服务器之间还有一个代理服务器,这个代理服务器的作用:当我们的Web浏览器向我们的Web服务器发送请求的时候,当经过代理服务器的时候,如果代理啊服务器拥有web浏览器需要的信息,那么就会直接从代理服务器中获取,而不再去请求web服务区,如果没有就会去web服务器获取信息,然后将web服务器返回的信息保存到代理服务器上。这样代理服务器就会为web服务器减少一些工作量,这样有利于减少带宽,但是同样也会存在一些问题,就是代理服务器缓存的信息可能不是最新的信息,那么web浏览器得到的消息就不是最新的。
在http/1.0的协议中,当我们的浏览器访问的网页是一个带有多张图片的网页时候,第一次去访问,返回一个网页文档,然后进行解析,当解析到图片的src的时候,就又需要去访问web服务器,(因为浏览器跟服务器每次连接都只处理一个请求),每次解析到一个src的路径的时候,就都需要去访问一次服务器,这样是非常影响性能的。
HTTP/1.1和HTTP/1.0的比较
1、再一次TCP连接上可以发送多个请求,就如刚才的访问多个图片的文档,就不需要多次访问服务器,只需要访问一次,就能得到所有的图片资源
2、当我们发送一个请求的时候,这个请求还没有相应的时候,我们也可以发送第二次请求,这个在HTTP/1.0是不可以的,我们称这种请求方式为多个请求和响应过程可以重叠进行
3、增加了更多的请求头和响应头。如:在HTTP/1.1中增加了一个Host的请求头,而且在HTTP/1.1的协议中,当我们去请求服务器的时候,必须要要加上Host否者就会报错
一个请求消息是由一个请求行、若干消息、实体构成,消息头与实体内容之间要用空行隔开
Get方式是没有实体的,它传递的参数是在请求行中的资源路径中携带,post方式才有实体内容
请求行:请求的方式 请求的资源 请求的协议的版本
响应消息:状态行、多个消息头、实体三部分构成,在消息头和实体之间要用空行隔开
状态行:协议的版本 状态码 状态码的一个解释
简单的请求消息与响应消息,它们都没有消息头,简单的请求消息方式只能是GET方式,形式:GET 请求的资源路径 没有协议的版本号 也没有消息头 更没有实体,响应消息,只有实体内容部分,没有响应的状态行和消息头
每个消息头的书写格式:头字段名字 冒号 空格 值 回车和换行
在doc窗口中telnet localhost 8080 然后会出现一个空的doc窗口 ,按下‘ctrl + ]’
请求行:请求的方式 请求的资源 协议的版本 回车换行符
如:GET /test/index.jsp HTTP/1.0 ---------à1.0版本 GET /test/index.jsp HTTP/1.1 ------à1.1版本
返回的状态行:协议的版本 状态码 原因的叙述 回车换行符
如:http/1.0 200 TEok
1.0版本在请求后就会马上断开与服务器的连接,但是1.1版本不会马上断开
1.0的可以直接按照上序那种写法连接,但是1.1不可以,1.1的请求必须要带上一个头字段
1.1的请求的正确写法:请求的方式 资源路径 协议的版本号 回车换行 头字段(带有host的头字段)-----à请注意这里的GET 和 HTTP都必须要大小写
例如:GET /test/index.jsp HTTP/1.1 回车换行 Host:
简单的请求与简单的返回状态行:请求的方式 请求的路径 回车换行
返回的东西没有协议的版本号也没有状态码 文本的内容, 并且跟1.0的http协议一样,马上就会断开与服务器的连接
Get和post方式
像我们的直接在浏览器中打url 点击也上的链接 或者method设置为get的表单或者干脆没有设置的表单,他们的请求方式都是get
Get传递参数的请求方式:请求方式 清秋路径(在请求路径上带上请求参数) 协议的版本 回车换行(千万注意,如果你使用的是http/1.1)一定得带上一个头字段
如:Get /test/index.jsp?name=caohuan&age=21 HTTP/1.1 回车换行 Host:
在jsp页面接受这两个参数:request.getParameter(“name”) request.getParameter(“age”)
Get方式发送请求,传递的内容是有限的,一般内容是在1k以下,post方式从理论上来讲传递的参数是可以无限大
Post传递参数的请求方式:请求方式 请求路径 协议的版本 回车换行 Host: 回车换行
content-type:application/x-www-form-urlencoded 回车换行 content-length:参数的字节长度 回车换行 回车换行 请求参数
如: POST /test/index.jsp HTTP 回车换行 Host: 回车换行 content-type:application/x-www-form-urlencoded 回车换行 content-length=19 回车换行
回车换行 name=caohuan&age=21
Post传递参数需要注意几点,在content-length后面是两个回车换行,content-type,content-length后面是冒号,content-length的值如果过小,那么就会截取部分参数的长度,如果content-length的值过大,那么当你输入参数的之后,请求就一直处于等待的状态
以1开头的表示需要继续提交下一次请求才能完成整个处理过程
以2开头的表示成功接受请求
以3开头的表示需要进一步细化请求
以4开头表示客户端请求有错误
以5开头表示服务端出现错误
200:表示一切正常 206表示客户端发送的请求值是要求服务端返回文档的部分内容,服务器按要求完成这个请求
302/307表示你要请求的文档已经移动到别处,此文档新的url在location响应头中给出 304表示客户端缓存的版本是最新的,客户机应该继续使用它
401表示访问的是一个受口令和密码保护的页面
404表示服务器上不存在客户端请求的资源
500表示服务端的CGI、ASP、JSP,也就是服务端的代码出现错误
通用信息头:既能用于请求端信息,也能用于响应头信息,它包含了一些与被传输的实体没有内容没有关系的常用消息字段
Cache-Control:no-cache 其实在客户端和服务器之间存在一个代理服务器,通过设置这个头字段,可以是客户端发送给客户端的消息是最新的消息,服务器发送给客户端的消息也是最新的内容
Connection:close、Keep-Alive,表示当访问本次请求的时候,是否马上就断开连接,其实HTTP/1.1就是保持连接(Keep-Alive),但是HTTP/1.0是马上断开连接(close)
Date:表示http消息产生的时间,通常情况下,服务器返回的消息需要有一个date,通知返回消息的时间,格式必须要是GMT的.
如:Wed,01 Feb 2012 10:21:31 GMT--à注意这种格式
Pragma:no-cache(只有这个值)这个也是设置客户端不要缓存信息,但是这个一般是用于HTTP/1.0,但是有时候这个设置HTTP/1.0的时候也不是准确,就会用expires:0,但是在HTT/1.1协议的情况下,一般使用的是Cache-Control:no-cache
Trailer:Date 一般情况下,我们的请求,首先是头字段,然后是实体的内容,这种形式去发送请求,但是有时候我们需要把请求的头字段放在实体内容的后面,那么就需要Trailer来指定相应的头字段放在实体内容的后面
Transfer-Encoding:chunked(只有这个值),这是值是当我们发送请求访问的时候,如果返回的消息比较少,一次就能发送过来,那么在返回的消息头字段中就会用Content-Length,但是如果内容过多,一次不能全部发送过来,需要分几次发送,那么就会使用Transfer-Encoding:chunked,每次发送的响应消息都是在发送的消息的第一行是一个十六进制表示的数值(表示这次发送过来的内容的大小),等我们分几次发送完后,最后一次还是会发送一个0长度的内容消息过来。
Upgrade:HTTP/2.0,SHTTP/1.3 表示客户端支持的协议,并且希望服务端与它通信时的协议
Via : HTTP/1.1 Proxy1, HTTP/1.1 Proxy2 表示代理服务器,通过这里可以看到通过了代理服务器的顺序,和通过的多个代理服务器的协议版本
Warning: 用来说明其他头字段和状态码一些不能说明的信息
Accept:表示浏览器接受的mime的类型 Accept-Charset:表示浏览器接受的字符编码
Accept-Encoding:表示当我们传递的实体数据量比较大的时候,我们就会把实体进行打包压缩,后面的值是压缩的格式 Accept-Language:表示客户端接受的语言,我们现在去访问谷歌,返回的并不是这种语言的页面,而是这种语言页面的URL,(这是政治因素导致的)
Authorization:Basic 表示一种授权,需要输入标识和口令,才能访问服务端的资源
Expect:100-continue(目前只有这一个值)表示请求服务的时候,是否可以在请求后面添加一个文档 form:表示访问的客户端的邮箱 Host:访问者的url 和端口号
If-Match:表示给每一次访问的实体资源设置一个标志,当我们下次访问的时候,与以前访问过的资源标志进行匹配,如果在缓存中存在,就会从缓存中直接获取,不需要再次去访问资源了。
If-Modified-Since:根据它的值,如果在这个时间之后,访问的内容没有发生改变,也就是只是会返回一个304,那么就不需要服务端返回信息,而是直接从缓存中获取内容。
If-None-Match:与if-match正好相反,Max-Forwards:表示经过的代理服务器的数量
Proxy-Authorization与Authorization的作用相似,只不过对象是代理服务器
Range: bytes=100-599(表示访问的资源从字节数100到字节数599,包含100、599)
Range:bytes=100- (表示从100之后的所有数据)
Range;bytes=-100 表示最后一百个字节的数据
if-Range:时间值 它必须与Range一起使用,表示只有在这个时间之后的值,才会去截取range中表示的字节数,如果不是在这个时间之后,那么就会返回整个文档给访问者
Referer:表示访问者来源于哪个网页的哪个链接 User-Agent:表示访问者是那种类型的访问者
Allow表示允许请求的访问方式 Content-Encoding表示返回来的实体的研所方式 Content-Language表示返回来的消息的语言类型,通过看这个,可以判断是哪个国家发送的信息 Content-Location 表示返回来的消息的路径,这个与访问的的资源的路径一样 Content-MD5表示对返回的消息进行MD5的加密 Content-Range表示返回来的实体内容的内容是从哪里到哪里以及返回来的实体内容的总长度 Content-Type表示返回来的试题内容的mime,Expires表示访问内容什么时候到期,如果到期了,那么就不能再访问缓存的内容了,必须要去服务器才能访问到内容 Last-Modified表示文档最后更新的时间
Refresh:表示在多少时间后叫浏览器去访问该网页(可以是本网页,也可以是其他的网页)
Content-Disposition表示返回的消息以哪种方式来展示,可以是网页,也可是将其保存,这在下载的时候很有用。