MyException - 我的异常网
当前位置:我的异常网» Web前端 » javaweb入门(四)- 详细了解http协议2

javaweb入门(四)- 详细了解http协议2

www.myexceptions.net  网友分享于:2015-08-26  浏览:3次
javaweb入门(4)-- 详细了解http协议2

http://blog.csdn.net/java4found/article/details/8702827 介绍了http请求与http响应的基本格式,并用java实现模拟浏览器向互联网的某台服务器发送http请求,并且接收服务端回送的http响应。

http请求详解:

     1、请求行:

          GET / HTTP/1.1 

               请求行共分三个部分:

                    请求方式、请求资源路径和http请求的协议版本。

                         请求方式:主要为GET方式和POST方式,在浏览器直接输地址访问,点击超链接等行为都是GET方式。表单提交:如提交问卷,提交注册,提交登陆等等,为POST方式。

                                    GET提交在URL地址以?的形式带上交给服务器的数据,多个数据通过&来进行分隔。

                                    如:http://www.xxx.com?username=java&password=java4fun

                                    POST提交则以实体数据的方式向服务器提交数据。

                     请求路径:即指定访问资源的路径。

                     请求协议版本:HTTP/1.0  与  HTTP/1.1

                                    两者的区别在于:http/1.0获取资源后马上断开连接,http/1.1会保持连接。

 
    2、请求头:通过请求头,可以告诉服务器客户机要访问的主机名,浏览器的基本信息,所支持的数据格式等等,以下是常用http请求头的作用。
                     1、Accept:告诉服务器客户机支持的文件类型, */*全部都支持
                     2、Accept-Charset:客户机所采用的编码。
                     3、Accept-Encoding:客户机支持的数据的压缩格式
                     4、Accept-Language:客户机的语言环境。
                     5、Host:客户机的想访问的主机名.
                     6、If-Modified-Since:资源缓存时间。
                     7、Referer:客户机通过这个头告诉服务器从哪个资源来访问服务器(防盗链)
                     8、User-Agent:客户机的软件环境.
                     9、Cookie:通过这个请求向服务器带数据。
                     10、Connection:close/Keep-Alive通过这个头告诉服务器是保持连接。
                     11、Date:当前时间。

     3、实体数据:向服务器提交一些数据.实体数据以请求头之间必定存在一个空行。

HTTP请求实例:
POST /user/servlet/LoginServlet HTTP/1.1
Accept: text/html, application/xhtml+xml, */*
Referer: http://localhost:8080/user/servlet/LoginUIServlet
Accept-Language: zh-CN
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
Host: localhost:8080
Content-Length: 31
Connection: Keep-Alive
Cache-Control: no-cache
Cookie: JSESSIONID=BD5764192057489439FB5A577A0AFAB0

username=java&password=java4fun

http响应详解:
     1、状态行:
          HTTP/1.1 200 OK
               状态行分三个部分:HTTP版本号 状态码  原因叙述
                   HTTP版本号:HTTP/1.0或HTTP/1.1
                    状态码:表示服务器对请求数据的处理结果回馈,分五大类:
                              1、100~199,成功接收请求,要求客户端继续提交一次请求以完整个处理过程。
                              2、200~299,请求成功并完成处理过程。
                              3、300~399,完成请求,但请求需要进一步细化,
                                   例如请求的资源如果移动到了一个新的地址,服务器返回302状态码,表示让浏览器去请求另外一个地址的资源,服务器会将请求地址通过Location消息头返回。又如当浏览器中已经缓存了请求的资源,服务器会反馈307或者304状态吗,告诉浏览器直接拿缓存的资源即可。
                              4、400~499,客户端错误,403(无访问权限),404(未找到该资源)
                              5、500~599,服务端出错。
                    原因叙述: 对处理结果的一个描述。

     2、多个响应头:服务器告知客户机,服务器的基本信息以及如何处理数据。
        Location:这个头配合302状态码使用。告诉客户机重定向至何处。
        Server:告诉浏览器服务器的类型。
        Content-Encoding,服务器通过这个头,告诉浏览器数据的压缩格式。
        Content-Length:数据的长度。
        Content-Type:告诉浏览器回送数据的类型及编码格式。  tomcat/conf/web.xml中有其对应的文件类型。
        Last-Modified:服务器通过这个头,告诉浏览器当前资源的缓存时间。
        Refresh:服务器通过这个头,告诉浏览器隔多长时间刷新一次。 
                     response.setHeader("refresh","3,url='http://baidu.com'");
        Content-Disposition:服务器通过这个头,告诉浏览器以下载方式打开数据。
                     response.setHeader("content-disposition","attachment;filename=love.jpg");
        Transfer-Encoding:服务器通过这个头告诉浏览器的传送格式。
        Range头的应用:断点续传功能。用于多线程下载技术。
                       多线程下载实例:http://blog.csdn.net/java4found/article/details/8661134

        ETag:缓存相关的头。   
                    通过这个头,可以告诉知道数据内容有无更改,来控制浏览器是否拿缓存页面。
        Expires:告诉浏览器把回送的资源缓存多长时间。-1或0,则是不缓存。
        Cache-Control:no-cache
        Pragma:no-cache;
        以上三个响应头都是控制浏览器是否对数据进行缓存,通常对时时性很高的数据,都要控制浏览器不进行缓存。

     2、实体数据:请求资源的数据,实体数据以响应头之间必定存在一个空行。

HTTP响应实例:
HTTP/1.1 200 OK
Content-Type: image/gif
ETag: "2082195828"
Accept-Ranges: bytes
Last-Modified: Tue, 18 Jan 2011 06:39:02 GMT
Expires: Fri, 28 Mar 2014 12:56:27 GMT
Cache-Control: max-age=31104000
Content-Length: 43
Date: Tue, 02 Apr 2013 12:56:27 GMT
Server: BWS/1.0

GIF89a@#$%^&*((*&^
http响应实体数据是经过服务器数据压缩处理的,所以我们无法读懂,浏览器会根据响应头的信息,去解析这些数据,最终反馈给用户。


          





文章评论

我的丈夫是个程序员
我的丈夫是个程序员
程序猿的崛起——Growth Hacker
程序猿的崛起——Growth Hacker
为什么程序员都是夜猫子
为什么程序员都是夜猫子
10个调试和排错的小建议
10个调试和排错的小建议
看13位CEO、创始人和高管如何提高工作效率
看13位CEO、创始人和高管如何提高工作效率
2013年美国开发者薪资调查报告
2013年美国开发者薪资调查报告
程序员眼里IE浏览器是什么样的
程序员眼里IE浏览器是什么样的
Web开发者需具备的8个好习惯
Web开发者需具备的8个好习惯
什么才是优秀的用户界面设计
什么才是优秀的用户界面设计
程序员和编码员之间的区别
程序员和编码员之间的区别
Java程序员必看电影
Java程序员必看电影
我跳槽是因为他们的显示器更大
我跳槽是因为他们的显示器更大
“懒”出效率是程序员的美德
“懒”出效率是程序员的美德
Web开发人员为什么越来越懒了?
Web开发人员为什么越来越懒了?
程序员的鄙视链
程序员的鄙视链
10个帮程序员减压放松的网站
10个帮程序员减压放松的网站
如何成为一名黑客
如何成为一名黑客
老美怎么看待阿里赴美上市
老美怎么看待阿里赴美上市
一个程序员的时间管理
一个程序员的时间管理
 程序员的样子
程序员的样子
那些性感的让人尖叫的程序员
那些性感的让人尖叫的程序员
那些争议最大的编程观点
那些争议最大的编程观点
2013年中国软件开发者薪资调查报告
2013年中国软件开发者薪资调查报告
代码女神横空出世
代码女神横空出世
程序员的一天:一寸光阴一寸金
程序员的一天:一寸光阴一寸金
程序员应该关注的一些事儿
程序员应该关注的一些事儿
写给自己也写给你 自己到底该何去何从
写给自己也写给你 自己到底该何去何从
旅行,写作,编程
旅行,写作,编程
程序员都该阅读的书
程序员都该阅读的书
程序员最害怕的5件事 你中招了吗?
程序员最害怕的5件事 你中招了吗?
中美印日四国程序员比较
中美印日四国程序员比较
科技史上最臭名昭著的13大罪犯
科技史上最臭名昭著的13大罪犯
初级 vs 高级开发者 哪个性价比更高?
初级 vs 高级开发者 哪个性价比更高?
总结2014中国互联网十大段子
总结2014中国互联网十大段子
“肮脏的”IT工作排行榜
“肮脏的”IT工作排行榜
鲜为人知的编程真相
鲜为人知的编程真相
程序员必看的十大电影
程序员必看的十大电影
要嫁就嫁程序猿—钱多话少死的早
要嫁就嫁程序猿—钱多话少死的早
当下全球最炙手可热的八位少年创业者
当下全球最炙手可热的八位少年创业者
漫画:程序员的工作
漫画:程序员的工作
亲爱的项目经理,我恨你
亲爱的项目经理,我恨你
团队中“技术大拿”并非越多越好
团队中“技术大拿”并非越多越好
5款最佳正则表达式编辑调试器
5款最佳正则表达式编辑调试器
如何区分一个程序员是“老手“还是“新手“?
如何区分一个程序员是“老手“还是“新手“?
十大编程算法助程序员走上高手之路
十大编程算法助程序员走上高手之路
程序员周末都喜欢做什么?
程序员周末都喜欢做什么?
老程序员的下场
老程序员的下场
不懂技术不要对懂技术的人说这很容易实现
不懂技术不要对懂技术的人说这很容易实现
Google伦敦新总部 犹如星级庄园
Google伦敦新总部 犹如星级庄园
软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有