关于HTTP协议和GET、POST请求

1、什么是通信协议?
    计算机A和计算机B之间在传送数据之前,制定好的一种数据传送格式。
    发送数据的时候采用特定的格式发送,接收方提前知道数据的格式,可以快速的准确的从该数据包中解析出有价值的数据。
    
2、Browser和Server之间通信的时候,采用的通信协议是HTTP协议,目前常用版本号是:HTTP1.1协议。

3、HTTP协议被称为超文本传输协议。W3C制定的。浏览器和服务器之间传送数据的时候,必须遵守它们制定的格式。

4、HTTP协议底层协议是:TCP/IP协议。

5、HTTP协议包括:
    请求协议:从浏览器发送数据到服务器端。(Browser --> Server)
    响应协议:从服务器端发送数据到浏览器客户端。(Server ---> Browser)

6、可以安装httpwatch工具对HTTP协议进行监测。

7、关于HTTP协议之请求协议:
    
    7.1、请求协议包括:get方式、post方式等
    
    7.2、无论是get还是post,请求协议包括4部分:

        * 请求行
        * 请求报头
        * 空白行
        * 请求体

                  HTTP 头部解释
    
    7.3、请求协议之:GET请求方式,详情:

        GET /prj-servlet-008/user/login?username=admin&password=123 HTTP/1.1                    请求行
        Accept: text/html, application/xhtml+xml, */*                                            请求报头
        Referer: http://localhost:8080/prj-servlet-008/                                            请求报头
        Accept-Language: zh-CN                                                                    请求报头
        User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)    请求报头
        UA-CPU: AMD64                                                                            请求报头
        Accept-Encoding: gzip, deflate                                                            请求报头
        Host: localhost:8080                                                                    请求报头
        Connection: Keep-Alive                                                                    请求报头
                                                                                                空白行
                                                                                                请求体

        注意:
            1、请求行由三部分组成:请求方式+URI+协议版本号
            2、get请求在请求行上发送数据,格式:uri?name=value&name=value...最终提交的数据显示在浏览器的地址栏上
    
    7.4、请求协议之:POST请求方式,详情:

        POST /prj-servlet-008/user/login HTTP/1.1                                                请求行
        Accept: text/html, application/xhtml+xml, */*                                            请求报头
        Referer: http://localhost:8080/prj-servlet-008/                                            请求报头
        Accept-Language: zh-CN                                                                    请求报头
        User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)    请求报头
        Content-Type: application/x-www-form-urlencoded                                            请求报头
        UA-CPU: AMD64                                                                            请求报头
        Accept-Encoding: gzip, deflate                                                            请求报头
        Host: localhost:8080                                                                    请求报头
        Content-Length: 27                                                                        请求报头
        Connection: Keep-Alive                                                                    请求报头
        Cache-Control: no-cache                                                                    请求报头
                                                                                                空白行
        username=admin&password=112233                                                            请求体

        注意:
            1、请求行由三部分组成:请求方式+URI+协议版本号
            2、post请求在请求体中发送数据,格式:name=value&name=value...最终提交的数据不会显示在浏览器的地址栏上
                
8、关于HTTP协议之响应协议:
    
    8.1、响应协议包括四部分:

        * 状态行
        * 响应报头
        * 空白行
        * 响应体
    
    8.2、响应协议的详细内容:

        HTTP/1.1 200 OK                                                状态行
        Server: Apache-Coyote/1.1                                    响应报头
        Content-Type: text/html;charset=UTF-8                        响应报头
        Content-Length: 96                                            响应报头
        Date: Mon, 23 May 2016 02:21:25 GMT                            响应报头
                                                                    空白行
        <html>                                                        响应体
        <head>                                                        ....
        <title>login success</title>
        </head>
        <body>
        login success
        </body>
        </html>


    8.3、关于状态行:
        * 状态行包括三部分:协议版本号 + HTTP状态码 + 状态描述信息
        * HTTP状态码是W3C规定的,属于HTTP协议的一部分。
        * 常见的HTTP状态码:
            200 - 响应成功,正常结束
            404 - 资源未找到,路径错误
            500 - 服务器内部错误,例如服务器端的代码出现异常
            405 - ?????
            .......
    
    8.4、关于响应报头:
        * 服务器版本信息
        * 响应的内容类型以及字符编码方式
        * 响应内容长度,以字节为单位
        * 响应时间
        
9、关于GET请求和POST请求
    
    9.1、什么样的请求是GET请求,什么样的请求是POST请求呢?

    
        * 只有一种情况是POST请求,当使用form表单,并且form表单的method属性手动设置为 method="post"才是post请求其它任何一种请求都是基于GET方式。
        
        * 超链接、在浏览器地址栏上直接输入URL回车、表单提交时没有设置method、表单提交时method设置为method="get" 等都属于GET请求方式。

<html>
	<head>
		<title>用户登录</title>
		<meta charset="UTF-8">
	</head>
	<body>
	
		GET请求方式:
		<form action="/servletDemo/login">
			用户名<input type="text" name="username"><br>
			密码<input type="password" name="password"><br>
			<input type="submit" value="登录">
		</form>
		
		GET请求方式:
		<form action="/servletDemo/login" method="get">
			用户名<input type="text" name="username"><br>
			密码<input type="password" name="password"><br>
			<input type="submit" value="登录">
		</form>
		
		POST请求方式:
		<form action="/servletDemo/login" method="post">
			用户名<input type="text" name="username"><br>
			密码<input type="password" name="password"><br>
			<input type="submit" value="登录">
		</form>
	</body>
</html>


    
    9.2、实际上HTTP协议中请求方式不止是GET和POST,还有其它的方式,例如:put、delete......(这些不常用)
    
    9.3、GET请求和POST请求的区别?

    
        - GET请求在请求行上发送数据,数据最终显示在浏览器地址栏上
        - POST请求在请求体中发送数据,数据不会显示到浏览器地址栏上
        
        - GET请求只能提交普通的字符串
        - POST请求由于在请求中提交数据,所以不仅可以提交普通的字符串,而且还可以提交二进制数据(图片、声音、视频等...)
        
        - GET请求由于在浏览器地址栏上显示,所以GET请求提交的数据量有限制。
        - POST请求提交数据量没有上限【理论上是这样的】
        
        - GET请求最终的结果会放到浏览器的缓存当中(cache)
            * get请求大部分都是为了读取服务器端的资源,这个资源是有价值的,放到缓存当中。
        - POST请求最终的结果不会放到浏览器的缓存当中(no-cache)
            * post请求大部分都是为了修改服务器端的某个资源,由于每一次修改的结果可能不同,所以最终的结果也没有必要让浏览器缓存起来。
    
    9.4、GET请求和POST请求怎么选择使用?
    
        - 提交的数据当中有敏感信息使用POST
        
        - 提交的数据是大数据量采用POST
        
        - 提交的数据不是普通的字符串采用POST
        
        - 修改服务器端资源采用POST
        
        - 其它都是用GET方式提交
        
        注:相对来说,GET情况比POST情况要多一些。

希望对你有帮助,祝你有一个好心情,加油!

若有错误、不全、可优化的点,欢迎纠正与补充!

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值