HTTP总结

HTTP协议简介


超文本传输协议(Hypertext transfer protocol),详细规定了浏览器和万维网(World Wide Web)服务器之间互相通信的规则,是通过因特网传送万维网文档的数据传送协议.它可以使浏览器更加高效,使网络传输减少。它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示(如文本先于图形)等.

HTTP是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型.浏览器作为HTTP客户端通过URL向HTTP服务端(即WEB服务器)发送请求。Web服务器根据接收到的请求后,向客户端发送响应信息。

HTTP协议通常承载于TCP协议之上,有时也承载于TLS或SSL协议层之上,这个时候,就成了我们常说的HTTPS.
 

HTTP的特点


无连接 - 无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
媒体独立 - 这意味着,只要客户端和服务器知道如何处理,任何类型的数据都可以通过HTTP发送。客户端以及服务器指定使用适合的MIME-type内容类型。
无状态 - 无状态是对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,它必须重传,这种情况可能会导致传送的数据量增大。
另一方面,服务器如果不需要先前信息时, 它的应答会较快,效率较高。cookie session
 

HTTP请求报文(Request)


HTTP的请求由请求行(request line)、请求头部(header)、空行和请求数据四个部分组成,如下图:

HTTP响应报文(Response)

 


HTTP响应也由4部分组成,分别是:状态行、响应头、空行和响应体,如下图所示:

 

HTTP状态码


HTTP协议的状态码由3位数字组成,第一个数字定义了响应的类别,共有5中类别:
1xx: 指示信息--表示请求已接收,继续处理 hold on
2xx: 成功--表示请求已被成功接收、理解、接受 here you go
3xx: 重定向--要完成请求必须进行更进一步的操作 go away
4xx: 客户端错误--请求有语法错误或请求无法实现 you fucked up
5xx: 服务器端错误--服务器在处理请求的过程中发生了错误 I fucked up

常见状态码:
200: 请求成功
301: 永久重定向。请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI。今后任何新的请求都应使用新的URI代替
302: 临时重定向。与301类似。但资源只是临时被移动。客户端应继续使用原有URI
403: 服务器理解请求客户端的请求,但是拒绝执行此请求.可能是没有权限访问或是人为设置不允许访问.
404: 需要访问的文件不存在
500: 服务端代码异常,代码语法错误,连接不上数据库等
502: 代理情况下会出现,一般是后端服务器出现问题,如PHP-FPM挂掉 bad gateway
504: 后端服务器响应超时.如PHP-FPM的执行时间大于超时时间就会出现504
 

HTTP请求方法


HTTP/1.0定义了三种请求方法:GET、POST 和 HEAD
HTTP/1.1新增了五种请求方法:OPTIONS、PUT、DELETE、TRACE 和 CONNECT。

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

实际应用过程中,GET和POST使用的比较多
GET请求会把请求的参数拼接在URL后面,以?分隔,多个参数之间用&连接;如果是英文或数字,原样发送,如果是空格或中文,则用Base64编码
POST请求会把提交的数据放在请求体中,不会在URL中显示出来
 

URL


URL(Universal Resource Locator): 统一资源定位符. 用于定位资源.

例如: http://www.qf.com:8080/news/index.asp?boardID=5&ID=24618&page=1#name

一个完整的URL由以下几部分组成:
协议部分: 该URL的协议部分为"http:",这代表网页使用的是HTTP协议."//"为分隔符.
域名部分: 该URL的域名部分为"www.qf.com". 这部分也可以是一个IP地址.
端口部分: 跟在域名后面的是端口,域名和端口之间使用":"作为分隔符.如果省略端口部分,将采用默认端口
虚拟目录部分: 从域名后的第一个"/"开始到最后一个"/"为止,是虚拟目录部分.本例为/news/
文件名部分:从域名后的最后一个"/"开始到"?"为止.如果没有"?",则是从域名后的最后一个"/"开始到"#"为止;如果没有"?"和"#",那么从域名后的最后一个"/"开始到结束,都是文件名部分。本例为"index.asp"
参数部分:从"?"开始到"#"之间的部分,又称搜索部分、查询部分.多个参数,用"&"分隔.本例中的参数部分为"boardID=5&ID=24618&page=1".
锚部分:从"#"开始到最后,都是锚部分.本例中的锚部分是"name".

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值