提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
1.HTTP概述
超文本传输协议(Hyper Text Transfer Protocol,HTTP)是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。请求和响应消息的头以ASCII形式给出;而 [9] 消息内容则具有一个类似MIME的格式。这个简单模型是早期Web成功的有功之臣,因为它使开发和部署非常地直截了当。
WWW(World Wide Web)发源于欧洲日内瓦量子物理实验室CERN,正是WWW技术的出现使得因特网得以超乎想象的速度迅猛发展。这项基于TCP/IP的技术在短短的十年时间内迅速成为已经发展了几十年的Internet上的规模最大的信息系统,它的成功归结于它的简单、实用。在WWW的背后有一系列的协议和标准支持它完成如此宏大的工作,这就是Web协议族,其中就包括HTTP超文本传输协议。
在1990年,HTTP就成为WWW的支撑协议。当时由其创始人WWW之父蒂姆·伯纳斯·李(Tim Berners-Lee)提出,随后WWW联盟(WWW Consortium)成立,组织了IETF(Internet Engineering Task Force)小组进一步完善和发布HTTP。 [1]
HTTP是应用层协议,同其他应用层协议一样,是为了实现某一类具体应用的协议,并由某一运行在用户空间的应用程序来实现其功能。HTTP是一种协议规范,这种规范记录在文档上,为真正通过HTTP进行通信的HTTP的实现程序。
HTTP是基于B/S架构进行通信的,而HTTP的服务器端实现程序有httpd、nginx等,其客户端的实现程序主要是Web浏览器,例如Firefox、Internet Explorer、Google Chrome、Safari、Opera等,此外,客户端的命令行工具还有elink、curl等。Web服务是基于TCP的,因此为了能够随时响应客户端的请求,Web服务器需要监听在80/TCP端口。这样客户端浏览器和Web服务器之间就可以通过HTTP进行通信了。
HTTP的作用:确定了请求和响应数据的格式。浏览器发送给服务器的数据:请求报文;服务器返回给浏览器的数 据:响应报文。
HTTP有1.0和1.1两个版本,HTTP1.1版本比1.0版本多了一些消息头。执行过程如下:
HTTP1.0 HTTP1.1 创建连接TCP/IP 创建连接(TCP/IP) 发送请求 发送请求1 得到响应 得到响应1 关闭连接 发送请求2 创建连接TCP/IP 得到响应2 发送请求 … 得到响应 … 关闭连接 连接超时或手动关闭连接 补充说明:
HTTP协议概念是客户浏览器和服务器一种一问一答的规则,那么必须要有问有答,而且要先问后答。但是我们使用 <script> , <link> 和 <img> 标签,没有手动发起请求,但是仍然能从服务器端拿到数据,原因就是:在浏览器遇到 <script> , <link> , <img> 标签时会自动发出请求。
- HTTP的组成:由请求和响应两部分构成,请求是由客户端往服务器传输数据,响应是由服务器往客户端传输数据。下面详细阐述HTTP的组成。
2.HTTP组成
由HTTP协议的概念可知,它分为问和答两部分。其中问指的就是请求部分,而答指的就是响应部分。
2.1 HTTP请求部分详细说明
2.1.1 请求部分的组成
请求行:永远位于请求的第一行。
请求消息头:从第二行开始,到第一个空行结束。
请求的正文:从第一个空行后开始,到正文结束。
2.1.2 请求行
1.请求行的组成
2.请求方法:
GET,POST,HEAD,PUT,DELETE,CONNECT,OPTIONS,TRACE,PATCH
其中用的比较多的是POST和GET方法
POST与GET方法的区别:
1.GET请求参数是通过URL进行传递的,POST请求的参数包含在请求体当中。
2.GET请求比POST请求更不安全,因为参数直接暴露在URL中,所以,GET请求不能用来传递敏感信息。
3.GET请求在url中传递的参数是有长度限制的(在HTTP协议中并没有对URL的长度进行限制,限制是特定的浏览器以及服务器对他的限制,不同浏览器限制的长度不同。),POST对长度没有限制。
4.GET请求参数会完整的保留在浏览器的历史记录中,POST请求的参数不会保留。
5.GET请求进行url编码(百分号编码),POST请求支持多种编码方式。
6.GET请求产生的URL地址是可以被bookmark(添加书签)的,POST请求不可以。
7.GET请求在浏览器回退的时候是无害的,POST请求会.再次提交数据。
8.GET请求在浏览器中可以被主动cache(缓存),而POST请求不会,可以手动设置。
3.统一资源标识符 : 就是资源请求的地址。 JavaSE - 11 网络编程_蔚.蓝的博客-CSDN博客中已经阐述过,就不再阐述。
4.HTTP协议 : HTTP1.0和HTTP1.1
2.1.3 请求头信息
内容 | 说明 |
---|---|
Accept | 告知服务器,客户端浏览器所支持的是MIME类型 |
Accpet-Encoding | 告知服务器,客户浏览器所支持的压缩编码格式,最常用的是gzip压缩 |
Accept-Language | 告知服务器,客户浏览器所支持的语言。一般是zh_CN或en_US等。 |
Referer | 告知服务器,当前请求来源。只有当前请求有来源的时候,才有这个消息头。从地址栏输入的没有来源。作用:1.投放广告 2.防盗链 |
Content-Type | 告知服务器,请求正文的MIME类型 |
Content-Length | 告知服务器,请求正文的长度 |
User-Agent | 浏览器相关信息 |
Connection:Keep-Alive | 连接状态:保持连接 |
If-Modified-Since | 告知服务器,客户浏览器缓存文件最后修改时间 |
Cookie(***) | 会话管理相关,非常重要 |
2.1.4 请求正文
- 只有post请求方式,才有请求的正文。get方式的正文是在地址栏中的。
- 表单的输入域有name属性的才会被提交。不分get和post的请求方式。
- 表单的enctype属性取值决定了请求正文的体现形式。概述的含义是:请求正文的MIME编码类型
enctype取值 | 请求正文体现形式 | 示例 |
---|---|---|
application/x-www-form-urlencoded | key=value&key=value | username=test&password=1234 |
multipart/form-data | 此时变成了多部分表单数 据。多部分是靠分隔符分 隔的。 | -----------------------------7df23a16c0210 Content-Disposition: form-data; name=“username” test -----------------------------7df23a16c0210 Content-Disposition: form-data; name=“password” 1234 -----------------------------7df23a16c0210 Content-Disposition: form-data; name=“headfile”; filename=“C:\Users\zhy\Desktop\请求部 分.jpg” Content-Type: image/pjpeg -----------------------------7df23a16c0210 |
2.1.5 在浏览其中的示例
2.2 HTTP响应部分详细说明
2.2.1 响应部分的组成
响应行:响应部分的第一行
响应消息头:从响应部分的第二行到第一次空行前结束
空行:回车符换行符
响应体:从第一次空行结束到结尾
2.2.2 响应行详解
1.响应行的格式
2.HTTP版本协议 : 分为1.0和1.1版本
3.响应状态码
状态码 | 描述 |
---|---|
200 | 一切ok |
302/307 | 请求重定向(客户端行为,两次请求,地址栏发生改变) |
304 | 请求资源未发生变化,使用缓存 |
404 | 请求资源未找到 |
500 | 服务器错误 |
2.2.3 响应消息头
消息头 | 描述 |
---|---|
Location | 请求重定向的地址,常与302,307配合使用。 |
Server | 服务器相关信息。 |
Content-Type | 告知客户浏览器,响应正文的MIME类型。 |
Content-Length | 告知客户浏览器,响应正文的长度。 |
Content-Encoding | 告知客户浏览器,响应正文使用的压缩编码格式。常用的gzip压缩。 |
Content-Language | 告知客户浏览器,响应正文的语言。zh_CN或en_US等等。 |
Content-Disposition | 告知客户浏览器,以下载的方式打开响应正文。 |
Refresh | 定时刷新 |
Last-Modified | 服务器资源的最后修改时间。 |
Set-Cookie(***) | 会话管理相关,非常的重要 |
Expires:-1 | 服务器资源到客户浏览器后的缓存时间 |
Catch-Control: no-catch | 不要缓存,//针对http协议1.1版本 |
Pragma:no-catch | 不要缓存,//针对http协议1.0版本 |
2.2.4 响应消息体
就和我们在浏览器源码中看到的一样
<html>
<head>
<link rel="stylesheet" href="css.css" type="text/css">
<script type="text/javascript" src="demo.js"></script>
</head>
<body>
<img src="1.jpg" />
</body>
</html>
3.HTTP总结
HTTP请求
HTTP响应