深入理解http协议--必看
Posted O2O2
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深入理解http协议--必看相关的知识,希望对你有一定的参考价值。
HTTP,我想你已经并不陌生。从大学的第一课,一个简单的理解,到现在的熟悉并能领悟其中精髓,几乎每天都在使用它。
简介
简单理解,http(Hyper Text Transfer Protocol)超文本传输协议。是一个客户端和服务器(C/S)之间通信的协议,或者说是规则。它规定了客户端和服务器之间如何进行通讯。
它是基于tcp/ip协议来传输数据的,包括(文本,图像,音频等)。
详见mime:
http://www.w3school.com.cn/media/media_mimeref.asp
目前版本已经到了HTTP 1.1,但是HTTP 1.0仍被广泛采用。
工作原理
特点
无连接。所谓的无连接就是服务器收到了客户端的请求之后,响应完成并收到客户端的应答之后,即断开连接。限制每次的连接只处理一次请求。从而节省传输时间。
无状态。http协议对事务的处理没有记忆能力。也就意味着如果需要前面的信息,只能重传,这无形之中增加数据的传输量。这种方式某种方面上讲解放了服务器,但是却不利于客户端与服务器的连接。为了弥补这种不足,产生了两项记录http状态的技术,Cookie和Session。
灵活。上面已经提及,它能处理很多的数据类型,通过content-type来指定。详见mime(http://www.w3school.com.cn/media/media_mimeref.asp)。
深入理解各个概念
一个标准的url包括:
协议://用户名:密码@子域名.域名.顶级域名:端口号/目录/文件名.文件后缀?参数=值#标志
协议:包括http,https,ftp,file等等
用户名,密码:指定访问服务器资源的用户名和密码。可以省略
端口号:http默认80端口。可以省略。
目录文件:用于指定要访问的资源路径和名字。可以省略。
参数:用于访问服务器携带的参数信息。可以省略。由?到#结束,多个参数通过&连接。
标志:也成锚,由#开始到url结束。可以省略。用来定位页面元素。
现在看到每个url我想你一定可以明白每个字母的意思了吧。
从网上copy来了一幅图用以说明uri、url、urn三者区别:
uri:只用来唯一标识资源,不进行查找、定位。
url:唯一标识资源,并且规定了如何查找、定位资源。
urn:规定了资源的命名规则。
请求方法
客户端向服务器发送请求一般有7种方法。
get,从服务器获取资源,附加参数放到url种,明文传送。查
post,向服务器发送请求修改资源,附加参数以表单的形式发送到服务器。改
put,向服务器请求增加资源。增
delete,向服务器请求删除资源。删
head,基本和get方法一样,只是不返回消息体。常用来读取返回状态信息。
options,它用于获取url所支持的方法。
trace,极少用到。
常用的就是get和post了。
request--请求头
浏览器进行资源的访问要向服务器发送请求信息,这个请求包括
请求行、请求头、空行、数据。
GET /joson793847469/article/details/52305124 HTTP/1.1
Host: blog.csdn.net Connection: keep-alive Cache-Control: max-age=0 Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (Khtml, like Gecko) Chrome/69.0.3497.92 Safari/537.36 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8Referer: https://www.baidu.com/link?url=e5LB9Gn5DQ7UndJrcqv85-vtmtlqWgAJ8gKwqWhA1tL1AH2oavQp4iZU_DtZLbveJ9QR_ij2-pBUsFyWHG03-wFeSI8vXw8ZiJfEXANAZ_a&wd=&eqid=a9082e6c00028787000000035b9afea8 Accept-Encoding: gzip, deflate, br Accept-Language: zh-CN,zh;q=0.9 Cookie: TY_SESSION_ID=a7abf363-337d-4e37-b9cd-fb1de707869d; uuid_tt_dd=10_20960825680-1536142605919-762034; __yadk_uid=bIabpCD3TktT0ZLcsSlEMph6rVCCbkMy; dc_session_id=10_1536205008436.235554; dc_tos
请求行(request line):
GET /joson793847469/article/details/52305124 HTTP/1.1
包含请求方法,请求的资源和http版本号。
请求头(request header)
包括一些基本的信息:
connection:连接方式
cache-control:缓存控制
referer:来源,从哪里来到当前页面的
user-agent:用户信息,包括浏览器信息,系统内核信息,渲染模式信息等
cookie:在某一特定时间段唯一表示浏览器身份的信息
还有一些基本的信息,包括数据的长度,编码类型等等。基本上见名知义。
空行是必须的。
数据以明文的方式发送到服务器。有些需要base64编码。
在post方法中,还可以添加表单。
response--响应
服务器接受到请求后,会发送响应的信息通知客户端。响应包括:
状态行、报头、空行、消息体
HTTP/1.1 200 OK
Server: openresty Date: Fri, 14 Sep 2018 01:19:01 GMT Content-Type: text/html; charset=UTF-8 Transfer-Encoding: chunked Connection: keep-alive Keep-Alive: timeout=20 Vary: Accept-Encoding Content-Encoding: gzip Strict-Transport-Security: max-age= 31536000
状态行
包括http版本,状态码,状态信息
状态码
1xx:信息响应类,表示接收到请求并且继续处理
2xx:处理成功响应类,表示动作被成功接收、理解和接受
3xx:重定向响应类,为了完成指定的动作,必须接受进一步处理
4xx:客户端错误,客户请求包含语法错误或者是不能正确执行
5xx:服务端错误,服务器不能正确执行一个正确的请求
常见状态码:
200 OK 请求成功(其后是对GET和POST请求的应答文档。)
302 Found所请求的页面已经临时转移至新的url。
400 Bad Request服务器未能理解请求。
403 Forbidden对被请求页面的访问被禁止。
404 Not Found服务器无法找到被请求的页面。
500 Internal Server Error请求未完成。服务器遇到不可预知的情况。
503 Service Unavailable请求未完成。服务器临时过载或宕机。
报头
说明了服务器类型,响应时间,连接方式,数据类型,传输方式,
消息体就是我们所看的页面。
喜欢的赏个赞吧!
以上是关于深入理解http协议--必看的主要内容,如果未能解决你的问题,请参考以下文章