HTTP(上)

156 阅读6分钟

这是我参与8月更文挑战的第26天,活动详情查看:8月更文挑战

HTTP(全称:Hyper Text Transfer Protocol,即超文本传输协议 );是一个简单的请求-响应协议,通常运行在TCP协议上。它指定了客户端可能发送给服务端什么样的消息,以及得到什么样的响应。请求和响应消息的头是以ASCII码形式给出的;而消息内容则是以类似MIME的格式给出的

在HTTP传输过程中,客户端总是通过建立一个连接与发送一个HTTP请求来发起一个事务。服务端不能主动与客户端联系,也不能给客户端发出一个回调连接。客户端与服务端都可以提前中断一个连接

HTTP的主要特点

  • 简单快速:客户端向服务端发起请求服务时,只需要传送方法和路径即可。常用的请求方式有GET、HEADPOST。每种方法规定了客户端与服务端联系的类型
  • 灵活:HTTP允许输入任意类型的数据对象。正在传输的类型有Content-Type加以标记
  • 无连接:无连接的含义是限制每次连接只处理一个请求;服务器在处理完客户端的请求并应答后就断开连接
  • 无状态:HTTP是无状态协议。无状态协议是指协议对事务处理没有记忆能力

URI

HTTP使用统一资源标识符URI(即Uniform Resouerce Identifires)来传输数据和建立连接

统一资源定位符URL(Uniform Resource Locator)是一种特殊类型的URI,它包含了用与查找某个资源的足够信息,在互联网上用来标识某一处的地址

就拿一个在GitHub上搜索资源的网络地址进行解析:

https://github.com/search?o=desc&q=go&s=stars&type=Repositories

一个完整的URL的组成包含以下几部分:

  • 协议部分

    上面示例中的协议就是https,表示该网页使用的协议是HTTPS;在internet中可以使用多种协议,如:HTTPHTTPSFTPWS等等

  • 域名部分

    该URL的域名就是https://github.com在URL中,也可以把IP地址作为域名使用

  • 端口部分

    跟在域名后面的便是端口,域名与端口之间使用英文的冒号:隔开。如果省略端口部分,则采用默认端口80,也可以自定义端口部分,比如:https://www.github.com:9090

  • 参数部分

    ?处开始到最后的都是参数,多个参数使用&连接。上面网址示例中,参数就是o=desc&q=go&s=stars&type=Repositories

URL

URL(Uniform Resource Locator,统一资源定义符)用于描述一个网络上的资源。URL是URI的一个子集,是URI概念的一种实现方式。通俗的说,URL是internet上描述信息资源的字符串,主要用在各种www客户端程序和服务器端程序中

URL用一种统一的格式来描述各种信息资源,包括文件、服务器的地址和目录等

URN

URN(Uniform Resource Name,统一资源名)是带有名字的因特网资源。URN是URL的一种更新形式,URN不依赖位置,并且有可能减少失效链接的个数。但是其流行以待时日,因为它需要更精密软件的支持

URI与URL的区别

URI可用来唯一标识一个资源。Web上的所有可用资源,如HTLM、图像、视频、程序等,都是通过一个URI来定位的;

URI一般由三部分组成:

  • 访问资源的命名机制
  • 存放资源的主机名
  • 资源自身的名称,由路径表示,着重抢到资源

URL是一种具体的URI,即URL不仅可以用来标识一个资源,而且还指明了如何定位这个资源。URL是互联网上用来描述信息资源的字符串,主要用在各种WWW客户端程序和服务器程序上。URL可以用一种统一格式来描述各种信息资源,包含文件、服务器的地址和目录等等

URL一般由三部分组成:

  • 协议,又称服务方式
  • 存有该资源的主IP地址,有时也包含端口号
  • 主机资源的具体地址,如目录和文件名等

HTTP请求

客户端发送到服务器端的请求消息由请求行(Reques tLine)、请求头(Request Hander)、请求体(Request Body)组成

请求行

请求行由请求方法、URIHTTP协议/协议版本这三部分组成

在日常网络请求中,最常用的请求方法有两种:GETPOST

在浏览器中输入URL按enter键后,便发起了一个GET请求,请求的参数直接包含在URL中;POST请求大都在提交表单是发送

GET和POST的主要区别:

  • GET请求中的参数包含在URL中,数据可以在URL中看到;而POST请求的URL不包含这些参数,参数都是包含在请求体中
  • 一个GET请求提交的数据最多只有1024byte,而POST则没有限制

常用的请求方法:

请求方法描述
GET请求页面,并返回页面内容
POST向指定资源提交数据(表单或者文件上传)
HEAD类似GET请求,只不过返回的响应体中没有具体的内容,用于获取报头
PUT从客户端型服务端传送的数据取代(覆盖)指定文档(资源)的内容
DELETE请求服务端删除置顶内容
OPTIONS允许客户端查看服务器的性能
CONNECT把服务器当作跳板,让服务器代替客户端访问网页
TRACE显示服务器收到的请求,主要用于测试或诊断

请求头

请求头包含服务器要使用的附加信息,比较重要的信息有CookieRefererUser-Agent等。常用的HTTP请求头信息如下表:

请求头示例说明
AcceptAccept:text/plain,text/html指定客户端能够接受的内容类型
Accept-CharsetAccept-Charset:iso-8859-5浏览器可以接受的字符串编码集
Accept-EncodingAccept-Encoding: gzip, deflate, br指定浏览器可以支持的Web服务器返回内容压缩编码类型
Accept-LanguageAccept-Language: en-US,en;q=0.5浏览器可接受的语言
Accept-RangesAccept-Ranges: bytes用于定义范围请求的单位
AuthorizationAuthorization: Basic YWxhZGRpbjpvcGVuc2VzYW1l用于验证用户代理身份的凭证
Cache-ControlCache-control: no-cache用于在http请求和响应中,通过指定指令来实现缓存机制
ConnectionConnection: keep-alive决定当前的事务完成后,是否会关闭网络连接
CookieCookie: name=value; name2=value2;在发送HTTP请求时,会把保存在该请求域名下的所有cookie值一起发送给Web服务器
Content-LengthContent-Length:512用来指明发送给接收方的消息主体的大小,即用十进制数字表示的八位元组的数目。

请求体

请求体是指HTTP请求中传递数据的实体,常用于POSTPUT等请求体中