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请求流程基础知识的更多相关文章

  1. 爬虫基础-http请求的基础知识

    百度百科上这么介绍爬虫: 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本. 在开发爬虫时常用的工具:ch ...

  2. Anliven - 基础知识梳理汇总 - 软件测试

    基础知识梳理 - 软件测试 - 概念 基础知识梳理 - 软件测试 - 分类 基础知识梳理 - 软件测试 - 流程 基础知识梳理 - 软件测试 - 用例 基础知识梳理 - 软件测试 - 方法 基础知识梳 ...

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

    今天补一补基础知识: 一.服务器:能够提供服务的机器,取决于机器上安装的软件(服务软件).服务器响应服务请求,并进行处理. Web服务器:提供Web服务,即网站访问.常见Web服务软件:Apache( ...

  4. JAVA基础知识之网络编程——-网络基础(Java的http get和post请求,多线程下载)

    本文主要介绍java.net下为网络编程提供的一些基础包,InetAddress代表一个IP协议对象,可以用来获取IP地址,Host name之类的信息.URL和URLConnect可以用来访问web ...

  5. C语言基础知识-程序流程结构

    C语言基础知识-程序流程结构 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.概述 C语言支持最基本的三种程序运行结构:顺序结构,选择结构,循环结构. 顺序结构:程序按顺序执行, ...

  6. 【转载】salesforce 零基础开发入门学习(二)变量基础知识,集合,表达式,流程控制语句

    salesforce 零基础开发入门学习(二)变量基础知识,集合,表达式,流程控制语句 salesforce如果简单的说可以大概分成两个部分:Apex,VisualForce Page. 其中Apex ...

  7. PHP丨PHP基础知识之流程控制WHILE循环「理论篇」

    昨天讲完FOR循环今天来讲讲他的兄弟WHILE循环!进入正题: while是计算机的一种基本循环模式.当满足条件时进入循环,进入循环后,当条件不满足时,跳出循环.while语句的一般表达式为:whil ...

  8. 053 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 15 流程控制知识总结

    053 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 15 流程控制知识总结 本文知识点: 流程控制知识总结 流程控制知识总结 选择结构语句 循环结构语句 ...

  9. 简单了解HTTP协议的基本知识,请求流程、请求方法等

    HTTP 是Hyper Text Transfer Protocol(超文本传输协议)的缩写 1.超文本传输协议是一种详细规定了浏览器和万维网服务器之间互相通信的规则. 2.HTTP协议(HyperT ...

随机推荐

  1. jmeter之线程组循环次数

    有时候压测需要配置并发的持续时间,这个可以在jmeter中线程组页面进行配置 1.jmeter的循环次数2种使用场景 2.持续时间功能介绍 3.持续时间的使用场景 1.jmeter的循环次数2种使用模 ...

  2. CentOS 7.3 安装MySQL 5.7并修改初始密码

    在CentOS 7.3 下安装MySQL 5.7并修改初始密码,Windows下安装MySQL 5.7 见 http://www.linuxidc.com/Linux/2017-11/148521.h ...

  3. VS2012不显示最近打开的文件

    解决: 1.点击开始,在左下角输入“regedit” 2.右击HKEY_CURRENT_USER,点击查找,输入NoRecentDocsHistory 3.右边找到NoRecentDocsHistor ...

  4. package和import语句_4

    J2SDK中主要的包介绍   java.lang—包含一些Java语言的核心类,如String.Math.Integer.System和 Thread,提供常用功能. java.awt—包含了构成抽象 ...

  5. C++学习笔记(二)--基础

    1.浮点型数值不管写成什么样 都是以指数形式保存在内存中 数符|数字部分|指数部分 例:+0.33E10 数字部分的整数部分不能大于1,小数点后面不能是0. 2.字符数据是以整数形式保存在内存中的(A ...

  6. yum安装时出现No more mirrors to try.

    可能原因:可能是不正常删除造成的 解决方法: yum clean allyum makecacheyum -y update 然后重新安装

  7. Capture pictures using Jpython

    Becuz it is a jpython code, we can use it in Sikuli. from time import strftime, gmtime from java.awt ...

  8. hdu1394 Minimum Inversion Number (线段树求逆序数&&思维)

    题目传送门 Minimum Inversion Number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K ...

  9. dataTable获取所有数据

    "drawCallback": function(settings,e) { var api = new $.fn.dataTable.Api( settings ); resul ...

  10. 33.Jump Game(跳步游戏)

    Level:   Medium 题目描述: Given an array of non-negative integers, you are initially positioned at the f ...