资讯专栏INFORMATION COLUMN

好好说道下Http协议

array_huang / 461人阅读

摘要:是一种无状态协议。响应空白行代表相应头结束响应正文或者叫消息主题响应行响应的第一行为响应行,其中有版本,状态码以及消息响应头第二行至末尾空白行为响应头,由服务器向客户端发送。这个头通常配合状态码使用。

无状态的Http协议

http协议的最新版本是1.1。是一种无状态协议。

什么是无状态协议?

无状态协议是指web浏览器与web服务器之间不需要建立持久链接。当客户端向服务器端发送请求(Request)时,服务器响应客户端的请求(Response),链接就被关闭了,在服务器端不保留链接的有关信息。也就是说http请求只能由客户端发起服务器端不能主动向客户端发送数据。

不知道大家有没看过《记忆碎片》,这部电影里面的男主角患了罕见的短期记忆丧失症,也就是同一个人,上次一起打过招呼,下次遇上了也不认识。但是他借助于纸跟笔,以及身上的纹身让他去记住一些东西。这好比在我们web开发中的cookiesession。就是因为http得了脸盲症cookiesession才会应运而生。

http请求与响应

http遵循请求(Request)/应答(Response)模型

HTTP请求
POST /login.php HTTP/1.1        //请求行
HOST: www.jiejieyh.cn            //请求头
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36
                                //空白行,代表请求头结束
Username=admin&password=12345    //请求正文
请求行

HTTP请求的第一行即为请求行,请求行有三部分组成

第一部分说明了该请求是POST请求

第二部分说明请求的是该域名根目录下的login.php

第三部分说明使用的HTTP协议版本

请求头

第二行至空白行为HTTP中的请求头

HOST代表请求的主机地址

User-Agent 代表浏览器标识

请求头由客户端自行设定

请求正文

HTTP请求的最后一行为请求正文,请求正文是可选的。最常出现在POST请求方法中。

HTTP响应
HTTP/1.1 200 OK
Date: Wed, 23 Nov 2016 10:18:00 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 83
Connection: keep-alive
Server: Apache
X-Powered-By: PHP/7.0.7
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate
Pragma: no-cache
Vary: Accept-Encoding
Content-Encoding: gzip
Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: Authorization, origin, X-Requested-With, Content-Type, XMLHttpRequest,request-id
Access-Control-Allow-Methods: POST, GET, PUT, DELETE, OPTIONS
//空白行代表相应头结束


                  //响应正文或者叫消息主题
    
...
响应行

HTTP响应的第一行为响应行,其中有HTTP版本,状态码、以及消息“OK”

响应头

第二行至末尾空白行为响应头,由服务器向客户端发送。

响应正文

响应头之后是响应正文,服务器向客户端发送的数据

HTTP请求方法 GET

GET方法用于获取请求页面的指定信息(以实体的格式)

GET /index.php?id=1 HTTP/1.1
HOST: www.jiejieyh.cn
HEAD

使用HEAD方法服务器不能在响应里返回消息主体,其它与GET相同。此方法常用来测试超文本的有效性、可访问性和最近的改变。

攻击者编写扫描工具时,常用此方法,因为只测试资源是否存在,而不用返回消息主体。速度一定是最快的

HEAD /index.php HTTP/1.1
HOST: www.jiejieyh.cn
POST

POST方法与GET方法相似,最大的区别在于GET方法没有请求内容,而POST是有请求内容的。

POST请求最多用于向服务器发送大量的数据。GET虽然也能发送数据,但是有长度限制。

GET请求将发送的数据显式在浏览器端,而POST则不会。安全性相对对对对高一点...

POST /interface/login.php HTTP/1.1
Host: www.jiejieyh.cn
Connection: keep-alive
Content-Length: 63
Accept: application/json, text/javascript, */*; q=0.01
Origin: http://www.jiejieyh.cn
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Referer: http://www.jiejieyh.cn/
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.8

act=kol&userName=admin&passWord=123456&vcode=9614&autoLogin=0
PUT

PUT方法用于请求服务器把请求中的实体存储在请求资源下,如果请求资源已经在服务器中存在则覆盖,不存在将会创建这个资源。数据为请求正文

PUT /input.txt
HOST:www.jiejieyh.cn

12346

这段HTTP PUT请求将会在主机根目录下创建input.txt,内容为123456。不用想,通常情况下通过请求写入文件,服务器都会禁止的。

DELETE

DELETE 方法用于请求源服务器删除指定的资源,服务器一搬会关闭此方法。

TRACE

TRACE方法用于激发一个远程的应用层的请求消息回路。也就是说回显服务器收到的请求。TRACE方法允许客户端去了解数据被请求链的另一端接收的情况,并且利用那些数据信息去测试或诊断,此方法非常少见。

CONNECT

HTTP 1.1协议规范保留了CONNECT方法,用于能动态切换到隧道的代理。

OPTIONS

OPTIONS方法是用于请求获得由URL标识的资源在请求/响应的通信过程中可以使用的功能选项。通过这个方法,客户端可以在采取具体资源请求之前,决定对该资源采取何种必要措施。或者了解服务器的性能。

OPTIONS / HTTP/1.1
HOST:www.jiejieyh.cn

HTTP/1.1 200 OK
Allow:OPTIONS,TRACE,GET,HEAD,POST
Server:Microsoft-IIs/7.5
Public:OPTIONS,TRACE,GET,HEAD,POST
X-Powerd-By:ASP.NET
Content-Length:0
Http状态码

客户端发出请求后,服务器接收处理完成后会 向客户端发送响应信息,其中Http响应中的第一行中,最重要的一点就是Http的状态码

    HTTP/1.1 200 ok

此时的状态码为200,在Http协议中表示请求成功

Http的状态码由3位数字组成,第一位数字定义了响应的类别且有只有以下5种:

1xx:信息提示,表示请求已经被成功接收,继续处理。范围100-101

2xx:成功,服务器成功的处理了请求,范围200-206

3xx:重定向,重定向状态码用于告诉浏览器客户端,它们访问的资源已被移动,并告诉客户端新的资源地址位置。这时浏览器将重新对新资源发起请求。范围300-305

4xx:客户端错误码,有时候客户端会发送一些服务器无法处理的东西,比如格式错误的请求,请求一个不存在的url...其范围是400-415

5xx:客户端发送的请求有效,服务器自身出错了,5xx就是用来描述服务器内部错误的,范围500-505

常见的状态码

200:客户端请求成功

302:重定向

404:请求的资源不存在

401:请求未经授权

500:服务器内部错误

503:服务器当前不能处理客户端的请求,一段时间后可能恢复正常

Http消息

Http消息称为Http头,由4部分组成 请求头、响应头、普通头、实体头。

请求头

请求头只出现在Http请求中,请求报头允许客户端向服务器传递请求的附加信息和客户端自身的信息。

常用的Http请求头

Host:主要用于指定被请求的Internet主机和端口号 HOST:www.jiejieyh.cn:801

User-Agent:请求报头域允许客户端将它的操作系统、浏览器和其它属性告诉服务器 User-Agent:My privacy

Referer:Referer包含一个URL,代表当前访问的URL的上一个URL,也就是说用户是从什么地方来到本页面。
Referer:www.jiejieyh.cn/register.php

Cookie:Cookie是非常重要的请求头,它是一段文本,常用来表示请求者的身份等。

Range可以请求实体的部分内容,多线程下载一定会用到此请求头。例如:

表示头500个字节:bytes=0~499

表示第二个500字节:bytes=500~999

表示最后500字节:bytes=-500

表示500字节以后的范围:bytes=500-

x-forward-for:即XXF头,它代表请求端的IP,可以有多个,中间以逗号隔开

Accept:用于指定客户端接收那些MIME类型的信息,如Accept:text/html,表明客户端希望接收HTML文本。

Accept-Charset:用于指定客户端接收的字符集例如:Accept-Charset:utf-8,gb2312。如果在请求消息中没有设置这个域,默认是任何字符集都可以接收。

响应头

Server:服务器所使用的Web服务器名称,如Server:Apache/1.3.6(Unix),攻击者可以通过此头探测Web服务器名称。建议在服务器端进行修改此头的信息

Set-Cookie:向客户端设置Cookie,通过查看此头可以清楚地看到服务器向客户端发送的Cookie信息

Last-Modified:服务器通过这个头告诉浏览器,资源最后修改时间

Location:服务器通过这个头告诉浏览器去访问哪个页面,浏览器接收到这个响应之后,通常会立刻访问Location头所指向的页面。这个头通常配合302状态码使用。

Refresh:服务器通过Refresh头告诉浏览器定时刷新浏览器

实体头

请求和响应消息都可以传送一个实体头。实体头定义了关于实体正文和请求所标识的资源的元信息。元信息也就是实体内容的属性,包括实体信息类型、长度、压缩方法、最后一次修改时间等。

Content-Type:用于向接收方指定实体的介质类型。

Content-Encoding:用作媒体类型的修饰符,它的值指示了已经被应用到实体正文的附加内容编码,因而要获得Content-Type报头域中所引用的媒体类型,必须采用相应的解码机制。

Content-Length:用于指明实体正文的长度,以字节方式存储的十进制数字来表示。

Last-Modified:用于指示资源的最后修改日期和时间。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/23302.html

相关文章

  • 小哥哥,小姐姐,我有一份tcp、http面试指南你要吗?

    摘要:会通过建立起一个到服务器的连接通道,当本次请求需要的数据完毕后,会立即将连接断开,这个过程是很短的。这三个部分以作为分隔符。最后一个消息头有两个,用来表示消息头部的结束。但是这并不代表建立在协议之上的应用程序就无法维持状态。 来来来 对,我就是骗你进来的。嘿嘿嘿... 既然来了就看看再走嘛 作为一个学通信出身的前端,说道http、tcp什么的,算是到了我的领域了。(我会告诉你我上课净睡...

    GitCafe 评论0 收藏0
  • 1北方更冷的城镇,是你想要的吗?

    摘要:我笑了笑,我得到了我想要的答案。有强烈的个人色彩,无评价标准。对于没有经验的大学生,企业最多考量的就是才干。这些都需要长期的积累,由内而外的自然散发。很多大学毕业生,进入职场后发现实际情况与预想的不太一样。我笑了,你能这么想最好了。 showImg(https://segmentfault.com/img/bV1DoI?w=3500&h=1442); 总有些人有些事似曾相识,我一遍遍的...

    LucasTwilight 评论0 收藏0
  • 1北方更冷的城镇,是你想要的吗?

    摘要:我笑了笑,我得到了我想要的答案。有强烈的个人色彩,无评价标准。对于没有经验的大学生,企业最多考量的就是才干。这些都需要长期的积累,由内而外的自然散发。很多大学毕业生,进入职场后发现实际情况与预想的不太一样。我笑了,你能这么想最好了。 showImg(https://segmentfault.com/img/bV1DoI?w=3500&h=1442); 总有些人有些事似曾相识,我一遍遍的...

    suxier 评论0 收藏0
  • 1北方更冷的城镇,是你想要的吗?

    摘要:我笑了笑,我得到了我想要的答案。有强烈的个人色彩,无评价标准。对于没有经验的大学生,企业最多考量的就是才干。这些都需要长期的积累,由内而外的自然散发。很多大学毕业生,进入职场后发现实际情况与预想的不太一样。我笑了,你能这么想最好了。 showImg(https://segmentfault.com/img/bV1DoI?w=3500&h=1442); 总有些人有些事似曾相识,我一遍遍的...

    K_B_Z 评论0 收藏0
  • 好好聊聊 HTTP 里的 Cookie | 实用 HTTP

    摘要:大多数协议的使用方式,都是依赖设置不同的请求响应的来实现的。再看一个浏览器中,使用的实例。的域,限制请求头传输的域。主要是为了解决协议无状态的问题。依据过期时间进行区分,将类型分为临时和持久。 showImg(https://segmentfault.com/img/remote/1460000015929187); 题图:by Juan Pablo Arenas 一、序 Hi,大家好...

    zhangke3016 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<