1. WEB通信
概念:
- WEB通信就是基于某种协议下(HTTP),客户端向服务端发送请求,服务端给客户端一个响应的过程。
- 服务端: 可以是一个物理主机(硬件),也可以是一个WEB服务器应用(软件)。
- 客户端: 一般指人类用户或者浏览器,或者二者皆可。
- 协议: 是一种约定,如果你是一个web服务器,就必须遵循
HTTP协议
,HTTP的底层是TCP/IP协议
。TCP
负责将数据完整的送到目的地,尽管路途中可能会将数据拆成若干小块。IP
负责把数据准确地送到目的地,HTTP协议
依赖于TCP/IP
协议,是一个简单的请求/响应模式的协议。
2. 请求和响应
概念:
request
叫请求:从客户端发到服务端的叫请求,请求的方式有很多种,而你最常用的无非就是get
和post
这两种。response
叫响应:从服务端给回客户端的叫响应。
文字描述: 客户端可以通过浏览器请求一个资源(可能是一个页面,一个图片,一个PDF文档等),服务器接收到客户端的这个请求之后按照请求中的路径来查找这个资源,如果找到了,创建一个对应该请求的响应,把找到的内容放到响应中,格式化响应后,返回这个响应(包括响应头和响应体),如果没找到,直接返回错误代码404,浏览器接到响应后,解析HTML然后展示给用户,所有浏览器都知道该如何处理HTML。
2.1 get请求
概念:
get
请求是最简单的HTTP请求,它的主要任务就是要从服务器拿些东西回来。- 一个
get
请求大概长这个样子:http://127.0.0.1:8080/my_project/html/index.html?a=1&b=2
http://
:告诉服务器使用什么通信协议。127.0.0.1
:物理服务器的IP地址,这里也可以使用服务器名。8080
:端口是可选的,一个服务器支持多个端口,默认为80。my_project/html/
:所请求的资源在服务器上的路径。index.html
:所请求的资源名,可以是一个HTML页面、一个Servlet、一个图片等任何资源,大部分服务器会默认寻找index.html。?a=1&b=2
:get
请求可以在路径末尾添加一个查询串(KV对),以?
开头,以&
分割,这里长度有限制。
理解:
-
客户端: "嘿!服务器,给我拿(get)一下这个主机上面的一个页面,地址是/html/index.html,哦对了,这有一些给你的参数a=1和b=2,还有就是请快点!"
-
服务端: "好的,我会去拿(get)那个页面,也谢谢你提供的参数,不过有一点要说明,咱俩的HTTP协议中,可没有包含 '快一点' 这一项!"
2.2 使用开发者模式观察get请求
概念:
- 当浏览器发送一个
get
请求的时候,我们可以通过浏览器的开发者模式观察到这次请求的常规信息、响应信息以及请求头内容等,如果你的get
请求末尾伴有查询串的话,会在开发者模式中看到Query String Parameters
表格,里面就是请求中携带的参数。 - 开发者模式查看步骤:
发送请求
-F12
-Network
-请求路径
-Headers
Headers
右边的Response
是响应体,响应体中就是返回的具体资源。get
方式没有请求体。
常规信息表: General
属性 | 描述 |
---|---|
RequestURL |
本次请求的详细地址,如果伴随参数查询串,则会拼接在URL末尾 |
RequestMethod |
本次请求的方式 |
Status Code |
状态码,常见200和404 |
响应信息表: ResponseHeaders
属性 | 描述 |
---|---|
Content-Length |
本次响应的字节大小 |
Content-Type |
本次响应的数据类型 |
Date |
本次响应发生的时间 |
Content-Type |
本次响应的数据类型 |
请求头信息表: Request Headers
属性 | 描述 |
---|---|
Accept |
可以解析的MIME类型,如果将来给我的响应内容是这些类型中的,我可以解析,如果不是这些,我将无法正确解析它们 |
User-Agent |
此次请求的浏览器信息 |
2.3 post请求
概念:
post
请求是一种更强大的请求,是get
请求的一种拓展版,利用post
请求可以请求某个资源,于此同时还可以向服务器发送一些表单数据,这些数据被放置在请求体中。post
请求和get
请求主要有三点区别:get
更快一些。post
更安全一些。post
传输量更大。
理解:
- 客户端: "嘿!服务器,请把这个请求提交(post)给一个资源,这个资源所在的地址是
/servlet/testServlet.do
,不要忘了看我的请求体,那里面有我发送的一些重要数据!" - 服务端:"好的,我会去寻找那个地址上的资源,等我找到了,我会把你在请求体中发送的数据交给它!"
2.4 使用开发者模式观察post请求
概念: 当浏览器发送给一个 post
请求的时候,我们可以通过浏览器的开发者模式观察到这次请求的请求头内容,查找方式和get一样,除了常规信息、请求头和响应头外,还可以看到请求体 Form Data
的内容,如图2-4-1。
2.4 其他请求
请求 | 描述 |
---|---|
get | 要求得到请求URL上的一个资源或者文件 |
post | 要求服务器接收附加到请求体中的信息,并提供请求URL上的一个资源或者文件,这像一个拓展的get,就像一个伴随着请求还发送了额外信息的get |
head | 只要求得到get返回结果的首部信息,这有点像get,但是没有响应体,它只要你那个提供请求URL的有关信息,但是不会真正返回实际的那个资源或者文件 |
trace | 要求请求消息回送,这样客户能看到另一端上接收了什么,以便测试或者排错 |
put | 指出要把所包含的信息(体)放在请求的URL上 |
delete | 指出删除请求URL上的一个资源或者文件 |
options | 要求得到一个HTTP方法列表,请求URL上的资源可以对这些HTTP方法做出响应 |
connect | 要求连接以便建立隧道 |