博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
javaweb入门(4)-- 详细了解http协议2
阅读量:5303 次
发布时间:2019-06-14

本文共 2872 字,大约阅读时间需要 9 分钟。

 介绍了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头的应用:断点续传功能。用于多线程下载技术。
                       多线程下载实例:
        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响应实体数据是经过服务器数据压缩处理的,所以我们无法读懂,浏览器会根据响应头的信息,去解析这些数据,最终反馈给用户。
          
 

 

 

 

转载于:https://www.cnblogs.com/jiangu66/archive/2013/04/02/2996646.html

你可能感兴趣的文章
Android面试收集录15 Android Bitmap压缩策略
查看>>
PHP魔术方法之__call与__callStatic方法
查看>>
ubuntu 安装后的配置
查看>>
web前端之路,js的一些好书(摘自聂微东 )
查看>>
【模板】对拍程序
查看>>
【转】redo与undo
查看>>
解决升级系统导致的 curl: (48) An unknown option was passed in to libcurl
查看>>
Java Session 介绍;
查看>>
spoj TBATTLE 质因数分解+二分
查看>>
Django 模型层
查看>>
dedecms讲解-arc.listview.class.php分析,列表页展示
查看>>
Extjs6 经典版 combo下拉框数据的使用及动态传参
查看>>
【NodeJS】http-server.cmd
查看>>
研磨JavaScript系列(五):奇妙的对象
查看>>
面试题2
查看>>
selenium+java iframe定位
查看>>
P2P综述
查看>>
第五章 如何使用Burp Target
查看>>
Sprint阶段测试评分总结
查看>>
sqlite3经常使用命令&语法
查看>>