这次给大家带来的是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 实现的详细介绍。

HTTP协议:从原理到流程|乐字节的更多相关文章

  1. 客户端请求服务器端通信, Web 编程发展基础|乐字节

    乐字节的小伙伴们,好久不见,甚是想念啊! 前面我发布的文章算是把Java初级基础阶段讲完了,接下来小乐将会给大家接着讲Java中级阶段——Javaweb. 首先,我们要看看Javaweb阶段主要重点掌 ...

  2. [转]netty对http协议解析原理

    本文主要介绍netty对http协议解析原理,着重讲解keep-alive,gzip,truncked等机制,详细描述了netty如何实现对http解析的高性能. 1 http协议 1.1 描述 标示 ...

  3. netty对http协议解析原理解析

    本文主要介绍netty对http协议解析原理,着重讲解keep-alive,gzip,truncked等机制,详细描述了netty如何实现对http解析的高性能. 1 http协议 1.1 描述 标示 ...

  4. netty对http协议解析原理解析(转载)

    本文主要介绍netty对http协议解析原理,着重讲解keep-alive,gzip,truncked等机制,详细描述了netty如何实现对http解析的高性能. 1 http协议 1.1 描述 标示 ...

  5. 详解FIX协议的原理、消息格式及配置开发

    一.定义 FIX协议是由国际FIX协会组织提供的一个开放式协议,目的是推动国际贸易电子化的进程,在各类参与者之间,包括投资经理.经纪人,买方.卖方建立起实时的电子化通讯协议.FIX协议的目标是把各类证 ...

  6. 说说Java Web中的Web应用程序|乐字节

    大家好,我是乐字节的小乐,今天接着上期文章<Javaweb的概念与C/S.B/S体系结构>继续往下介绍Java Web ,这次要说的是web应用程序. 1. Web 应用程序的工作原理 W ...

  7. Java网络编程探究|乐字节

    大家好,我是乐字节小乐,上次给大家讲述了Java中的IO流之输出流|乐字节,本文将会给大家讲述网络编程. 主要内容如下: 网络 网络分层 IP位置 端口port 网络编程 一. 网络 1.概念 网络即 ...

  8. Web程序的运行原理及流程(一)

    自己做Web程序的开发也有两年多了 从最开始跟风学框架  到第一用上框架的欣喜若狂 我相信每个程序员都是这样过来的 在大学学习一门语言 学会后往往很想做一个实际的项目出来  我当时第一次做WEB项目看 ...

  9. http协议通信原理的问答

    1.dns怎么解析?答:假设一个网站www.tianyik.com的ip是192.168.31.36    浏览器(URL:www.tianyik.com)-->    客户机        h ...

随机推荐

  1. selenium原理解析

    相信很多测试小伙伴儿都听过或者使用过web自动化selenium,那您有没有研究过selenium的原理呢?为什么要使用webdriver.exe,webdriver.exe是干啥用的?seleniu ...

  2. H5利用formData来上传文件(包括图片,doc,pdf等各种格式)方法小结!

    H5页面中我们常需要进行文件上传,那么怎么来实现这个功能呢??? 我主要谈如下两种方法. (一).传统的form表单方法 <form action="/Home/SaveFile1&q ...

  3. git的搭建和使用

    目录: 1.git与github介绍2.下载安装Git-20-64-bit.exe3.Git常用命令 git与github介绍 Git是什么 Git是一个开源的[分布式][版本控制系统],用于敏捷高效 ...

  4. DOM内容梳理2

    JavaScript-DOM2(内容整理) 这两天新的知识有点多有点杂一时半会没有整理过来,以后不出意外会一直更行. js节点类型(NODETYPE) 查看节点类型 nodetype属性,返回的结果会 ...

  5. Uncaught ReferenceError: Invalid left-hand side in assignment

    Uncaught ReferenceError: Invalid left-hand side in assignment 今天在对个人资料页面增加当浏览别的页面之后第二次访问当前页面,之前填写的内容 ...

  6. mysql 获取星期几,dayofweek()函数

    mysql> ; +------------------------+ | dayofweek(curdate())- | +------------------------+ | | +--- ...

  7. 微信小程序 base64格式图片的显示及保存

    当我们拿到如下base64格式的图片(如下图)时, base64格式的图片数据: 如何显示 ? 使用image标签,src属性添加data:image/png;base64, (注意:若imgData ...

  8. 剑指offer:平衡二叉树

    题目描述: 输入一棵二叉树,判断该二叉树是否是平衡二叉树. 思路分析: 首先要明确平衡二叉树的定义.平衡二叉是左右子树的高度差小于等于1,且左右子树都为平衡二叉树.这里就存在一个递归判断左右子树是否为 ...

  9. Service Fabric独立集群搭建

    开篇声明:巨坑,慎入.若实则无奈,建议直接上azure... 1.  开启服务器自动更新,安装最新的补丁. 2.  下载用于 Windows Server 的 Service Fabric 包(htt ...

  10. Nginx location wildcard

    Module ngx_http_core_modulehttps://nginx.org/en/docs/http/ngx_http_core_module.html#location locatio ...