Http协议浅析

Http协议是超文本传输协议,是应用层的协议,其协议本身是无连接、无状态,是基于TCP/IP层之上的。上面这些话是《计算机网络》上的原话,可能对我们实际工作和学习中没有太大的帮助。各位博友们注意了,下面这些话可对我们实际工作和学习中帮助是大大得。
Http协议是请求/响应协议,客户端发送一个请求给服务器,这一个请求(简称 Http请求)包括哪些内容呢?有请求行(Request Line)、请求报头(Request Header)、请求正文(message-body),服务器并做出响应。这响应(简称Http响应)包括哪些内容呢?有状态行(Response Line)、响应报头(Response Header)、响应正文(Entity)。这也就完成了客户端与服务器的一次通信过程。
各位看客们注意了,下面我就详细讲解一下上面这段话的含义。
工欲善其事必先利其器,想要深刻的Http通信过程,就少不了实践。首先亮出利器(原料):一个抓包工具HTTPWATCH软件和IE浏览器。
HttpWatch工具的地址是:
http://download.csdn.net/detail/u012811078/9670418
先安装HttpWatch工具,打开IE浏览器单击鼠标右键,里面有一选项HttpWatch Professional就可以使用这个抓包工具了。其次还需要搭建一个本地的Tomcat服务器,这个需要博友们自己在网上找资源。

1. Http请求

a.请求行(Request Line)
格式:这里写图片描述
先来解释简单的,字母SP表示反斜杠,CRLF表示回车和换行
Method 符号指出Request-URI标识的资源上所执行的方法。Method包括 ‘GET’;’POST’;’HEAD’;’PUT’;’DELETE’;’TRACE’;’CONNECT’;
Request-URI是统一资源定位符,标识应用到请求上的资源。
b.请求报文(Request Header)
这些 request header fields 允许客户端传输额外的关于请求和客户端本身的信息给服务器,这些Fields扮演着请求修饰符,与编程语言方法符号上的参数有相同的语义。
这里先写两个简单的html格式的文件,对这些概念有一个具体的认识。
001.html

<!DOCTYPE html>
<html lang="zh-cn">
<head>
    <meta charset="utf-8">
    <title>001</title>
</head>
<body>
<form action="http://localhost:8080/002.html" method="get">
名字:
<input type="text" name="name">
<input type="submit" name="button" value="submit">
</body>
</html>

002.html

<!DOCTYPE html>
<html lang="zh-cn">
<head>
    <meta charset="utf-8">
    <title>002</title>
</head>
<body>
<h1>Hello HTML5! </h1>
</body>
</html>

把这两个文件放在webapps文件夹下,启动Tomcat服务器,并打开IE浏览器输入

http://localhost:8080/001.html

然后打开HttpWatch工具,点击Record按钮,并刷新该网页,就会出现如下的结果:这里写图片描述

2.Http响应

a.状态行(status line)
格式:
这里写图片描述

b.响应报头(response-header)
response-header域允许服务器传递一些不能放置在status-line里的额外信息,域里的字段给出了关于服务器和由Request-URI所标识的资源信息。
c.实体(Entity)
由request和response消息传输的内容即是Entity,实体由entity-header和entity-body组成。
这里写图片描述

工作和学习中最常用的就是GET请求和POST请求,但我在网上和书上看了很多资料[ps :也许我没有看到更好的资料],好像没有把这两种请求方法的区别给讲清楚,感觉自己在云里雾里。
GET请求和POST请求的相同点是都可以向服务器发送数据。关键是不同点,需要我们格外的关注。就以上面代码的为例,在001.html文件中的method=”get”,其运行结果为:
这里写图片描述
从浏览器的地址栏看:
这里写图片描述

将001.html文件中的method字段改为method=“post”,其运行结果为:
这里写图片描述
从浏览器的地址栏看:
这里写图片描述
不知各位小伙伴们看出其中的端倪了没有?

Get请求时,是将请求的内容放置在请求行里面的,而Post请求时,是将请求的内容放在message-body中的。

下表是Get请求和Post请求的区别
这里写图片描述

下面简单说说状态码的事,Status-Code都是三位数字,分为5大类,eg:
1xx表示通知信息的,如请求收到了或正在处理
2xx表示成功,如接受或知道了。
3xx表示重定向,如要完成请求还需采取进一步的行动
4xx表示客户端的差错,如请求中有错误的语法或不能完成。
5xx表示服务器的差错,如服务器失效无法完成请求。

目前就把Http协议介绍这里,然后再有什么不明白的可以参考RFC2616文档,其网址是
https://datatracker.ietf.org/doc/rfc2616/?include_text=1

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章