理解HTTP协议

概述

在如今的互联网中,应用层的协议中重要的也是很容易理解的莫非Web的HTTP协议了,它叫做超文本传输协议(HyperText Transfer Protocol)。现在我将从HTTP协议的概念,特性,重要知识点和学习中常见的困惑问题来介绍HTTP协议。

一.理解什么是HTTP协议

1.HTTP协议是用于从万维网服务器传送超文本到本地浏览器的传送协议。
2.HTTP协议是基于TCP/IP通信协议来传递数据的应用层协议,它不关心数据传输的细3.节,主要用来规定客户端和服务器的数据传输格式。默认端口为80。
HTTP协议是基于C/S客户端-服务器架构模型,通过一个可靠的连接来交换信息,是无状态的请求响应协议。

二.HTTP协议的特点

1.HTTP协议是无状态的
就是说每次请求都是独立的,任何两个请求都没有关系,但是在实际中并不是这样的,现实中用Cookie和Session技术来实现请求的关联。
2.多次HTTP请求
在客户端请求网页的很多时候并不是都可以一次性请求成功的,在服务器响应HTML页面后,浏览器在收到服务器的响应后,发现HTML页面还引用的其他资源,比如有CSS,JS文件和图片等等,这时会自动发起HTTP请求,先在的HTTP版本增加了管道机制,可以同时实现请求多个请求和响应多个请求,提高了效率。
3.基于TCP协议
HTTP负责的是客户端和服务器的数据交换的格式和数据交互方式,底层是基于TCP实现具体的数据传输的。现在使用的版本默认是持久连接的,就是多个请求HTTP请求使用一个TCP连接。

三.HTTP报文

1.请求报文
请求报文的格式看下图:
在这里插入图片描述举例:

GET /wxisme HTTP/1.1  
Host: www.cnblogs.com 
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; zh-CN; rv:1.8.1) Gecko/20061010 Firefox/2.0  
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5  
Accept-Language: en-us,zh-cn;q=0.7,zh;q=0.3  
Accept-Encoding: gzip,deflate  
Accept-Charset: gb2312,utf-8;q=0.7,*;q=0.7  
Keep-Alive: 300  
Proxy-Connection: keep-alive  
Cookie: ASP.NET_SessionId=ey5drq45lsomio55hoydzc45
Cache-Control: max-age=0

简单说请求报文就是由开始行(请求行),首部行和实体主体组成,请求行中由请求方法,请求的URL和协议版本,末尾有回车换行,首部行每一行是一个键值对,字段名:值,每行末尾都有回车换行符,在首部行下有一个空行,之后就是实体内容。之后会对请求方法和首部行字段详细解释的。
2.响应报文
响应报文格式如下:
在这里插入图片描述举例:

HTTP/1.1 200 OK
Date: Tue, 12 Jul 2016 21:36:12 GMT
Content-Length: 563
Content-Type: text/html

<html>
    <body>
    Hello http!
    </body>
</html>

响应报文和请求报文最大不同就是开始行,响应报文的开始行由协议版本及状态码以及解释状态码的简单短语组成,后面会详细讲解状态码的。

四.HTTP请求方法

请求方法是告知服务器客户端的动作意图的方法,就像下达命令一样,在HTTP1.1版本中支持GET,POST等10种方法,方法名要大写,下面具体说下每个方法。
1.GET:获取资源
GET请求已经被URI识别的资源,指定了服务器处理请求之后响应的内容。
解释一下URI和URL
URI 属于 URL 更高层次的抽象,一种字符串文本标准。
就是说,URI 属于父类,而 URL 属于 URI 的子类。URL 是 URI 的一个子集。
二者的区别在于,URI 表示请求服务器的路径,定义这么一个资源。而 URL 同时说明要如何访问这个资源(http://)

2.POST:传输实体主体
虽然GET方法也可以用来传输,但是一般不用,GET是获取,POST是传输

3.PUT:传输文件
传输的文件内容包含在请求报文的实体内容中,请求保存在URL指定的服务器位置。

4.HEAD:获得报文首部
HEAD方法类似于GET,但是HEAD不要求返回数据,只返回报文的首部,用来确认URL的有效性以及资源更新时间。

5.DELETE:删除文件
与PUT相反,DELETE要求U返回请求指定的资源

五.HTTP响应状态码

HTTP状态码有60多种,我们就来记住重要的9种吧!
1.200: OK
代表请求被正常处理了,请求成功了。
2.301 : Moved Permanently
代表请求的对象被永久转移了,被分配了新的URL,应该执行新的操作。
3.302:Found
代表请求的对象被分配了新的URL,与301不同的是,这个不是永久的转移,只是临时的。
4.400:Bad Request
表示请求报文中存在语法错误,需要修改后再次发送
5.403:Forbidden
表示请求被拒,没有访问服务器的权限,IP被禁止等。
6.404:Not Found
表示请求的资源在服务器上找不到
7.500 :Internal Server Error
表示服务器在执行请求的时候发生了错误,可能是服务器程序的bug或者临时故障
8.503 : Service Unavailiable
表示服务器此时超负载或者停机维护,不能处理请求
9.504 :Getaway Timeout
网关超时,是代理服务器等待服务器响应时的超时。

六.HTTP的首部字段

HTTP首部字段是构成HTTP报文最重要的元素之一。在客户端与服务端之前进行信息传递的时候请求和响应都会使用首部字段,会传递一些重要的元信息。首部字段是以键值对的形式存在的。包含报文的主体大小、语言、认证信息等。HTTP首部字段包含4种类型:

通用首部字段(General Header Fields)

代表请求报文和响应报文都会使用的字段

请求首部字段(Request Header Fields)

是客户端向服务端发送请求时使用的首部字段。包含请求的附加内容、客户端信息、响应内容相关优先级等信息。

响应首部字段(Response Header Fields

是服务端向客户端返回响应时使用的首部字段,包含响应的附加内容,可能也会要求客户端附加额外的内容信息。

实体首部字段(Entity Header Fields)

是针对请求报文和响应报文的实体部分使用的首部。包含资源内容更新时间等和实体有关的信息。

在HTTP/1.1种规定了47种首部字段(图表参考《图解HTTP》,感谢作者。)

通用首部字段
在这里插入图片描述

请求首部字段
在这里插入图片描述

响应首部字段
在这里插入图片描述

实体首部字段
在这里插入图片描述

七.HTTP常见问题解释

1.GET和POST的区别
A. 从字面意思和HTTP的规范来看,GET用于获取资源信息而POST是用来更新资源信息。

B. GET提交请求的数据实体会放在URL的后面,用?来分割,参数用&连接,举个栗子:/index.html?name=wang&login=1

C. GET提交的数据长度是有限制的,因为URL长度有限制,具体的长度限制视浏览器而定。而POST没有。

D. GET提交的数据不安全,因为参数都会暴露在URL上。

2.408 Request Timeout和504 Gateway Timeout的区别
 408是说请求超时,就是建立连接之后再约定的时间内客户端没有发送请求到客户端到服务端。本质上原因在于客户端或者网络拥塞。504是网关超时,是说代理服务器把客户端请求转发到应用服务器后再约定的时间内没有收到应用服务器的响应。本质上原因在于服务端的响应过慢,也有可能是网络问题。

3.Cookie和Session的区别和联系
Cookie和Session都是为了保存客户端和服务端之间的交互状态,实现机制不同,各有优缺点。首先一个最大的区别就是Cookie是保存在客户端而Session就保存在服务端的。Cookie是客户端请求服务端时服务器会将一些信息以键值对的形式返回给客户端,保存在浏览器中,交互的时候可以加上这些Cookie值。用Cookie就可以方便的做一些缓存。Cookie的缺点是大小和数量都有限制;Cookie是存在客户端的可能被禁用、删除、篡改,是不安全的;Cookie如果很大,每次要请求都要带上,这样就影响了传输效率。Session是基于Cookie来实现的,不同的是Session本身存在于服务端,但是每次传输的时候不会传输数据,只是把代表一个客户端的唯一ID(通常是JSESSIONID)写在客户端的Cookie中,这样每次传输这个ID就可以了。Session的优势就是传输数据量小,比较安全。但是Session也有缺点,就是如果Session不做特殊的处理容易失效、过期、丢失或者Session过多导致服务器内存溢出,并且要实现一个稳定可用安全的分布式Session框架也是有一定复杂度的。在实际使用中就要结合Cookie和Session的优缺点针对不同的问题来设计解决方案。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值