博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HTTP请求响应过程 与HTTPS区别
阅读量:5758 次
发布时间:2019-06-18

本文共 2943 字,大约阅读时间需要 9 分钟。

原文:

HTTP协议学习笔记,基础,干货

HTTP协议

HTTP协议主要应用是在服务器和客户端之间,客户端接受超文本。

服务器按照一定规则,发送到客户端(一般是)的传送通信协议。与之类似的还有文件传送协议(file transfer protocol,FTP)简单邮件传送协议(simple mail ttransfer protocol,SMTP)等。

HTTP在七层网络模型中的应用层的协议,由发送请求和接受响应构成,是一个标准的客户端服务器模型。与此同时,HTTP是一个无状态的协议。也就是说,不能通过一个状态判断连接的状态,因此有时候,计算机之间通信需要通过其他协议来协同工作,一起提供支持。

HTTP协议的工作特点

相对于其他网路传输协议,HTTP有着自己的特点,这也支撑了HTTP协议的基本职能。

(1)基于B/S 模式,即客户/服务器模式。同时可以提供登陆认证和网间安全传输,例如HTTP下加入SSL层,可以提供安全的HTTPS服务

(2)通信开销小,简单快速,传输成本低。服务器请求某些一定的服务时,浏览者通常只需在请求报文中添加请求路径和方法。最一般的情形,例如GETHEADPOST等,这也是我们使用最多的。

每一种请求方法都有自己的适用范围,在请求报文的内部,通过一些规则,说明了用户与Web服务器之间沟通的类型。同时,HTTP协议规则较为简单,因此使用HTTP服务器的系统,代码和程序规模都会比较轻量级,但是通信的速度却效率较高

(3)使用灵活:超文本协议,允许服务器和客户端传输任意类型或者任意数据结构的数据对象。而且,通过一个简单的头信息,例如将正在传输的类型由Content-Type加以标记,于是可以区分开。

(4)节省传输时间:最初版本的HTTP协议使用非持续连接,只允许发送并处理一个连接,当请求响应完成,也就是服务器完成客户端的请求,同时收到了客户端浏览器的应答后,连接会立即断开。有了这种特点,通信方式节省了大量用于数据传输和等待应答的时间,时间成本变得非常小。

同时,高版本HTTP协议,HTTP 1.1支持持续连接:多个对象可以通过一个连接可传送,不需要每次传输一个web对象就去创建一个新的连接

(5)可能影响传输效率,无状态HTTP协议是无状态,如果协议对于事务处理没有记忆的机制,不能存储处理进度,此时,如果后续的操作需要前面的处理信息,就需要重新发送对象即必须重传,这样的后果是,可能多次连接才能完成操作,数据量会因此变大。

HTTP协议的工作原理

通常情况下,HTTP协议的工作原理很好理解,用户通过客户端向服务端发起一个请求,创建一个TCP连接指定端口号,默认是80,然后连接到服务器工作。在那个端口监听浏览器请求。一旦监听到客户端请求,分析请求类型后,服务器会向客户端返回一个响应状态,比如"HTTP/1.0 404 OK"同时会返回特定的数据内容,如请求的资源,错误代码,其它状态信息等等。

HTTP协议的报文格式

HTTP协议的请求报文

当浏览器向服务器发送一个请求到Web服务器,它发送一个数据块,或请求信息,

HTTP请求信息包括3部分:

请求方法URI协议/版本;

请求头(Request Header);

请求正文;

下面是一个HTTP请求的示例:

GET/test.jsp HTTP/1.1Accept:image/test.image/jpeg,*/*Accept-Language:zh-cnConnection:Keep-AliveHost:222.35.232.103User-Agent:Mozila/5.0(compatible;MSIE5.01;Window NT5.0)Accept-Encoding:gzip,deflateusername=bingyue&password=bingyue

  

1)请求方法URI协议/版本

请求的第一行是方法/内容 URL协议/协议版本名称”

GET/test.jsp HTTP/1.1

上面的代码中,“GET”说明请求方法,“/test.jsp”表示网络资源,中间空格,最后说明协议和协议的版本。

根据HTTP标准,HTTP请求可以使用多种不同的请求方法。例如:HTTP1.1允许支持七种请求方法(也叫动作):GETPOSTHEADOPTIONSPUTDELETETARCE日常开发中, GETPOST是最常用的方法,主要在相关的Web开发中

URL路径指定了要访问的网络资源。一般来说,我们需要的是相对路径,因为确定资源位置,知道网络资源相对于服务器的根目录的路径就可以,所以以“/”开头。在头信息结束时,声明了通信过程中HTTP协议版本的使用版本。

需要注意,方法名称很重要的一点是严格区分大小写。有些时候,某个请求所针对的资源可能不支持对应的请求方法,会通过不同的状态码给出响应。例如,服务器将返回一个状态码405(方法不允许),当请求服务器或方法不理解不支持相应的时间,返回一个状态码501(没有实现)

2)请求头(Request Header)

请求头包含了一些客户环境和请求的内容信息。例如,请求头可以声明浏览器内核和语言使用,请求的长度等

Accept:image/test.image/jpeg.*/*Accept-Language:zh-cnConnection:Keep-AliveHost:222.35.232.103User-Agent:Mozila/5.0(compatible:MSIE5.01:Windows NT5.0)Accept-Encoding:gzip,deflate.

3)请求正文

请求正文和请求头要有空行。这个空行必须存在,说明结束请求头传输,开始传输正文请求。请求正文中一般包含很多信息,例如用户提交的用户名和密码之类的登陆信息:userlogin=bingyue&currentpwd=bingyue

在真实应用中,协议的请求正文可以包含大量的信息,而不是如示例HTTP

求中一样,请求正文只有简单的一行数据。

HTTP协议的响应报文

和请求报文类似,HTTP响应主要也是3个部分构成:

(1)协议状态版本代码描述

(2)响应头(Response Header)

(3)响应正文

下面是一个HTTP响应的示例:

HTTP/1.1 200 OKServer:Apache Tomcat/7.0.1Date:Mon,6Oct2014 13:23:42 GMTContent-Length:102HTTP响应文件</head>这是HTTP响应文件!

客户端向服务器发送请求,和请求报文类似,服务器会以状态行响应。

响应报文包括:HTTP协议的版本、结果编码以及其他的必要信息,如实体信息等。响应类别不同,响应报文里可以包含或者不含实体内容。

HTTP响应报文的首先是以状态行开始,这些可以参考示例的代码。

响应头也就是报文首部,和请求头首部一样,包含重要的信息,例子中我们可以看到,比如日期时间和服务器类型以及内容长度和数量等。

 

更详细的说明:

 

转载地址:http://oepkx.baihongyu.com/

你可能感兴趣的文章
TensorFlow系列专题(六):实战项目Mnist手写数据集识别
查看>>
JS中this的4种绑定规则
查看>>
Netty Pipeline源码分析(2)
查看>>
@Transient注解输出空间位置属性
查看>>
Ansible-playbook 条件判断when、pause(学习笔记二十三)
查看>>
开发者报 | Github造假产业链曝光,花钱就能买Star;黑客又多一个可以偷你密码的方法了...
查看>>
git 相关开发常用
查看>>
编码服务正在步入云端
查看>>
程序员很平凡,但从事着不平凡的工作!
查看>>
MySql——Explain执行计划详解
查看>>
Asp.net Core中SignalR Core预览版的一些新特性前瞻,附源码(消息订阅与发送二进制数据)...
查看>>
socket编程-客户端向服务器发送字符串,传文件
查看>>
Tkonter 组件 —— Button
查看>>
C语言概念总结
查看>>
01python简介
查看>>
python爬虫小结1
查看>>
iOS 设置tableview头部不可以向下拉动..
查看>>
长链剖分
查看>>
洛谷P2672 推销员
查看>>
基于TCP协议的socket通信
查看>>