博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HTTP相关
阅读量:4305 次
发布时间:2019-06-06

本文共 3112 字,大约阅读时间需要 10 分钟。

一、HTTP简介

  • HTTP协议(HyperText Transfer Protocol,超文本传输协议)是因特网上应用最为广泛的一种网络传输协议,所有的WWW文件都必须遵守这个标准。
  • HTTP是基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)
  • HTTP协议通常承载于TCP协议之上,有时也承载于TLS或SSL协议层之上,这个时候,就成了我们常说的HTTPS。如下图 
  • HTTP是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型。HTTP是一个无状态的协议。
  • HTTP默认的端口号为80,HTTPS的端口号为443。

二、HTTP工作流程

  1. 用户在浏览器中键入需要访问网页的URL或者点击某个网页中链接;
  2. 浏览器根据URL中的域名,通过DNS解析出目标网页的IP地址;
浏览器请求这个页面:http://hackr.ip/index.html在这一步,需要域名系统DNS解析域名hackr.ip,得主机的IP地址 20X.189.105.112。然后将上面结合本机自己的信息,封装成一个http请求数据包复制代码
  1. 在HTTP开始工作前,客户端首先会通过TCP/IP协议来和服务端建立链接(TCP三次握手)
  2. 建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可内容。
  3. 服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。
  4. 一般情况下,一旦Web服务器向浏览器发送了请求数据,它就要关闭TCP连接,然后如果浏览器或者服务器在其头信息加入了这行代码: Connection:keep-alive,TCP连接在发送后将仍然保持打开状态,于是,浏览器可以继续通过相同的连接发送请求。保持连接节省了为每个请求建立新连接所需的时间,还节约了网络带宽。 http链接步骤

三、HTTP请求报文

请求报文和响应报文都是由以下4部分组成

1.请求行

2.请求头

3.空行

4.消息主体

请求行:

  • 方法
    • GET 获取资源
    • POST
  • 协议/版本号
  • URL
请求头

通用报头

既可以出现在请求报头,也可以出现在响应报头中

Date:表示消息产生的日期和时间

Connection:允许发送指定连接的选项,例如指定连接是连续的,或者指定“close”选项,通知服务器,在响应完成后,关闭连接

Cache-Control:用于指定缓存指令,缓存指令是单向的(响应中出现的缓存指令在请求中未必会出现),且是独立的(一个消息的缓存指令不会影响另一个消息处理的缓存机制)

 

请求报头

请求报头通知服务器关于客户端求求的信息,典型的请求头有:

Host:请求的主机名,允许多个域名同处一个IP地址,即虚拟主机

User-Agent:发送请求的浏览器类型、操作系统等信息

Accept:客户端可识别的内容类型列表,用于指定客户端接收那些类型的信息

Accept-Encoding:客户端可识别的数据编码

Accept-Language:表示浏览器所支持的语言类型

Connection:允许客户端和服务器指定与请求/响应连接有关的选项,例如这是为Keep-Alive则表示保持连接。

Transfer-Encoding:告知接收端为了保证报文的可靠传输,对报文采用了什么编码方式。

 

响应报头

用于服务器传递自身信息的响应,常见的响应报头:

Location:用于重定向接受者到一个新的位置,常用在更换域名的时候

Server:包含可服务器用来处理请求的系统信息,与User-Agent请求报头是相对应的

 

实体报头

实体报头用来定于被传送资源的信息,既可以用于请求也可用于响应。请求和响应消息都可以传送一个实体,常见的实体报头为:

Content-Type:发送给接收者的实体正文的媒体类型

Content-Lenght:实体正文的长度

Content-Language:描述资源所用的自然语言,没有设置则该选项则认为实体内容将提供给所有的语言阅读

Content-Encoding:实体报头被用作媒体类型的修饰符,它的值指示了已经被应用到实体正文的附加内容的编码,因而要获得Content-Type报头域中所引用的媒体类型,必须采用相应的解码机制。

Last-Modified:实体报头用于指示资源的最后修改日期和时间

Expires:实体报头给出响应过期的日期和时间

空行

http协议规定的格式,一般采用\r\n

消息主体

一般用于http的post method。通过实体报头规定消息主体的格式内容、

例如 Content-Type=text/plain

该实体报头规定了消息主体的数据是纯文本格式

常见的还有

Content-Type=application/x-www-form-urlencoded,定义为Key=value格式

Content-Type=application/json,定义为序列化为的json字符串

Content-Type= multipart/form-data,定义为表单数据提交,该格式比较复杂,详细解释一下。

 

四、HTTP响应报文

4. Http响应报文

HTTP响应组成:响应行、响应头、响应体。

 

http响应

 

响应行    (HTTP/1.1)表明HTTP版本为1.1版本,状态码为200,状态消息为(ok)响应头    Date:生成响应的日期和时间;    Content-Type:指定了MIME类型的HTML(text/html),编码类型是ISO-8859-1响应体复制代码

响应报文拆解:

http响应报文

五、HTTP状态码

类别 原因
1XX Informational(信息性状态码)
2XX Success(成功状态码)
3XX Redirection(重定向)
4XX Client Error(客户端错误状态码)
5XX Server Error(服务器错误状态吗)
 
 
 
 
 
 
 
 
 
 
5.1 2XX 成功
200(OK 客户端发过来的数据被正常处理204(Not Content 正常响应,没有实体206(Partial Content 范围请求,返回部分数据,响应报文中由Content-Range指定实体内容复制代码

5.2 3XX 重定向

301(Moved Permanently) 永久重定向302(Found) 临时重定向,规范要求,方法名不变,但是都会改变303(See Other) 和302类似,但必须用GET方法304(Not Modified) 状态未改变, 配合(If-Match、If-Modified-Since、If-None_Match、If-Range、If-Unmodified-Since)307(Temporary Redirect) 临时重定向,不该改变请求方法复制代码

5.3 4XX 客户端错误

400(Bad Request) 请求报文语法错误401 (unauthorized) 需要认证403(Forbidden) 服务器拒绝访问对应的资源404(Not Found) 服务器上无法找到资源复制代码

5.4 5XX 服务器端错误

500(Internal Server Error)服务器故障503(Service Unavailable) 服务器处于超负载或正在停机维护
 
 
 
 

转载于:https://www.cnblogs.com/kenoalive/p/HTTP.html

你可能感兴趣的文章
Linux(SUSE 12)安装jboss4并实现远程访问
查看>>
Neutron在给虚拟机分配网络时,底层是如何实现的?
查看>>
netfilter/iptables全攻略
查看>>
Overlay之VXLAN架构
查看>>
Eclipse : An error occurred while filtering resources(Maven错误提示)
查看>>
在eclipse上用tomcat部署项目404解决方案
查看>>
web.xml 配置中classpath: 与classpath*:的区别
查看>>
suse如何修改ssh端口为2222?
查看>>
详细理解“>/dev/null 2>&1”
查看>>
suse如何创建定时任务?
查看>>
suse搭建ftp服务器方法
查看>>
centos虚拟机设置共享文件夹并通过我的电脑访问[增加smbd端口修改]
查看>>
文件拷贝(IFileOperation::CopyItem)
查看>>
MapReduce的 Speculative Execution机制
查看>>
大数据学习之路------借助HDP SANDBOX开始学习
查看>>
Hadoop基础学习:基于Hortonworks HDP
查看>>
为什么linux安装程序 都要放到/usr/local目录下
查看>>
Hive安装前扫盲之Derby和Metastore
查看>>
永久修改PATH环境变量的几种办法
查看>>
大数据学习之HDP SANDBOX开始学习
查看>>