HTTP请求流程基础知识

Posted happystudyhuan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HTTP请求流程基础知识相关的知识,希望对你有一定的参考价值。

HTTP协议解析

HTTP即超文本传输协议,是一种详细规定了浏览器和万维网服务器之间互相通信的规则,它是万维网交换信息的基础,它允许将html文档从WEB服务器传输到WEB浏览器。

 

URL(统一资源定位符)也被称为网页地址,是互联网标准的地址。

URL的标准格式如下:

    协议://服务器IP【:端口】/路径/【?查询】

浏览器可以发起HTTP请求,也可以借助其他工具发起HTTP请求,例如,linux系统的curl命令

 

HTTP协议目前最新版本是1.1,HTTP是一种无状态的协议。无状态是指WEB浏览器与WEB服务器之间不需要建立持久的连接,这意味着当一个客户端向服务器发出请求,然后WEB服务器返回响应(Response),连接就被关闭了,在服务器端不保留连接的有关信息。也就是说,HTTP请求只能由客户端发起,而服务器不能主动向客户端发送数据。

1.HTTP请求

HTTP请求包括三部分,分别是请求行(请求方法)、请求头(消息报头)和请求正文。

POST/login.php HTTP/1.1      //请求行

HOST:www.test.com        //请求头

User-Agent:Mozilla/5.0(windows NT6.1;rv:15.0)Gecko/20100101 firefox/15.0

                  //空白行,代表请求头结束

Username=admin&password=admin  //请求正文

2.HTTP响应

与HTTP请求对应的是HTTP响应,HTTP响应也由三部分内容组成,分别是响应行、响应头(消息报头)和响应正文(消息主题)。

HTTP/1.1 200 OK            //响应行

Date:Thu,28Feb 2018 01:23:37 GMT //响应头

                    //空白行,代表响应头结束

<html>                 //响应正文或者叫消息主题

 

请求方法(所有方法全为大写)有多种,各个方法的解释如下:

GET :请求Request-URL所标识的资源

POST:在Request-URL所标识的资源后附加新的数据

HEAD:请求获取由Request-URL所标识的资源的响应消息报头

PUT:请求服务器存储一个资源,并用Request-URL作为其标识

DELETE:请求服务器删除Request-URL所标识的资源

TRACE:请求服务器回送收到的请求信息,主要用于测试或诊断

CONNECT:保留将来使用

OPTIONS:请求查询服务器的性能,或者查询与资源相关的选项和需求

 

HTTP状态码:

当客户端发起HTTP请求,服务器端接收后,会向客户端发送响应信息,其中,HTTP响应中的第一行中,最重要的一点就是HTTP状态码。

1xx:指示信息--表示请求已接收,继续处理

2xx:成功--表示请求已被成功接收、理解、接受

3xx:重定向--要完成请求必须进行更进一步的操作

4xx:客户端错误--请求有语法错误或请求无法实现

5xx:服务器端错误--服务器未能实现合法的请求

常见状态码、状态描述、说明:

200 OK  //客户端请求成功

400 Bad Request  //客户端请求有语法错误,不能被服务器所理解

401 Unauthorized  //请求未经授权,这个状态码必须和WWW-Authenticate报头域一起使用

403 Forbidden   //服务器收到请求,但是拒绝提供服务

404 Not Found  //请求资源不存在,eg:输入了错误的URL

500 Internal Server Error  //服务器发生不可预期的错误

503 Server Unavailable  //服务器当前不能处理客户端的请求,一段时间后可能恢复正常

 

HTTP消息

HTTP消息又称HTTP头(HTTP header),由四部分组成,分别是请求头、响应头、普通头和实体头。

1>请求头

请求头只出现在HTTP请求中,请求报头允许客户端向服务器端传递请求的附加信息和客户端自身 的信息。常用的HTTP请求头如下:

HOST:主要用于指定被请求资源的Internet主机和端口号,例如:host:www.test.com:8080

User-agent:允许客户端将它的操作系统、浏览器和其他属性告诉服务器

Referer:代表当前访问URL的上一个URL,简单的说,用户是从什么地方来到本页面

Cookie:它是一段文本,常用来表示请求者身份等

Range:多线程下载一定会用到此请求头

X-forward-for:它代表请求端的IP,可以有多个,中间以逗号隔开

Accept:用于指定客户端接收那些MIME类型的信息,如Accept:text/html,表明客户端希望接收html文本

Accept-Charset:用于指定客户端接收的字符集(告诉服务器能够发送哪些字符集)

2>响应头:是服务器根据请求向客户端发送的HTTP头

1.Server:服务器所使用的WEB服务器名称。避免攻击者探测可以修改此头的信息

2.Set-Cookie:向客服端设置Cookie,通过查看此头,可以清楚地看到服务器向客户端发起的Cookie信息

3.Last-Modified:服务器通过这个头告诉浏览器,资源的最后修改时间

4.Location:服务器通过这个头告诉浏览器去访问哪个页面,浏览器接收到这个请求之后,通常会立刻访问Location头所指的页面,这个头通常配合302状态码使用

5.Refresh:服务器通过Refresh头告诉浏览器定时刷新浏览器

3>普通头

在普通报头中,在少数报头域用于所有的请求和响应消息,但并不用于被传输的实体,只用于传输的消息

4>实体头

请求和响应消息都可以传送一个实体。实体头定义了关于实体正文和请求所标识的资源的元信息。元信息也就是实体内容的属性,包括实体信息类型、长度、压缩方法、最后一次修改时间等。常见的实体头如下:

Content-Type:实体报头域用于指明发送者的实体正文的媒体类型

Content-length:实体报头域用于指明实体正文的长度,以字节方式存储的十进制数字来表示

Last-Modified:实体报头域用于指示资源的最后修改日期和时间

 

HTTP协议与HTTPS协议的区别:

HTTPS协议它是以安全为目标的HTTP通道,其实就是HTTP的升级版本,只是它比单纯的HTTP协议更加安全。

HTTPS的安全基础是SSL,既在HTTP下加入SSL层。也就是HTTPS通过安全传输机制进行传送数据,这种机制可保护网络传送的所有数据的隐秘性和完整性,可以降低非入侵性拦截攻击的可能性。

HTTPS和HTTP的区别主要如下

1、https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用

2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议

3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者80,后者443

4、http的连接很简单,是无状态的:HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全

HTTPS的优点

  尽管HTTPS并非并非绝对安全,掌握根证书的机构、掌握加密算法的组织同样可以进行中间人形式的攻击,但HTTPS仍是现行架构下最安全的解决方案,主要有以下几个好处:

  1.使用HTTPS协议可认证用户和服务器,确保数据发送到正确的客户机和服务器

  2.HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全,可防止数据在传输过程中不被窃取、改变,确保数据的完整性

  3.HTTPS是现行架构下最安全的解决方案,虽然不是绝对安全,但它大幅增加了攻击人的成本

  4.谷歌在2014年8月份调整搜索引擎算法,并称“比起同等HTTP网站,采用HTTPS加密的网站在搜索结果中的排名将会更高”

HTTPS的缺点

  虽说HTTPS有很大的优势,但其相对来说,还是存在不足之处的:

  1.HTTPS协议握手阶段比较费时,会时页面的加载时间延长近50%,增加10%到20%的耗电

  2.HTTPS连接缓存不如HTTP高效,会增加数据开销和功耗,甚至已有的安全措施也会因此而受到影响

  3.SSL证书需要钱,功能越强大的证书费用越高,个人网站、小网站没有必要一般不用

  4.SSL证书通常需要绑定IP,不能在同一IP上绑定多个域名,IPv4资源不可能支撑这个消耗

  5.HTTPS协议的加密范围也比较有限,在黑客攻击、拒绝服务攻击、服务器劫持等方面几乎起不到什么作用。最关键的,SSL证书的信用链体系并不安全,特别在某些国家可以控制CA根证书的情况下,中间人攻击一样可行

以上是关于HTTP请求流程基础知识的主要内容,如果未能解决你的问题,请参考以下文章

JavaEE基础(03):Http请求详解,握手挥手流程简介

HTTP基础知识归纳

HTTP基础知识归纳

HTTP请求流程

HTTP基础

Tomcat 基础及配置