【HTTP协议】

HTTP协议

什么是协议:协议就是甲乙双方定的约定,甲乙双方就是客户端(浏览器)和服务器!

  理解成双方通信的格式!

协议一共有两种:

l  请求协议;

在点击连接的时候,客户端给服务器发送了少次请求(HTTP 请求),不单单是加载html的时候发送了一次http请求,加载一次图片也要发送一次请求,所以在一个网页中加载了多少个图片就要加载多少次请求,如果一个网页中含有三张图片所以一共是有四次请求,网页算一次,还有三张图片算一次请求,图片是单独发请求的。

相当于给10086打电话,一次是一次,就是你再一次打过去的话,就不认识你了,给你处理问题的也不一定就是他了。

http 请求是无状态协议,就是每发一次请求,请求就断开了,服务器和客户端就断开了,所以访问了网站的时候,即使这个时候断开了网,这个网页也不会变化的,所以http 请求消耗的资源非常少,节省资源。

什么是有状态,就举个例子去颐和园请个导游,一直都知道是你,有状态的协议是ftp 协议,

由什么组成的

请求首行(请求行)

请求头信息:请求头名称:头值(每一个请求行中由请求头和头名称构成,相当于键值对一样)

空行

请求体(get 请求没有请求体)

GET 采用的文件的路径/hello3/index.jsp 和Host 共同构成了完整的访问路径并且采用的是HTTP1.1 协议,在这个协议中,在最后一个请求行中有一个Connection:Keep-Alive 的意思就是,在请求一个网页的时候不是不是请求一个网页的时候的所有请求都是请求一次,然后断开再请求,Keep-Alive 就是指的在连一会,也就是几秒钟,这几秒钟差不多网页中所有的图片也都加载完毕了,目的就是别总浪费资源,别总是连接上了,就断开了。

Accept:表示的是我可以解析的文件格式。如果是写成*/* 就是表示我可以解析所有的格式

Accept-Language:zh_CN 表示的是zh 代表的是中文CN 代表的是国家,因为说中文的国家有很多,不一定就是中国说中文,香港的代码是HK,还有新加坡也说中文。

User-agent :表示的是暴露了我们的信息,什么浏览器版本,电脑的型号等等

Accept-Encoding:表示的浏览器可以解压的格式

2  响应协议;

响应码

响应头对浏览器来说很重要,它说明了响应的真正含义。例如200表示响应成功了,302表示重定向,这说明浏览器需要再发一个新的请求。

l  200:请求成功,浏览器会把响应体内容(通常是html)显示在浏览器中;

l  404:请求的资源没有找到,说明客户端错误的请求了不存在的资源;

l  500:请求资源找到了,但服务器内部出现了错误;

l  302:重定向,当响应码为302时,表示服务器要求浏览器重新再发一个请求,服务器会发送一个响应头Location,它指定了新请求的URL地址,的意思是一瞬间发了两个请求,比如你打110,110总机会给你转接到当地的110,地址栏会发生变化,打电话帮我转接相当于转发,电话号是不变的

l  304:当用户第一次请求index.html时,服务器会添加一个名为Last-Modified响应头,这个头说明了index.html的最后修改时间,浏览器会把index.html内容,以及最后响应时间缓存下来。当用户第二次请求index.html时,在请求中包含一个名为If-Modified-Since请求头,它的值就是第一次请求时服务器通过Last-Modified响应头发送给浏览器的值,即index.html最后的修改时间,If-Modified-Since请求头就是在告诉服务器,我这里浏览器缓存的index.html最后修改时间是这个,您看看现在的index.html最后修改时间是不是这个,如果还是,那么您就不用再响应这个index.html内容了,我会把缓存的内容直接显示出来。而服务器端会获取If-Modified-Since值,与index.html的当前最后修改时间比对,如果相同,服务器会发响应码304,表示index.html与浏览器上次缓存的相同,无需再次发送,浏览器可以显示自己的缓存页面,如果比对不同,那么说明index.html已经做了修改,服务器会响应200。

响应头:

l  Last-Modified:最后的修改时间;

请求头:

l  If-Modified-Since:把上次请求的index.html的最后修改时间还给服务器;

状态码:304,比较If-Modified-Since的时间与文件真实的时间一样时,服务器会响应304,而且不会有响正文,表示浏览器缓存的就是最新版本!

2开头就是成功,3开头就是要转接,4开头就是前端出现错误,5开头就是服务端出现错误。

文本格式html 但是文本格式必须有编码,如果文本格式没有编码是没有办法读取的,ISO-8859-1 表示是全英文的,content-type:image/jpeg 表示是可以解析图片,图片不需要有编码,只有文本才有编码

说明:/index.jsp 相当于主机下面

就是访问的地址就是http://localhost:8080/index.jsp

点击login

post 请求请求协议

请求首行由开始的GET 变为了POST

1 表单中的数据会自动使用url编码,什么是url编码

这个时候输入的如果是中文名称

例如36

--

把164 转化为16进制,

POST请求只会在请求体中写上内容不会再地址栏中写

POST请求是可以有体的,而GET请求不能有请求体。

POST请求是可以有体的,而GET请求不能有请求体。
Referer: http://localhost:8080/hello/index.jsp:请求来自哪个页面,例如你在百度上点击链接到了这里,那么Referer:http://www.baidu.com;如果你是在浏览器的地址栏中直接输入的地址,那么就没有Referer这个请求头了;
Content-Type: application/x-www-form-urlencoded:表单的数据类型,说明会使用url格式编码数据;url编码的数据都是以“%”为前缀,后面跟随两位的16进制,例如“传智”这两个字使用UTF-8的url编码用为“%E4%BC%A0%E6%99%BA”;
Content-Length:13:请求体的长度,这里表示13个字节。
keyword=hello:请求体内容!hello是在表单中输入的数据,keyword是表单字段的名字。

l  Content-Type: application/x-www-form-urlencoded:表单的数据类型,说明会使用url格式编码数据;url编码的数据都是以“%”为前缀,后面跟随两位的16进制,例如“传智”这两个字使用UTF-8的url编码用为“%E4%BC%A0%E6%99%BA”;
Content-Length:13:请求体的长度,这里表示13个字节。
keyword=hello:请求体内容!hello是在表单中输入的数据,keyword是表单字段的名字。
Referer请求头是比较有用的一个请求头,它可以用来做统计工作,也可以用来做防盗链。

统计工作:就是从百度上搜索我们的网站我们都是花了钱的,怎么知道这几天我们的客户增加了是你们百度做的呢,就是Referer

可以统计出来有多少是从百度的网页过来的

防盗链:看我的广告然后下载的是你的资源,你肯定不愿意,所以referer 就可以判断是不是我们网站跳转过来的,如果不是那么就停留在广告位置继续看广告吧。

也可以用telnet 模拟一次http 请求,可以用 telnet 访问网络中的任何一台主机

输入内容

以后会自动返回内容

一下内容是自动响应的内容

get 请求

如果在上面不写method ="" 就会默认用的是get 请求

点击提交以后在地址栏中默认会显示提交的用户名和密码

普通的超链接默认的也是get 请求

猜你喜欢

转载自blog.csdn.net/qq_20610631/article/details/82502987