http协议

HTTP协议

1. 什么是HTTP协议

超文本传输协议:针对网络上的客户端与服务器端在超文本数据传输时候,遵守的一种规范。
是一种基于TCP/IP的应用层协议,也是目前为止最为流行的应用层协议之一,可以说HTT P协议是万维网的基石。
工作方式:客户端请求服务端应答的模式

2.关于URL

2.1 URL的概念

URL指的是统一资源定位符(Uniform Resource Locator)。是指文件在网络上的地址。是在Internet的WWW服务器上用于指定信息位置的表示方法,它指定了如HTTP或FTP等Internet协议,理论上说,每个有效的URL都指向一个独特的资源。这个资源可以是一个HTML页面,一个CSS文档,一幅图像,等等。

2.2 URL的组成

URL的格式由下列三部分组成:
第一部分是协议(或称为服务方式);
第二部分是存有该资源的主机IP地址(有时也包括端口号);
第三部分是主机资源的具体地址,如目录和文件名等。这一部分也称为URI。
例如:http://www.lab.glasscom.com/dir1/file1.html

2.3 URL文件名的省略情况

(1) http://www.lab.glasscom.com/dir1/
以“/”结束,代表:/dir1/后边的应该有文件名被省略了,这种省略是被允许的,因为在服务器上实现设置好文件名省略时要访问的默认文件名。这个设置根据服务器的不同而不同,大多数情况下是index.html或者default.htm。所以,像前边的文件名被省略时,服务器会访问/dir/index.html或者/dir/default.htm。
(2) http://www.lab.glasscom.com/
这里的URL也是以“/”结尾的,也就是说他要访问一个名为"/"的目录。/是http根目录,但是是一个服务器上的相对根目录,只是一个子目录。而且,由于省略了文件名所以访问/index.html这样的文件就可以了。
(3)http://www.lab.glasscom.com
这次连“/”根目录也省略了,当没有路径名时,访问服务器相对根目录下预先设定好的文件,所以,和(2)一样访问/index.html这样的文件就可以了。

3.HTTP协议的基本思路

HTTP协议定义了客户端和服务端之间的消息内容和步骤,其基本思路如下,首先客户端向服务器发送请求消息,请求消息包括:“对什么”和“进行怎样的操作”两部分。对什么部分称为URI。URI可以是一个存放网页数据的文件,也可以是程序。“进行怎样的操作”也就是方法,他规定了服务器完成怎样的操作。收到请求消息后Web服务器对请求消息进行解析,按照消息中的方法和文件完成工作,并将工作后的结果放在响应消息中,并返回给客户端。响应消息的开头是状态码,表示执行结果是成功还是发生错误。

4.HTTP请求消息

4.1 请求消息的格式:

在这里插入图片描述
(1)请求行:
请求方法: Http定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE。四种方法分别对应着对这个资源的查,改,增,删4个操作。一般当我们访问Web服务器获取网页数据时就使用Get方法,比如在浏览器输入https://www.baidu.com/就会获取百度官网的网页信息,并显示到浏览器的屏幕上。而当我们在表单(网页中的文本框)填写数据并发送给Web服务器就要用到post方法,用于更新数据,比如在淘宝上填写收货地址和姓名,或者在网上做调查问卷时就要用到post方法。
URL:如果是get方法URL表示浏览器要请求的对象,并且get方法会把请求的数据放在url上,其格式为:以?分割URL和传输数据,参数之间以&相连。数据如果是英文字母/数字,原样发送,如果是空格,转换为+,如果是中文/其他字符,则直接把字符串用BASE64加密,及“%”加上“字符串的16进制ASCII码”。post把数据放在HTTP的包体内(requrest body)。
协议版本: 例如 HTTP/1.1
(2)请求头部
消息头部是对请求消息的补充说明,包括一些消息的详细信息,如:日期,客户端支持的数据类型,语言,压缩格式,客户端和服务器的软件名称和版本,数据有效期和最后更新时间等。
(3)请求数据:
这一部分称为消息体,也就是消息的主体,只不过get方法的这部分内容拼接在URL中了,因此get方法没有消息体, post方法有消息体,存放表单中填写的数据。

4.2 GET和POST方法的区别

根据HTTP协议规范,GET方法是用来获取数据的,而POST是用来更新数据的,所以GET方法不需要传递参数,没有消息体, 而POST需要消息体传递参数。但是但在实际的做的时候,很多人却没有按照HTTP规范去做,比如说:很多人贪方便,更新资源时用了GET将参数加到了URL中,因为用POST必须要到FORM(表单),这样会麻烦一点。
(1)POST传递参数没有长度上的限制,而GET传递参数有长度上的限制, 因为GET方法的参数拼接在URL上,(大多数)浏览器通常都会限制url长度在2K,而(大多数)服务器最多处理64K大小的url。超过的部分,恕不处理。
(2)由于URL会被保留在浏览器的历史记录中, 加入注册用户名和密码时用GET方法,那么密码就会在历史记录中获取到。所以GET方法传递参数没有POST方法安全。
(3)GET和POST还有一个重大区别是:GET产生一个TCP数据包,而POST产生两个TCP数据包,第一个发送HTTP消息头,第二个发送消息体,但并不是所有浏览器都会在POST中发送两次包,Firefox就只发送一次。

4.3 HTTP协议版本

HTTP/0.9:
HTTP协议的最初版本,功能简陋,仅支持请求方式GET,且不支持请求头。由于没有协议头,造成了HTTP 0.9协议并且仅能请求访问HTML格式的资源。
HTTP/1.0:
作出的改进:
(1)增加了请求方式POST和HEAD;不再局限于0.9版本的HTML格式,根据Content-Type可以支持多种数据格式。
遗留问题:
1.0版本的工作方式只支持短连接,每次TCP连接只能发送一个请求,当服务器响应后就会关闭这次连接,下一个请求需要再次建立TCP连接。TCP连接的成本很高,每次建立TCP连接需要3次无握手,但是每次连接只能一次请求和响应,这样就大大影响了协议的性能。
HTTP/1.1:
HTTP协议的第三个版本是HTTP 1.1,是目前使用最广泛的协议版本 。HTTP1.1的改进如下:

(1)1.1 版的最大变化,就是引入了持久连接,即TCP连接默认不关闭,可以被多个请求复用,不用声明Connection: keep-alive。解决了1.0版本的keepalive问题,1.1版本加入了持久连接,一个TCP连接可以允许多个HTTP请求;
客户端和服务器发现对方一段时间没有活动,就可以主动关闭连接。不过,规范的做法是,客户端在最后一个请求时,发送Connection: close,明确要求服务器关闭TCP连接。

(2)加入了管道机制,在同一个TCP连接里,允许多个请求同时发送,增加了并发性,进一步改善了HTTP协议的效率;举例来说,客户端需要请求两个资源。以前的做法是,在同一个TCP连接里面,先发送A请求,然后等待服务器做出回应,收到后再发出B请求。管道机制则是允许浏览器同时发出A请求和B请求,但是服务器还是按照顺序,先回应A请求,完成后再回应B请求。
(3)虽然1.1版允许复用TCP连接,但是同一个TCP连接里面,所有的数据通信是按次序进行的。服务端是按队列顺序处理请求的,服务器只有处理完一个回应,才会进行下一个回应。假如前面的请求处理时间很长,后面就会有许多请求排队等着,这样就造成了“队头阻塞”的问题;
HTTP/2.0:
为了解决1.1版本利用率不高的问题,提出了HTTP/2.0版本。增加双工模式,即不仅客户端能够同时发送多个请求,服务端也能同时处理多个请求,解决了队头堵塞的问题(HTTP2.0使用了多路复用的技术,做到同一个连接并发处理多个请求,而且并发请求的数量比HTTP1.1大了好几个数量级);

5.HTTP响应消息

5.1响应消息格式

在这里插入图片描述

5.1关于状态码:

概念:
HTTP 状态码负责表示客户端 HTTP 请求的返回结果、标记服务器端的处理是否正常、通知出现的错误等工作。
类别:
1xx: 描述信息 接受的请求正在处理
2xx: 成功状态码 请求正常处理完毕
3xx:重定向状态码 你请求的资源在另一个位置,要求客户端重新请求新的位置
4xx:客户端错误状态码 服务器无法处理请求(比如请求资源不存在)
5xx::服务端错误状态码 服务端处理请求出错
常见状态码:
200 OK
表示从客户端发来的请求在服务器端被正常处理了。

204 No Content
代表服务器接收的请求已成功处理,但在返回的响应报文中不含实体的主体部分。另外,也不允许返回任何实体的主体。一般在只需要从客户端向服务器端发送消息,而服务器端不需要向客户端发送新消息内容的情况下使用。

301 Moved Permanently
永久性重定向。表示请求的资源已被分配了新的 URI。以后应使用资源现在所指的 URI。也就是说,如果已经把资源对应的 URI 保存为书签了,这时应该按 Location 首部字段提示的 URI 重新保存。

302 Found
临时性重定向。表示请求的资源已被分配了新的 URI,希望用户(本次)能使用新的 URI 访问。
和 301 Moved Permanently 状态码相似,但 302 Found状态码代表资源不是被永久移动,只是临时性质的。换句话说,已移动的资源对应的 URI 将来还有可能发生改变。

400 Bad Request
表示请求报文中存在语法错误。当错误发生时,需修改请求的内容后再次发送请求。
另外,浏览器会像 200 OK 一样对待该状态码。
404 Not Found
表明服务器上无法找到请求的资源。除此之外,也可以在服务器端拒绝请求且不想说明理由的时候使用。
500 Internal Server Error
表明服务器端在执行请求时发生了错误。也可能是 Web 应用存在的 bug 或某些临时的故障。

6.HTTPS协议:

6.1HTTP和HTTPS协议的区别:

HTTP 协议传输的数据都是未经加密的,即明文的,因此使用 HTTP 协议传输隐私信息不安全。为了保证隐私数据能够加密传输,于是SSL 协议用于对 HTTP 协议传输的数据进行加密,即 HTTPS;SSL协议位于HTTP和TCP之间, HTTP消息生成后需要经过SSL加密后传给TCP去发送。

HTTPS 协议是 HTTP + SSL 协议构建的可进行加密传输、身份认证的网络协议,比 HTTP 更加安全,两者的区别主要有:

HTTPS 需要到 CA 申请证书,一般免费证书较少,因此需要一定费用;
HTTP 是超文本传输信息,信息是明文传输;HTTPS 是具有安全性的 SSL 加密传输协议;
HTTP 和 HTTPS 使用的是完全不同的连接方式,HTTP 默认使用 80 端口,而 HTTPS 默认使用 443 端口;
HTTP 的连接简单,是无状态的;而 HTTPS 是 SSL + HTTP 协议构建的可进行加密传输、身份认证的网络协议,比 HTTP 协议安全(无状态的意思是其数据包的发送、传输和接收都是相互独立的。无连接的意思是指通信双方都不长久的维持对方的任何信息。);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值