HTTP详解

HTTP报文结构
HTTP的两种报文:

请求报文:client向server发送请求报文
响应报文:从server到client的应答

因为HTTP是面向文本的,因此 报文中的每个字段都是ASCII码串,故而每个字段的长度不确定。如上图所示:两种报文都是由三部分组成,两种报文格式的区别就是 开始行的不同。
开始行:用于区分是请求报文还是响应报文。在请求报文的开始行叫做请求行(Requesr-Line),在响应报文中的开始行叫做状态行(Status-Line)。在开始行的三个字段之间使用空格分割开,“CR” 和 “LF” 分别表示回车和换行(编写程序时用 \r\n)
首部行:用来说明 浏览器、服务器或报文主体的一些信息。首部可以有多行,但也可以不使用。在每一个首部行中都有首部字段名和其对应的值,每一行在结束的地方都要有“回车”和“换行。整个首部行结束时,还有一行空行将首部行与后面的实体主体分开。
实体主体:在请求报文中一般不用这个字段,而在响应报文中也可能没有这个字段。
HTTP请求报文
请求报文的第一行"请求行"只有三个内容,即方法、请求资源的URL以及HTTP协议的版本。 方法就是:对所请求的对象进行的操作,这些方法实际上也就是一些命令。因此,请求报文的类型是由它所采用的方法决定的。
如上图(谢老师书中的截图),GET HEAD POST是HTTP1.0最初定义的三种请求方法,其余5种由HTTP1.1所规定。
这部分可以看一下这位老哥的博客:HTTP报文的请求体和方法详解

接下来 我们分析一个完整的HTTP请求报文:

接下来详谈几个常用方法:

GET方法:请求指定的页面信息,并返回实体主体。通常请求server发送某个资源:
HEAD方法:类似于GET请求,只不过返回的响应中没有具体的内容,主要是用来获取报头(只返回首部,不会返回实体的主体部分)。
POST方法:向指定资源提交数据 进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立或已有资源的修改。
TRACE方法:回显server收到的请求,主要用于测试或诊断(或者说用于验证是否如愿穿过了请求/响应链)。注:TRACE请求中不能带有实体的主体部分。如下图所示:TRACE请求会在目的服务器端发起一个“环回”诊断。行程最后一站的服务器会弹会一条TRACE响应,并在响应主体中携带它收到的原始请求报文。
在面试中最常问的方法就是上面的post和get的区别:

方法\区别    目标    安全特性    传输数据大小    字符集
POST方法    向server发送数据    安全高    可传输大量数据,上传文件时只可用POST    支持标准字符集,可传递中文字符
GET方法    从server上获取资源    不安全:URL可见,会泄露信息,如密码等    受URL长度限制,传输数量少但效率较高    只支持ASCII字符,向服务器传的中文字符可能会出现乱码
不安全的原因:GET传输数据是通过URL请求,以field(字段): value的形式,放在URL后,并用"?“进行连接,而多个请求数据间用”&"连接,这个过程我们用户是可见的(所以说GET是不安全的,就是因为URL是可见的,可能会泄露一些重要信息,如密码等)。POST传输数据将字段与对应值封存在请求实体中发送给服务器,这个过程对用户是不可见的。

HTTP响应报文
每一个请求报文发出后都能够收到一个响应报文。响应报文的第一行就是状态行。
其状态行主要包含三部分内容:HTTP版本,状态码以及解释状态码的简单短语。

下面分析一个具体的HTTP响应报文:
这里面重要的就是状态码
常见的状态码有:

200 Accepted{接收}
301 Moved Permanently{永久地转移到其他URL}
302 Found{临时重定向}
400 Bad Request{错误的请求}
404 Not Found{找不到}
500 Internal Server Error{服务器内部错误}
这一部分可以详见这位老哥的博客:HTTP状态码
以及另一位老哥的博客:
巧记HTTP状态码
HTTP状态码由三位数字组成,第一个数字定义了状态码的类型,后两个数字没有分类的作用。状态码共分为5大类:


1**:表示通知信息,如请求收到了 或 正在进行处理
2** :表示成功,如接收 或 知道了
3** :表示重定向,如要完成请求 还必须采取进一步的行动
4** :表示客户的差错,如请求中有错误的语法 或 不能完成
5** :表示服务器的差错,如服务器失效无法完成请求

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值