MelodyHub

没有伞的孩子必须努力奔跑!|

概念

  • HTTP == Hyper Text Transfer Protocol
  • 超文本传输协议

传输协议:定义了客户端和服务器端通信时,发送数据的格式

特点

  1. 基于TCP/IP的高级协议

  2. 默认端口号:80

  3. 基于请求/响应模型的:一次请求对应一次响应

  4. 无状态的:每次请求之间相互独立,不能交互数据

  5. 网页中每一个文件都是一次单独的请求,几张图片,就是几次请求。如下图所示。

每一个文件都是一次单独的请求

历史版本

http 0.9

  • 只有一个命令GET
  • 没有HEADER等描述数据的信息
  • 服务器发送完毕,就关闭TCP连接
  • 每一次请求响应都会建立新的连接

http 1.0

  • 增加了很多命令,如status code和header
  • 多字符集支持、多部分发送、权限、缓存等

http 1.1

  • 持久连接:keep-alive
  • 复用连接(较http1.0的每一次请求响应都会建立新的连接。好处:节约了连接的资源,提升了传输的速度。
  • 提高性能的关键是低延迟而不是高带宽。
  • 较http1.0,对缓存的支持更好

推送:主动发送js、css推送到浏览器。

二进制流:可以并行发送数据。

http 2.0

  • 所有数据以二进制传输
  • 同一个连接里面发送多个请求不再需要按顺序来
  • 头消息压缩以及推送等提高效率的功能
  • 所有的请求共用一个连接,可以更有效的使用tcp连接,通过带宽来提升http性能
  • 可以减少服务链接的压力,内存减少了,链接吞吐量大了
  • 解决浏览器连接数有限的问题
  • 资源合并减少请求的优化手段在http2.0来说是没有效果

请求信息数据 格式

  • Servlet类中service()方法的参数ServletRequest
  • 字符串格式,比如:
1
2
3
4
5
6
7
8
9
10
11
POST /login.html	HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Referer: http://localhost/login.html
Connection: keep-alive
Upgrade-Insecure-Requests: 1

username=zhangsan

以下关于 请求信息数据格式 的内容有缺省,详细见下一篇博客 《HTTP请求信息数据 - Request》 中。

请求行

  • 格式:请求方式 请求url 请求协议/版本

请求方式

  • HTTP协议有7种请求协议,常用的有GET、POST两种
  • GET
  1. 请求参数在请求行中,在url后
  2. 请求的url长度有限制的
  3. 不太安全(参数跟在url之后)
  4. 浏览器控制台显示👇

  • POST
  1. 请求参数在请求体中
  2. 请求的url长度没有限制的
  3. 相对安全(参数在请求体中)
  4. 浏览器控制台显示👇

请求url

  • 假设为 /login.html

请求协议/版本

  • HTTP/1.1

请求头

  • 客户端浏览器告诉服务器一些信息
  • 格式:请求头名称 : 请求头值
  • 若有多个,则一行一个

常见的请求头

  • Host

  • User-Agent

  • Referer

Host

  • 请求的主机地址

User-Agent

  • 浏览器告诉服务器,我访问你时候使用的浏览器版本信息
  • 作用:可以在服务器端获取该头的信息,解决浏览器的兼容性问题

Referer

  • 比如上面几张图片的Referer是 http://localhost/login.html
  • 告诉服务器,我(当前请求)从哪里来?
  • 作用:防盗链、统计工作
  • 举个例子:我的网站想播放《战狼2》电影👇

Referer请求头

Connection

  • keep-alive
  • http1.1,表示该链接可以被复用

请求空行

  • 就是一个空行(空白行)
  • 作用:分割POST请求的请求头和请求体

请求体/请求正文

  • 封装POST请求信息的请求参数


下一篇博客 《HTTP请求信息数据 - Request》 中,详细学习了 请求信息数据 - Request

响应信息数据 格式

  • Servlet类中service()方法的参数ServletResponse

  • 字符串数据,比如:

1
2
3
4
5
6
7
8
9
10
11
12
13
HTTP/1.1 200 OK
Content-Type: text/html;charset=UTF-8
Content-Length: 101
Date: Wed, 06 Jun 2018 07:08:42 GMT

<html>
<head>
<title>$Title$</title>
</head>
<body>
hello , response
</body>
</html>

响应行

  • 格式:协议/版本 响应状态码 状态码描述

响应状态码

  • 服务器告诉客户端浏览器本次请求和响应的一个状态。

特点

  • 状态码都是3位数字

分类

  1. 1xx:服务器就收客户端消息,但没有接受完成,等待一段时间后,发送1xx状态码
  2. 2xx:成功。代表:
    • 200
  3. 3xx:重定向。代表:
    • 302:重定向
    • 304:访问缓存
  4. 4xx:客户端错误。代表:
    • 403:错误是一种在网站访问过程中,常见的错误提示,表示资源不可用。服务器理解客户的请求,但拒绝处理它,通常由于服务器上文件或目录的权限设置导致的WEB访问错误。
    • 404:请求路径没有对应的资源
    • 405:请求方式没有对应的doXxx方法
  5. 5xx:服务器端错误。代表:500(服务器内部出现异常)

响应头

  • 格式:响应头名称 :值

常见的响应头

  • Content-Type
  • Content-disposition

Content-Type

  • 服务器告诉客户端本次响应体数据格式以及编码格式

Content-disposition

  • 服务器告诉客户端以什么格式打开响应体数据

  • 其值:

  • in-line:默认值,在当前页面内打开

  • attachment;filename=xxx:以附件形式打开响应体。涉及文件下载等功能。

响应空行

  • 就是一个空行(空白行)
  • 作用:分割响应头和响应体

响应体

  • 传输的数据
  • 文件、HTML网页源码等等。比如,
1
2
3
4
5
6
7
8
<html>
<head>
<title>$Title$</title>
</head>
<body>
hello , response
</body>
</html>

下下篇博客 《HTTP响应信息数据 - Response》 中,详细学习响应信息数据 - Response


 评论


博客内容遵循 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 协议

本站使用 Hexo 作为驱动引擎 , 总浏览量为 次 , 总访客数为
载入天数...载入时分秒...