HTTP协议

来源:互联网 发布:ktv怎么唱歌才好听知乎 编辑:程序博客网 时间:2024/05/17 05:04

HTTP通信模型

这里写图片描述

特点

  • 支持客户/服务器模式
  • 简单快速:客户向服务器请求服务时,只需传送请求方法和路径
  • 灵活:HTTP允许传输任意类型的数据对象
  • 无连接:每次连接只处理一个请求,服务器处理完客户的请求并收到客户的应答后即断开连接
  • 无状态: 对事务的处理没有记忆能力,如果后续处理需要前面的信息则必须重传

URL

统一资源定位符是对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址。互联网上的每个文件都有一个唯一的URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它。

http://www.xxx.com:8080/abc/test.html?username=salute&password=123456#name

  1. 协议部分
    该URL的协议部分为“http:”,这代表网页使用的是HTTP协议。在Internet中可以使用多种协议,如HTTP,FTP等等本例中使用的是HTTP协议。在”HTTP”后面的“//”为分隔符

  2. 域名部分
    该URL的域名部分为“www.xxx.com”。一个URL中,也可以使用IP地址作为域名使用

  3. 端口部分
    跟在域名后面的是端口,域名和端口之间使用“:”作为分隔符。端口不是一个URL必须的部分,如果省略端口部分,将采用默认端口

  4. 虚拟目录部分
    从域名后的第一个“/”开始到最后一个“/”为止,是虚拟目录部分。虚拟目录也不是一个URL必须的部分。本例中的虚拟目录是“/abc/”

  5. 文件名部分
    从域名后的最后一个“/”开始到“?”为止,是文件名部分,如果没有“?”,则是从域名后的最后一个“/”开始到“#”为止,是文件部分,如果没有“?”和“#”,那么从域名后的最后一个“/”开始到结束,都是文件名部分。本例中的文件名是“test.html”。文件名部分也不是一个URL必须的部分,如果省略该部分,则使用默认的文件名

  6. 参数部分
    从“?”开始到“#”为止之间的部分为参数部分,又称搜索部分、查询部分。本例中的参数部分为“username=salute&password=123456”。参数可以允许有多个参数,参数与参数之间用“&”作为分隔符。

  7. 锚部分
    从“#”开始到最后,都是锚部分。本例中的锚部分是“name”。不是一个URL必须的部分


HTTP请求

请求的三部分:请求行,消息报头,请求正文

  • 请求行:由请求方法字段、URL字段和HTTP协议版本字段3个字段组成,它们用空格分隔
  • 消息报头:由关键字/值对组成,每行一对,用:分隔
  • 空行:最后一个消息报头和正文之间是一个空行,GET请求没有正文
  • 请求正文

这里写图片描述

请求方法

GET、HEAD、POST、PUT、DELETE、CONNECT、OPTIONS、TRACE。

  • GET:请求指定的页面信息,并返回实体主体。
  • HEAD:类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头
  • POST:向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。
  • PUT:从客户端向服务器传送的数据取代指定的文档的内容。
  • DELETE:请求服务器删除指定的页面。
  • CONNECT:HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
  • OPTIONS:允许客户端查看服务器的性能。
  • TRACE:回显服务器收到的请求,主要用于测试或诊断。

GET方法

GET方法是HTTP协议中最常见的请求方式,当客户端需要从服务器中读取文档时,往往使用GET方法。GET方法要求服务器URL指定的文档内容。而内容部分,按照HTTP协议规定,放在响应报文的正文部分。由于URL被限制了长度,因此GET方法不适合用于上传数据。同时在浏览器中,通过GET方法来获取网页时,参数会显示在浏览器地址栏上,因此保密性很差。

POST方法

POST方法运行客户端给服务器提供比较多的信息。POST方法将请求参数封装在HTTP请求数据中,而且长度没有限制,因为POST携带的数据,在HTTP的请求正文中。


HTTP响应

HTTP响应由三部分组成,分别是:状态行、消息报头、响应正文。和HTTP请求唯一的区别就是第一行的请求行,变成了状态行。

HTTP/1.1 200 OK                   // 状态行Date: Fri, 22 May 2009 06:07:21 GMT          // 消息报头Content-Type: text/html; charset=UTF-8                                          // 消息报头后必须有空行<html>                                // 响应正文, 服务器给客户端的文本信息      <head></head>      <body>            <!--body goes here-->      </body></html>

HTTP状态码

1xx:表示服务器正在处理
2xx:成功,请求被正确的理解或者处理
3xx:重定向
4xx:客户端错误,客户端的请求,服务器无法理解。
5xx:服务器错误,服务器未能实现的合法请求。

常见状态码
200 OK: 客户端请求成功
400 Bad Request: 请求报文有语法错误
401 Unauthorized: 未授权
403 Forbidden: 服务器拒绝服务
404 Not Found: 请求的资源不存在
500 Internal Server Error: 服务器内部错误
503 Server Unavailable: 服务器临时不能处理客户端请求


HTTP工作原理

  1. 客户端连接到web服务器:

    一个http客户端(浏览器)与web服务器的http端口(80)建立一个TCP套接字连接
  2. 发送http请求:

    通过tcp套接字,客户端向web服务器发送一个文本的请求报文,由请求行、请求头部、空行和请求正文组成
  3. 服务器接受请求并返回http响应:

    web服务器解析请求,找到客户端,将资源复本写回tcp套接字,由状态行,响应头部,空行和响应数据组成
  4. 释放tcp连接:

    若connecttion模式为close则为服务器主动关闭,模式为keepalive则连接会保持一段时间,在这段时间内可以继续进行通信
  5. 客户端解析HTML内容:

    解析状态行,查看是否成功的状态代码。解析相应头,可以理解为协议读取响应数据,根据HTML语法对其格式化显示在浏览器窗口

0 0
原创粉丝点击