美文网首页
HTTP协议(一):HTTP

HTTP协议(一):HTTP

作者: 小小的白菜 | 来源:发表于2018-09-23 21:20 被阅读0次

HTTP 协议,即超文本传输协议( Hypertext transfer protocol )。是一种详细规定了浏览器和万维网( WWW = World Wide Web )服务器之间互相通信的规则,通过因特网传送万维网文档的数据传送协议。

特点

HTTP 协议永远都是客户端发起请求,服务器回送响应。这样就限制了使用 HTTP 协议,无法实现在客户端没有发起请求的时候,服务器将消息推送给客户端。

  • 支持客户端/服务器模式。支持基本的认证和安全认证。

  • 快速简单:客户向服务器请求服务时候,只需要传送请求方法和路径。请求的方法常用的有GETHEADPOST。每种方法规定了客户与服务器联系的类型不同。由于 HTTP 协议简单,使得 HTTP 服务器的程序规模小,因而通信速度很快。

  • 灵活:HTTP 允许传输任意类型的数据对象。正在传输的类型由Content-Type 加以标记。

  • HTTP 0.91.0 使用非持续连接(无连接):限制每次连接只处理一个请求,服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。HTTP 1.1 使用持续连接:不必为每个 web 对象创建一个新的连接,一个连接可以传送多个对象。

  • 无状态:HTTP 协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。

无状态协议

协议的状态指的是下一次传输可以记住这次传输信息的能力。http是不会为了下一次的连接而维护这次连接所传输的信息,为了保证服务器的内存。

比如客户获得一张网页之后关闭浏览器,然后再一次启动浏览器,再登陆该网站,但是服务器并不知道客户关闭了一次浏览器。

由于Web服务器要面对很多浏览器的并发访问,为了提高Web服务器对并发访问的处理能力,在设计HTTP协议时规定Web服务器发送HTTP应答报文和文档时,不保存发出请求的Web浏览器进程的任何状态信息。

这有可能出现一个浏览器在短短几秒之内两次访问同一对象时,服务器进程不会因为已经给它发过应答报文而不接受第二期服务请求。由于Web服务器不保存发送请求的Web浏览器进程的任何信息,因此HTTP协议属于无状态协议(Stateless Protocol)。

HTTP/1.1起,默认都开启了 Keep-Alive,保持连接特性,简单地说,当一个网页打开完成后,客户端和服务器之间用于传输 HTTP 数据的 TCP 连接不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的连接。

Keep-Alive 不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如 Apache)中设定这个时间。

http 的工作流程

  • 首先客户机与服务器需要建立连接。只要输入某个超级链接,http的工作开始。浏览器拿到网址之后首先会将主机名解析出来,如http://www.example.com/hello.html 则会将主机名www.example.com解析出来。根据主机名,会首先查找IP,首先查询hosts文件,成功则返回其对应ip地址,如果没有查询到,则去查询DNS服务器,成功就会返回ip,否则会报告连接错误。

  • 建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可能的内容。

  • 服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。

  • 客户端接收服务器所返回的信息通过浏览器显示在用户的显示屏上,然后客户机与服务器断开连接。

请求信息

  • 请求首部:
    • 请求行:包含请求的方法,请求的URL和请求的HTTP版本;
    • 请求首部字段:从客户端向服务器端发送请求报文是使用的首部。补充说明了请求的附加内容、客户端信息、响应内容优先级等信息;
    • 通用首部字段:请求报文和响应报文都会用到的首部;
    • 实体首部字段:针对请求报文和响应报文实体部分使用的字段。补充说明了资源内容、更新时间等与实体有关的信息;
    • 其他:如set-cookies等非HTTP协议的请求头。
  • 空行:CR+LF由它来划分;
  • 报文主体:应该被发送的数据(并不一定要有报文主体)。
// 请求行:
GET http://www.baidu.com/ HTTP/1.1

// 请求头:
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp;q=0.8
Accept-Encoding:gzip, deflate, sdch, br
Accept-Language:zh-CN,zh;q=0.8
Cache-Control:max-age=0
Connection:keep-alive
Host:www.baidu.com
Upgrade-Insecure-Requests:1
User-Agent:Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.87 Safari/537.36

响应信息

  • 报文首部:
    • 状态行:包含HTTP版本号,响应结果状态码和原因语句;
    • 响应首部字段:从服务器向客户端返回响应豹纹是使用的首部。补充说明了响应的附加内容,也会要求客户端附加额外的内容信息 ;
    • 通用首部字段:请求报文和响应报文都会用到的首部;
    • 实体首部字段:针对请求报文和响应报文实体部分使用的字段。补充说明了资源内容、更新时间等与实体有关的信息;
    • 其他:如set-cookies等非HTTP协议的请求头。
  • 空行:CR+LF由它来划分;
  • 报文主体:应该被发送的数据(并不一定要有报文主体)。
// 响应行:
Http/1.1 200 ok

// 响应头:
BDPAGETYPE:1
BDQID:0xbabd68fc00007703
BDUSERID:0
Cache-Control:private
Connection:keep-alive
Content-Encoding:gzip
Content-Type:text/html; charset=utf-8
Cxy_all:baidu+be175779b859a62a7a28a9afd86882b0
Date:Sat, 19 Nov 2016 06:35:48 GMT
Expires:Sat, 19 Nov 2016 06:35:38 GMT
Server:bfe/1.0.8.18
Set-Cookie:BDSVRTM=15; path=/
Set-Cookie:BD_HOME=0; path=/

请求方法

  • OPTIONS :返回服务器针对特定资源所支持的HTTP请求方法。也可以利用向Web服务器发送'*'的请求来测试服务器的功能性。

  • HEAD: 向服务器索要与GET请求相一致的响应,只不过响应体将不会被返回。这一方法可以在不必传输整个响应内容的情况下,就可以获取包含在响应消息头中的元信息。该方法常用于测试超链接的有效性,是否可以访问,以及最近是否更新。

  • GET :向特定的资源发出请求。注意:GET方法不应当被用于产生“副作用”的操作中,例如在web app中。其中一个原因是GET可能会被网络蜘蛛等随意访问。

  • POST: 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。

  • PUT:向指定资源位置上传其最新内容。

  • DELETE :请求服务器删除Request-URI所标识的资源。

  • TRACE: 回显服务器收到的请求,主要用于测试或诊断。

  • CONNECTHTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。

  • PATCH:用来将局部修改应用于某一资源,添加于规范RFC5789

方法名称是区分大小写的。当某个请求所针对的资源不支持对应的请求方法的时候,服务器应当返回状态码405Method Not Allowed);

当服务器不认识或者不支持对应的请求方法的时候,应当返回状态码501Not Implemented)。

HTTP服务器至少应该实现GETHEAD方法,其他方法都是可选的。此外,除了上述方法,特定的HTTP服务器还能够扩展自定义的方法。

常见响应码

  • 1xx(信息类):表示接收到请求并且继续处理
    100:客户必须继续发出请求;
    101:客户要求服务器根据请求转换HTTP协议版本。

  • 2xx(成功):表示动作被成功接收、理解和接受
    200:表明该请求被成功地完成,所请求的资源发送回客户端;
    201:提示知道新文件的URL
    202:接受和处理、但处理未完成;
    203:返回信息不确定或不完整;
    204:请求收到,但返回信息为空;
    205:服务器完成了请求,用户代理必须复位当前已经浏览过的文件。

  • 3xx(重定向):需要用户代理执行更多的动作
    301:Moved Permanently永久转移(所请求的资源已被指派为新的固定URL);
    302:Found 暂时转移(所请求的资源临时位于另外的URL);
    304:文档没有修改(条件GET);
    307:Temporary Redirect(临时重定向)。

  • 4xx(客户差错):请求包含错误语法或不能正确执行
    400:Bad Request请求错误;
    401:Unauthorized 未认证(该请求要求用户认证);
    403:Forbidden 不明原因的禁止;
    404:Not Found未找到。

  • 5xx(服务端错误类):服务器不能正确执行一个正确的请求
    500:Internal Server Error(服务器错误);
    501:没有实现;
    502:错误的网关(网关或上游服务器来的无效响应);
    503:Service Unavailable(一般是访问人数过多)。

参考文章

关于HTTP协议,一篇就够了
HTTP详解

相关文章

  • HTTP协议(一):HTTP

    HTTP 协议,即超文本传输协议( Hypertext transfer protocol )。是一种详细规定了浏...

  • HTTP协议(一)之HTTP协议详解

    什么是HTTP协议 协议是指计算机通信网络中两台计算机之间进行通信所必须共同遵守的规定或规则,超文本传输协议(HT...

  • 第六个模块 HTTP协议、Restful

    HTTP协议 · HTTP协议 · 工作原理 HTTP协议请求 HTTP协议响应 HTTP协议消息报头 1、普通报...

  • Java----使用nioSocket获取和返回http报文

    参考博客:HTTP协议(一)之HTTP协议详解 HTTP协议 HTTP(HyperText Transfer Pr...

  • 三、Servlet-登陆、跳转、统计

    一、Http协议 HTTP协议:超文本传输协议(HTTP,HyperText Transfer Protocol)...

  • 一、Http协议

    HTTP 的特性 HTTP 协议构建于 TCP/IP 协议之上,是一个应用层协议,默认端口号是 80 HTTP 是...

  • HTTP协议(一)

    说明一点,以下内容整理图解HTTP这本书做的总结 整体介绍分为四个部分第一部分 概括性的介绍HTTP协议第二部分 ...

  • HTTP请求简单总结

    HTTP协议 HTTP协议:超文本传输协议(Hypertext Transfer Protocol) http协议...

  • http协议

    1.http种类 http1.0应该不支持长连接 既然ajax跨域中直接设置请求头是不允许的,那么我们就必须在a...

  • Http协议

    . Http协议 报文语法格式: request报文

网友评论

      本文标题:HTTP协议(一):HTTP

      本文链接:https://www.haomeiwen.com/subject/xalynftx.html