这次给大家带来的是HTTP协议:从原理到流程的详解

一、HTTP 协议

HTTP 协议(Hypertext Transfer Protocol, 超文本传输协议),是一个客户端请求和回应的 标准协议,这个协议详细规定了浏览器和万维网服务器之间互相通信的规则。用户输入地址 和端口号之后就可以从服务器上取得所需要的网页信息。

通信规则规定了客户端发送给服务器的内容格式,也规定了服务器发送给客户端的内容 格式。客户端发送给服务器的格式叫“请求协议”;服务器发送给客户端的格式叫“响应协议”。

1. 浏览器中的书写格式

在 B/S 体系架构中,客户端都统一成了浏览器,要请求服务器端资源需要通过浏览器进行,此时由浏览器将我们给出的请求解析为满足 HTTP 协议的格式并发出。则我们发出的请求格式需要按照浏览器规定的格式来书写,在浏览器中书写格式如下:

当浏览器获取到信息以后,按照特定格式解析并发送即可。接收到服务器端给出的响应时,也按照 HTTP 协议进行解析获取到各个数据,最后按照特定格式展示给用户。

1. HTTP 协议的主要特点

1.)支持客户/服务器模式。

2.)简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的 有 GET、POST。每种方法规定了客户与服务器联系的类型不同。由于 HTTP 协议简单,使得 HTTP 服务器的程序规模小,因而通信速度很快。

3.)灵活:HTTP 允许传输任意类型的数据对象。正在传输的类型由 Content-Type 加以 标记。

4.)HTTP1.1 支持持续连接。通过这种连接,就有可能在建立一个 TCP 连接后,发送请求并得到回应,然后发送更多的请求并得到更多的回应.通过把建立和释放 TCP 连接的开销分摊到多个请求上,则对于每个请求而言,由于 TCP 而造成的相对开销被大大地降低了。而且, 还可以发送流水线请求,也就是说在发送请求 1 之后的回应到来之前就可以发送请求 2.也可以认为,一次连接发送多个请求,由客户机确认是否关闭连接,而服务器会认为这些请求分别来自不同的客户端。

5.)无状态:HTTP 协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送 的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

2. HTTP之URL

http(超文本传输协议)是一个基于请求与响应模式的、应用层的协议,常基于 TCP 的连接方式,绝大多数的 Web 开发,都是构建在 HTTP 协议之上的 Web 应用。

HTTP URL (URL 是一种特殊类型的 URI,包含了用于查找某个资源的足够的信息)的格式 如下:

http://host[":"port][abs_path]

http://IP(主机名/域名):端口号/访问的资源路径

http 表示要通过 HTTP 协议来定位网络资源;host 表示合法的 Internet 主机域名或 者 IP 地址;port 指定一个端口号,为空则使用缺省端口 80;abs_path 指定请求资源的 URI; 如果 URL 中没有给出 abs_path,那么当它作为请求 URI 时,必须以“/”的形式给出,通常 这个工作浏览器自动帮我们完成。

3. HTTP 请求

http 请求由三部分组成,分别是:请求行、请求头、请求正文

通过chrome浏览器, F12à Network查看

get(没有请求体)

post

格式

请求行

请求头1

请求头2

请求空行

请求体

请求行以一个方法符号开头,以空格分开,后面跟着请求的 URI 和协议的版本,格式如 下:Method Request-URI HTTP-Version CRLF 其中 Method 表示请求方法;Request-URI 是一个统一资源标识符;HTTP-Version 表示请 求的 HTTP 协议版本;CRLF 表示回车和换行

4. HTTP 响应

在接收和解释请求消息后,服务器返回一个 HTTP 响应消息。HTTP 响应也是由三个部分组成,分别是:状态行、消息报头、响应正文

格式

状态行

响应头1

响应头2

响应空行

响应体

5. 消息头

HTTP 消息由客户端到服务器的请求和服务器到客户端的响应组成。请求消息和响应消 息都是由开始行(对于请求消息,开始行就是请求行,对于响应消息,开始行就是状态行), 消息报头(可选),空行(只有 CRLF 的行),消息正文(可选)组成。

每一个报头域都是由名字+“:”+空格+值组成,消息报头域的名字是大小写无关的。

请求头

请求报头允许客户端向服务器端传递请求的附加信息以及客户端自身的信息。

Refere:该请求头指明请求从哪里来

如果是地址栏中输入地址访问的都没有该请求头 地址栏输入地址,通过请求可以看到,此时多了一个 Referer 的请求头,并且后面的值 为该请求从哪里发出,百度竞价,只能从百度来的才有效果,否则不算;通常用来做统计工作、 防盗链

响应头

响应报头允许服务器传递不能放在状态行中的附加响应信息,以及关于服务器的信息和 对 Request-URI 所标识的资源进行下一步访问的信息。

Location:Location响应报头域用于重定向接受者到一个新的位置。Location响应报头域,常用在更换域名的时候。response.sendRedirect(“http://www.shsxt.com”);

Refresh:自动跳转(单位是秒),可以在页面通过meta标签实现,也可在后台实现。

<meta http-equiv=”refresh” content=”3;url=http://www.shsxt.com

感谢阅读乐字节技术文章,请继续关注乐字节,更多Java技术文章奉上,下篇将给大家带来第一个Servlet 实现的详细介绍。

最新文章

  1. Function.prototype.call 和 Function.prototype.apply 的区别
  2. 【09-14】eclipse学习笔记
  3. 【Java EE 学习 46】【Hibernate学习第三天】【多对多关系映射】
  4. 在Gradle中使用jaxb的xjc插件
  5. AC日记——加密的病历单 openjudge 1.7 12
  6. DB2用一张表更新其他表的数据
  7. oauth2.0了解
  8. brackets快捷键使用
  9. JavaScript对象就是一组属性(方法)的集合
  10. jdk分析之String
  11. DF学Mysql(一)——数据库基本操作
  12. 进程,线程(thread)
  13. Unity NGUI中Anchor的用法
  14. POJ 1300 Door Man - from lanshui_Yang
  15. java基础:数组查询,同一数组一个元素最多出现两次
  16. ubuntu-17.10 安装 FANN
  17. 进程与fork()、wait()、exec函数组
  18. pwn入门题x2
  19. python-变量、if else语句 、for循环、while循环(4月26号)
  20. linux定时任务调度定系统——opencron

热门文章

  1. SparkSQL读写外部数据源-jext文件和table数据源的读写
  2. 51nod1423 最大二“货”
  3. My journey introducing the data build tool (dbt) in project’s analytical stacks
  4. UVA 12299 RMQ with shifts
  5. spark集成kerberos
  6. rancher2.x的安装
  7. K8S API对象
  8. 从0开始部署GPU集群-0:基本情况
  9. go 练习:HTTP 处理
  10. html 获取项目根路径