美文网首页
HTTP协议那些事

HTTP协议那些事

作者: 朽桜 | 来源:发表于2018-07-19 11:43 被阅读4次

简介

超文本传输协议(英文:HyperText Transfer Protocol,缩写:HTTP)是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP是万维网的数据通信的基础。
HTTP是一个客户端终端(用户)和服务器端(网站)请求和应答的标准(TCP)。通常,由HTTP客户端发起一个请求,创建一个到服务器指定端口(默认是80端口)的TCP连接。HTTP服务器则在那个端口监听客户端的请求。一旦收到请求,服务器会向客户端返回一个状态,比如"HTTP/1.1 200 OK",以及返回的内容,如请求的文件、错误消息、或者其它信息。

uri、url和urn

在电脑术语中,统一资源标识符(英语:Uniform Resource Identifier,或URI)是一个用于标识某一互联网资源名称的字符串。 该种标识允许用户对网络中(一般指万维网)的资源通过特定的协议进行交互操作。URI的最常见的形式是统一资源定位符(或称统一资源定位器/定位地址URL地址等,英语:Uniform Resource Locator,常缩写为URL),经常指定为网页地址。更罕见的用法是统一资源名称(英语:Uniform Resource Name,或URN),其目的是通过提供一种途径。用于在特定的名字空间资源的标识,以补充网址。
URI可被视为定位符(URL),名称(URN)或两者兼备。统一资源名(URN)如同一个人的名称,而统一资源定位符(URL)代表一个人的住址。换言之,URN定义某事物的身份,而URL提供查找该事物的方法。

URI-vs.-URL-e1464829000786.png

request和response格式

PUT https://www.jianshu.com HTTP/1.1
Host: www.jianshu.com
Connection: keep-alive
Content-Length: 2207
Accept: application/json
Origin: https://www.jianshu.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36
Content-Type: application/json; charset=UTF-8
Referer: https://www.jianshu.com/writer
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9

{"id":"31073579","autosave_control":142,"title":"HTTP协议相关","content":"-"}

上边是用抓包工具抓到的request请求,request请求分为四个部分:

  1. 请求行(方法、URI、协议/版本)
    上边代码中,第一行代表请求行,“PUT”对应方法,“https://www.jianshu.com”对应URI,“HTTP/1.1”对应协议和版本。
  2. 请求头(Request Header)
    请求头包含许多有关的客户端环境和请求正文的有用信息。例如,请求头可以声明浏览器所用的语言,请求正文的长度等。具体属性参阅HTTP头字段
  3. 空白行
    请求头和请求正文之间是一个空行,这个行非常重要,它表示请求头已经结束,接下来的是请求正文。
  4. 请求正文
    请求正文中可以包含一些参数信息。
HTTP/1.1 200 OK
Date: Thu, 19 Jul 2018 07:17:55 GMT
Server: Tengine
Content-Type: text/html; charset=utf-8
Transfer-Encoding: chunked
X-Frame-Options: ALLOW-FROM http://dig.chouti.com http://k.21cn.com/
X-XSS-Protection: 1; mode=block

4b92

response响应跟request类似,也由四个部分组成,分别是:状态行、消息报头、空行和响应正文。

请求方法

HTTP/1.1协议中共定义了八种方法(也叫“动作”)来以不同方式操作指定的资源:

  • GET
    向指定的资源发出“显示”请求。使用GET方法应该只用在读取数据。
  • HEAD
    与GET方法一样,都是向服务器发出指定资源的请求。只不过服务器将不传回资源的本文部分。它的好处在于,使用这个方法可以在不必传输全部内容的情况下,就可以获取其中“关于该资源的信息”(元信息或称元数据)。
  • POST
    向指定资源提交数据,请求服务器进行处理(例如提交表单或者上传文件)。数据被包含在请求本文中。这个请求可能会创建新的资源或修改现有资源,或二者皆有。
  • PUT
    向指定资源位置上传其最新内容。
  • DELETE
    请求服务器删除Request-URI所标识的资源。
  • TRACE
    回显服务器收到的请求,主要用于测试或诊断。
  • OPTIONS
    这个方法可使服务器传回该资源所支持的所有HTTP请求方法。用'*'来代替资源名称,向Web服务器发送OPTIONS请求,可以测试服务器功能是否正常运作。
  • CONNECT
    HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。通常用于SSL加密服务器的链接(经由非加密的HTTP代理服务器)。

状态码

所有HTTP响应的第一行都是状态行,依次是当前HTTP版本号,3位数字组成的状态代码,以及描述状态的短语,彼此由空格分隔。

状态代码的第一个数字代表当前响应的类型:

  • 1xx消息——请求已被服务器接收,继续处理
  • 2xx成功——请求已成功被服务器接收、理解、并接受
  • 3xx重定向——需要后续操作才能完成这一请求
  • 4xx请求错误——请求含有词法错误或者无法被执行
  • 5xx服务器错误——服务器在处理某个正确请求时发生错误

两点补充

无状态
HTTP 是一种不保存状态,无状态(stateless)协议。HTTP 协议自身不对请求和响应之间的通信状态进行保存。协议本身并不保留之前一切的请求或响应报文的信息。这是为了更快地处理大量事务,确保协议的可伸缩性,而特意把 HTTP 协议设计成如此简单的。
HTTP/1.1 虽然是无状态协议,但为了实现期望的保持状态功能,于是引入了 Cookie 技术。有了 Cookie 再用 HTTP 协议通信,就可以管理状态了。

持久连接
在HTTP 0.9和1.0中,TCP连接在每一次请求/回应对之后关闭。在HTTP 1.1中,引入了保持连接的机制,一个连接可以重复在多个请求/回应使用。持续连接的方式可以大大减少等待时间,因为在发出第一个请求后,双方不需要重新运行TCP交握程序。

参考
https://zh.wikipedia.org/wiki/%E8%B6%85%E6%96%87%E6%9C%AC%E4%BC%A0%E8%BE%93%E5%8D%8F%E8%AE%AE
https://zh.wikipedia.org/wiki/%E7%BB%9F%E4%B8%80%E8%B5%84%E6%BA%90%E6%A0%87%E5%BF%97%E7%AC%A6
https://danielmiessler.com/study/url-uri/
https://www.jianshu.com/p/80e25cb1d81a

相关文章

  • http协议那些事

    1.输入网址后发生了什么2.http协议详解3.https协议分析4.http2协议分析5.了解http36.后台...

  • HTTP协议那些事

    简介 超文本传输协议(英文:HyperText Transfer Protocol,缩写:HTTP)是一种用于分布...

  • http协议那些事

    参考文章:https://yuchengkai.cn/docs/cs/#%E7%8A%B6%E6%80%81%E6...

  • http协议的那些事

    http中的一个请求头让我反思 最近在做一个项目,是基于开源框架搭建的服务器,比如redmine,zabbix,g...

  • http那些事

    1.http报文 HTTP (HypertextTransferProtocol/超文本传输协议) 是应用层级(...

  • HTTP那些事

    网络请求API 在Android上,原生API有两个,HttpUrlConnection和HttpClient,它...

  • HTTP那些事

    前言 很久没碰网络这部分,所以一直感觉很生疏,最近买了本《图解HTTP》,花了几天时间看完了。通俗易懂,读起来非常...

  • 第六个模块 HTTP协议、Restful

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

  • HTTP请求简单总结

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

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

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

网友评论

      本文标题:HTTP协议那些事

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