#转载请联系
每当我们打开浏览器浏览网页时,一般都是很简单,输入网址,回车网页就弹出来了。其实里面的工作还是很多的。
首先,我们打开一个网址,例如www.baidu.com。浏览器会发送一个请求报文给百度的服务器,百度的服务器收到你的请求报文,会发一份响应报文回来给你。
这就是一种协议,我们称为http协议,即超文本传输协议。http协议又是基于tcp协议的。因为http传送的是超文本,为了避免保证数据不缺漏,所以采用tcp协议来传输。所以又常说http协议基于tcp/ip协议。
那么,这个请求报文和响应报文是什么东西呢?
我们打开chrome的开发者模式看一下,这个请求报文是什么东西。
首先打开开发者模式会出现这么一个界面。
但是,请求报文在哪呢?
我们单击开发者模式框里面的www.baidu.com。可以看到Request Headers。点击view source,就可以看到请求报文的源代码了。
下面是请求报文的源代码,我单独拿出来注释下:
1 GET / HTTP/1.1 # 这是请求行,组成:请求方式是GET,请求路径是/,协议版本是HTTP/1.1 2 Host: www.baidu.com # 这里开始是请求头,这行是主机名 3 Connection: keep-alive # 连接方式:长连接。HTTP/1.1版本默认是长连接 4 Cache-Control: max-age=0 # 缓存控制 5 Upgrade-Insecure-Requests: 1 # 支持升级安全的请求,即支持https 6 """用户代理。用来识别用户身份的,伪装浏览器时需要用到。 7 组成:操作系统版本,浏览器版本""" 8 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.84 Safari/537.36 9 """能接收的文本类型""" 10 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8 11 Accept-Encoding: gzip, deflate, br # 能接受的压缩超文本格式 12 Accept-Language: zh-CN,zh;q=0.9 # 接受的语言 13 """存在浏览器本地访问某个网站的用户行为信息""" 14 Cookie: BAIDUID=D5FD8C3E75018B4330AEF3187C3F8FAA:FG=1; BIDUPSID=D5FD8C3E75018B4330AEF3187C3F8FAA; PSTM=1534508405; BD_UPN=12314353; delPer=0; BD_HOME=0; H_PS_PSSID=1427_21124_26350_27113
请求报文是由请求行+请求头+空行+请求体构成的。上面的请求报文源代码第一行是请求行。第二行开始的全部都是请求头。那空行和请求体去哪了呢?
是这样的。因为我们打开的是百度的首页,没有在百度首页输入任何的内容。我们是获取网页。所以是GET请求方式。
但是当我们输入文字进行搜索时,用POST请求方式时,就会有空行和请求体出现了。
进行搜索时,如果用POST方式发送请求报文时,你输入的关键字会出现在请求体里面。
但是,搜索时,如果用GET方式发送请求报文是,请求报文不会有请求体,你输入的关键字会出现在请求行里面。
详细区别:
1:get重点在从服务器上获取资源,post重点在向服务器发送数据,get请求是默认的请求方式
2:get传输数据(参数)是附在URL后,并用"?"连接,多个请求数据间用"&"连接,如http://127.0.0.1/Test/login.action?name=admin&password=admin,这个过程用户是可见的;post传输数据通过Http的post机制,将字段与对应值封存在请求实体中发送给服务器,这个过程对用户是不可见的;
3:Get传输的数据量小,因为受URL长度限制;Post可以传输大量数据,所以上传文件时只能用Post方式;
4:get是不安全的,因为URL是可见的,可能会泄露私密信息,如密码等,post较get安全性较高;
-------------------------------------------------------------------------------------------------rest---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
说完了请求报文,说说响应报文。
服务器收到客户端的请求报文后,会进行响应,给客户端发送响应报文。
响应报文的格式和请求报文格式基本一样。看下我们给百度发送请求报文后,百度返回的响应报文。
HTTP/1.1 200 OK # 响应行 组成:协议版本,响应状态码,状态的描述 Bdpagetype: 1 Bdqid: 0xb45eb2f90000be96 Cache-Control: private Connection: Keep-Alive Content-Encoding: gzip Content-Type: text/html;charset=UTF-8 # 响应体的类型,响应体的编码方式 Cxy_all: baidu+764cd4d04ac5395e4a4d73576a927dd7 Date: Thu, 30 Aug 2018 08:41:37 GMT # 响应的时间 Expires: Thu, 30 Aug 2018 08:40:41 GMT Server: BWS/1.1 # 服务器名称 Set-Cookie: delPer=0; expires=Sat, 22-Aug-2048 08:40:41 GMT Set-Cookie: BDSVRTM=0; path=/ Set-Cookie: BD_HOME=0; path=/ Set-Cookie: H_PS_PSSID=; path=/; domain=.baidu.com Strict-Transport-Security: max-age=172800 Vary: Accept-Encoding X-Ua-Compatible: IE=Edge,chrome=1 Transfer-Encoding: chunked
响应报文的数据很多,我们必须知道几点即可。
1.响应行的组成
2.响应头注释的部分
3.响应体是网页的源代码,(即用户看到的内容)
4.常见的状态码:
2xx 成功 比如200 OK ,206:请求部分数据成功
3xx 重定向 比如307 Redirect
4xx 客户端错误 比如404 Not Found
5xx 服务端错误 比如500 Internal Server Error
5.响应报文的格式:
总结一下用户访问网站的过程:
1.用户输入网址.
2.浏览器请求DNS服务器, 获取域名对应的IP地址.
3.请求连接该IP地址服务器.(tcp)
4.发送资源请求. (HTTP协议 请求报文格式,tcp.send())
5.web服务器接收到请求, 并解析请求, 判断用户意图.
6.获取用户想要的资源.(a.html)
7.将资源返回给http服务器程序.
8.http服务器程序将资源数据通过网络发送给浏览器.
9.浏览器解析呈现请求的数据.