Http协议——get和post请求

本文深入剖析HTTP请求协议,包括GET和POST请求的区别,详细讲解请求格式、常见请求头及其功能,如Host、User-Agent、Cookie等,同时演示了如何通过表单发送POST请求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录
    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://my.oschina.net/oszzq/blog/3019132

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值