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根证书的情况下,中间人攻击一样可行

原文地址:https://www.cnblogs.com/happystudyhuan/p/11261513.html

时间: 2024-10-15 02:22:12

HTTP请求流程基础知识的相关文章

“GIS DICTIONARY A-Z” 查询页面开发(3)—— 基础知识之服务器、IP地址、域名、DNS、端口以及Web程序的访问流程

今天补一补基础知识: 一.服务器:能够提供服务的机器,取决于机器上安装的软件(服务软件).服务器响应服务请求,并进行处理. Web服务器:提供Web服务,即网站访问.常见Web服务软件:Apache(开源).Tomcat(Java).IIS(微软)…… 二.IP:网络之间互连的协议,即为计算机网络相互连接进行通信而设计的协议.IP地址具有唯一性(每台电脑都有一个唯一的IP地址). IP地址就是类似127.0.0.1.27.166.14.101.163.129.1.108一样点与数字的组合. 三.

编程基础知识——Java JNI开发流程(2)

android中使用jni调用本地C++库 android平台上的本地库文件后缀 .so.类似windows上的dll文件. 要在android上使用jni,首先需要下载android ndk. 操作步骤,正常建立android工程,然后在android工程那里右键,属性,选择Android Tools -> Add Native Support.就可以为android工程增加本地库支持. 添加支持后的android工程,会增加jni目录,C++代码就写在这个目录里. 新建一个类,并且使用nat

HTTP 协议的基本知识,包括请求流程、请求方法等

什么是http协议? HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写.它的发展是万维网协会(World Wide Web Consortium)和Internet工作小组IETF(Internet Engineering Task Force)合作的结果,(他们)最终发布了一系列的RFC,RFC 1945定义了HTTP/1.0版本.其中最著名的就是RFC 2616.RFC 2616定义了今天普遍使用的一个版本--HTTP 1.1. 超文本传输协议是一种

3.Swift基础知识

Swift是用来开发iOS和OS X应用的新语言,但是许多地方用起来跟C或者OC是差不多的. Swift提供了C语言和OC的基本数据类型,比如整型用Int,浮点型用Double或者Float,布尔型用Bool,字符串文本用String,Swift还提供了两种集合类型,Array和Dictionary,后面会介绍. Swift也跟C一样用唯一的变量名来存储与使用数据,还能使用一些值不会变的变量,应该说是常量,比C里面的常量要强大.在涉及到一些值不会发生变化的数据时使用常量类型能让代码更安全整洁.

网络基础知识查询

第一章.基础网络概念 1.1 网络是个什么玩意儿 全世界的人种有很多,人类使用的语言种类也多的很.那如果你想要跟外国人沟通时,除了比手划脚之外,你要如何跟对方讲话? 大概只有两种方式啰,一种是强迫他学中文,一种则是我们学他的语言,这样才能沟通啊.在目前世界上的强势语言还是属于英语系国家, 所以啰,不管是啥人种,只要学好英文,那么大家都讲英文,彼此就能够沟通了.希望不久的未来,咱们的中文能够成为强势语言啊! 这个观念延伸到网络上面也是行的通的,全世界的操作系统多的很,不是只有 Windows/Li

selenium自动化基础知识

什么是自动化测试? 自动化测试分为:功能自动化和性能自动化 功能自动化即使用计算机通过编码的方式来替代手工测试,完成一些重复性比较高的测试,解放测试人员的测试压力.同时,如果系统有不份模块更改后,只要通过修改部分代码的方式来覆盖这部分修改的内容,大大提高测试效率.但是后期代码维护需要一定的成本,如果系统属于表单比较多或者经常修改改动的系统不太适合使用自动化,因为这个维护成本太高:针对于一些相对比较成熟(改动不是很频繁)的系统和跑回归测试的系统很适合进行自动化测试. 性能自动化即使用性能测试工具(

转载 前端基础知识体系 一个新手的学习之路

原帖地址:  转载的原因是我学习前端和php已经4个多月了.看看自己还有那些不足.自己得努力学习,牛人太多.红色是我会的,或者学过的.希望今天把大部分飘红. 一.HTML 标签的分类 标签表示一个元素 按性质划分: Block-Level和Inline-Level 按语义划分: Headings: h1, h2, h3, h4, h5, h6 Paragraphs: p Text Formatting: em, strong, sub, del, ins, small Lists: ul, li

考试备战系列--软考--02基础知识复习

这部分主要是计算机基础知识的概念介绍,相关系列文章如下所示. 考试备战系列--软考--01基础架构概念 考试备战系列--软考--02基础知识复习 考试备战系列--软考--03综合知识复习 考试备战系列--软考--04考题收集 考试备战系列--软考--05案例收集 考试备战系列--软考--06论文准备 操作系统时计算机系统的核心系统软件,其他软件均建立在其上,其分类包括:单用户操作系统和批处理操作系统.分时操作系统和实时操作系统.网络操作系统和分布式操作系统.嵌入式操作系统.其4大特征为并发性.共

测试基础知识(白盒测试,黑盒测试,测试用例,功能测试等等)

测试基础知识 找实习工作的过程中总结了下测试基础知识,编程能力重要,测试基础同样重要,希望对大家有帮助 软件测试方法:静态测试和动态测试                     白盒测试和黑盒测试                     传统测试与面向对象测试 软件测试过程:单元测试,集成测试,系统测试,验收测试 按测试类型:功能.性能.界面.易用性测试.兼容性测试.安全性测试.安装测试 (单元测试:在编码过程中,对每个小程序单元测试) (集成测试:将单元集成在一起后,可称为组件) 回归测试.冒