Http协议——get和post请求

xiaoxiao2021-03-01  29

目录 1、Http请求协议的格式 2、Http常见请求头 3、Http的get请求 4、Http的post请求 ========================================================================== 1、Http请求协议的格式 请求就是客户端发送给服务器的数据! 客户端 ----> 服务器 请求格式: ---------------------------------------------------------------------------------------------- | * 请求首行:请求方法 请求路径 请求协议/版本。例如:GET /hello/index.jsp HTTP/1.1 | * 请求头:请求头就是一些键值,格式为:头:值,例如:Host:localhost | * 空行:就是一个空行,用来与请求体分隔 | * 请求体:GET方法没有请求体,POST才有请求体, | - 请求体内容为:参数名=参数值&参数名=参数值,其中参数值为中文,会使用URL编码。 ----------------------------------------------------------------------------------------------- 客户端浏览器发送给服务器的内容就这个格式的,如果不是这个格式服务器将无法解读!在HTTP协议中,请求有 很多请求方法,其中最为常用的就是GET和POST。不同的请求方法之间的区别,后面会一点一点的介绍。 2、Http常见请求头 * Host:请求的服务器主机名 * User-Agent:客户端浏览器与操作系统相关信息 * Accept-Encoding:客户端支持的数据压缩格式 * Connection:客户端支持的连接方式 * Cookie:客户端发送给服务器的"小甜点",它服务器寄存在客户端的。如果当前访问的服务器没有在客户端寄存东西, 那么就不会存在它! * Content-Length:请求体的长度 * Referer:当前发出请求的地址,例如在浏览器地址栏直接访问服务器,那么没有这个请求头。 如果是在www.baidu.com页面上点击链接访问的服务器,那么这个头的值就是www.baidu.com > 作用1:统计来源 > 作用2:防盗链 * Content-Type:如果是POST请求,会有这个头,默认值为application/x-www-form-urlencoded,表示请求体 内容使用url编码。 3、Http的get请求 打开IE,在访问hello项目的index.jsp之间打开HttpWatch,并点击“Record”按钮。然后访问index.jsp页面。 查看请求内容如下: --------------------- 请求信息如下 ----------------------------------------------------------- | GET /hello/index.jsp HTTP/1.1 | Host: localhost | User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:5.0) Gecko/20100101 Firefox/5.0 | Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 | Accept-Language: zh-cn,zh;q=0.5 | Accept-Encoding: gzip, deflate | Accept-Charset: GB2312,utf-8;q=0.7,*;q=0.7 | Connection: keep-alive | Cookie: JSESSIONID=369766FDF6220F7803433C0B2DE36D98[请求头,请求头由key/value组成。] |   [这个位置是空行,虽然没有东西,但很重要。如果有请求体,那么请求体在空行的下面] --------------------- GET请求没有请求体,结束 ------------------------------------------------- 请求信息解释: * GET /hello/index.jsp HTTP/1.1 --> GET请求,请求服务器路径为/hello/index.jsp,协议为HTTP的1.1版本 * Host:localhost --> 请求的主机名为localhost * User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:5.0) Gecko/20100101 Firefox/5.0 -->与浏览器和OS 相关的信息。有些网站会显示用户的系统版本和浏览器版本信息,这都是通过获取User-Agent头信息而来的. * Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 --> 告诉服务器,当前 客户端可以接收的文档类型,其实这里包含了*/*,就表示什么都可以接收; * Accept-Language: zh-cn,zh;q=0.5 -->当前客户端支持的语言,可以在浏览器的工具选项中找到语言相关信息; * Accept-Encoding: gzip, deflat -->支持的压缩格式。数据在网络上传递时,可能服务器会把数据压缩后再发送; * Accept-Charset: GB2312,utf-8;q=0.7,*;q=0.7 --> 客户端支持的编码; * Connection: keep-alive --> 客户端支持的链接方式,保持一段时间链接,默认为3000ms;因为大型页面上会有 框架页,会触发很多相关的页面请求,图片等资源会单独发请求,所以连接服务器一会儿可保证页面加载成功。 保持连接一会儿,会在连接时间内完成页面内容加载完全。 * Cookie: JSESSIONID=369766FDF6220F7803433C0B2DE36D98 --> 因为不是第一次访问这个地址,所以会在 请求中把上一次服务器响应中发送过来的Cookie在请求中一并发送去过;这个Cookie的名字为JSESSIONID, 以后讲的"会话"是讲它! 4、Http的post请求 为了演示POST请求,我们需要修改index.jsp页面,即添加一个表单: <form action="" method="post"> 关键字:<input type="text" name="username"/> <input type="password" name="password"/> <input type="submit" value="提交"/> </form> POST请求是有请求体的,而GET请求不能有请求体。 打开HttpWatch,输入hello后点击提交,查看请求内容如下: --------------------- 请求信息如下 --------------------------------------------------------- | POST /hello/index.jsp HTTP/1.1 [描述:请求首行] | Accept: image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/msword, | application/vnd.ms-excel, application/vnd.ms-powerpoint, application/x-ms-application, | application/x-ms-xbap, application/vnd.ms-xpsdocument, application/xaml+xml, */* | Referer: http://localhost:8080/hello/index.jsp | Accept-Language: zh-cn,en-US;q=0.5 | User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; InfoPath.2; | .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729) | Content-Type: application/x-www-form-urlencoded | Accept-Encoding: gzip, deflate | Host: localhost:8080 | Content-Length: 13 | Connection: Keep-Alive | Cache-Control: no-cache | Cookie: JSESSIONID=E365D980343B9307023A1D271CC48E7D| | [描述:这是空行。] | username=zhangsan&password=123 [描述:这是请求体,上面是空行。] --------------------- POST 请求有请求体------------------------------------------------- 请求信息解释: Content-Type: application/x-www-form-urlencoded --> 表单的数据类型,说明会使用url格式编码数据; Content-Length:13 --> 请求体的长度,这里表示13个字节。 username=zhangsan&password=123 --> 请求体内容!username 是表单字段的名字, zhangsan 是在表单中输入的数据,不同字段的数据用"&"符号连接。 详解Referer: Referer请求头是比较有用的一个请求头,它可以用来做统计工作,也可以用来做防盗链。 * 统计工作:我公司网站在百度上做了广告,但不知道在百度上做广告对我们网站的访问量是否有影响, 那么可以对每个请求中的Referer进行分析,如果Referer为百度的很多,那么说明用户都是通过百度 找到我们公司网站的。 * 防盗链:我公司网站上有一个下载链接,而其他网站盗链了这个地址, 例如在我网站上的index.html页面中有一个链接,点击即可下载JDK7.0,但有某个人的微博中盗链了 这个资源,它也有一个链接指向我们网站的JDK7.0,也就是说登录它的微博,点击链接就可以从我网站 上下载JDK7.0,这导致我们网站的广告没有看,但下载的却是我网站的资源。这时我们可以使用Referer 进行防盗链,在资源被下载之前,我们对Referer进行判断,如果请求来自本网站,那么允许下载; 如果非本网站,先跳转到本网站看广告,然后再允许下载。
转载请注明原文地址: https://www.6miu.com/read-3225114.html

最新回复(0)