@1kbfree
2019-05-29T21:13:31.000000Z
字数 3705
阅读 1708
网络协议
HTTP是一种无状态的协议。无状态是指Web浏览器与Web服务器之间不需要建立持久的连接,这意味着当客户端向服务端发送请求,然后Web服务器放回响应,连接就关闭了,在服务端不保留与连接有关的的信息,也就是说HTTP请求只能由客户端发起,服务器不能主动向客户端发送数据。
HTTP遵循发出请求->响应请求的模型,浏览器向服务器发送请求时,服务器处理请求并返回数据给客户端,如图:
<1>.HTTP请求
HTTP请求包括三部分,分别为请求头(消息报头)、请求行(请求方式)和请求正文。下面是一个HTTP请求的一个例子:
这个请求哪里看呢?可以在我们的审查元素中的网络可看,如下图:
POST /index.php HTTP/1.1 # 这是请求行,这里的POST是请求方式。
HOST: www.xxx.xxx # 请求头
User-Agent:Mozilla/5.0 (Windows NT 10.0; …) Gecko/20100101 Firefox/59.0 # 空白行,这个User-Agent是浏览器标识
Name=free&pwd=iamfree # 请求正文
与请求头对应的是HTTP响应,HTTP响应也由三部分内容组成,分别为响应行、响应头(信息报头)和响应正文(消息主题),下面是一个HTTP的响应:
HTTP请求的方法有很多,其中GET、POST是最常用的,我们来列举一下这2个的区别:
GET:
POST:
当客户端发出HTTP请求,服务端接收后,会向客户端发送响应信息,状态码就是服务端返回的数据,比如像这样的:
状态码的类别:
303 See Other 该状态码表示由于请求对应的资源存在另外一个URI,应使用GET方法定向获取请求的资源。 303状态码和302状态码有着相同的功能,但303状态码明确表明客户端应当采用GET方法获取资源。 当301,302,303响应状态码返回时,几乎所有的浏览器都会把POST改成GET,并删除请求报文的主体,之后请求会自动再次发送。 301,302标准是禁止将POST方法改变成GET方法的,但实际上使用时大家都会这么做
304 Not Modified 该状态码表示客户端发送附带条件的请求时,服务器端允许请求访问资源,但未满足条件的情况。304状态码返回时,不包含任何响应的主体部分。304虽然被划分在3XX类别中,但是和重定向没有关系。
307 Temporary Redirect 临时重定向。该状态码与302 Found有着相同的含义。307会遵照浏览器标准,不会从POST变成GET。
400 Bad Request 该状态码表示请求报文中存在语法错误。当错误发生时,需要修改请求的内容后再次放松请求。
401 Unauthorized 该状态码表示发送的请求需要有通过HTTP认证的认证信息,另外若之前已进行过1此请求,则表示用户认证失败。
403 Forbidden 该状态码表明对请求资源的访问被服务器拒绝了。
404 Not Found 该状态码表明服务器上无法找到请求的资源。除此之外,也可以在服务器端拒绝请求且不想说明理由时使用。
500 Internal Server Error 该状态码表明服务器端在执行请求时发生了错误。
503 Service Unavailable 该状态码表明服务器暂时处于超负载或正在进行停机维护,现在无法处理请求
前面只讲了请求头的数据,并没有仔细拆分开来讲,现在我们来看下:
请求头只出现在HTTP请求中,请求报头允许客户端向服务器传递请求的附加信息和客户端自身的信息,讲几个常用的HTTP请求头,如下:
HTTP请求头:
1. HOST:
HOST请求报头域主要用于指定被请求资源的Internet主机好端口号,例如:HOST:www.chengyin.org
2. User-Agent:
请求报头域允许客户端将它的操作系统、浏览器和其他属性告诉服务区,形成了浏览器标识
3. Referer:
Referer包含一个URL,表示用户是从什么地方来到本页面的,比如我们刚刚在www.baidu.com,然后我们访问了www.chengyin.org,那么请求头中就会返回一个Referer:www.baidu.com,表示我们是从百度过来的。
4. Cookie:
Cookie相当是重要的请求头,他用来表示请求者身份,在后面的攻击中,如果攻击者获取了受害者的Cookie,那么攻击者不用输入登录的账号密码,凭借着受害者的Cookie就可以直接登录了。
5. Range:
Range可以请求实体的部分,多线程下载一定会用到此请求。
HTTP响应头:
响应头是服务器根据客户端发送过来的请求来向客户端发送的HTTP头,有点绕。
HTTP实体头:
Content-Type:
用于向接收方指示实体的介质类型。
主要区别: