什么是HTTP协议
协议是计算机网络中两台计算机之间进行通信所必须共同准守的规定和准则,超文本传输协议(HTTP)是一种通信协议,允许超文本标记语言(HTML)文档从web服务器传送到客户端浏览器中。
web服务器,浏览器,代理服务器
打开浏览器,在地址栏输入url,可以打开需要的网站,原理如下:
输入url后,浏览器给web服务器发送request请求,服务器接收解析后生成相应的response,然后返回给浏览器,浏览器解析response中的HTML,就可以看到相应的网页
request有可能是经历了代理服务器,才到达服务器,过程入下图:
代理服务器为网络信息的中转站,具体功能入下
1.提高访问速度,大多数代理服务器都有缓存功能
2.突破限制,翻墙
3.隐藏身份
URL详解
url(Uniform Resource Locator)地址用于描述网络上的资源,格式如下:
schema:指定底层使用的协议(eg:http,https,ftp)
host: http服务器的ip地址和域名
port: HTTP服务器的默认端口是80,这种情况下端口号可以省略。如果使用了别的端口,必须指明,例如 http://www.cnblogs.com:8080/
path:访问资源的路径
query-string:发送给http服务的路径
Anchor: 锚
HTTP协议是无状态的
http协议是无状态的,同一个客户端的这次请求和上次请求是没有关系的,对http请求来说,他并不知道这两个请求是来自同一个客户端的,为了解决这个问题,web程序引入cookie机制来维持状态
打开一个网页需要浏览器发送多个request请求
1.在浏览器的输入url:https://mp.csdn.net时,浏览器发送一个request去获取https://mp.csdn.net的HTML,服务器把response发送回给浏览器
2.浏览器分析Response中的 HTML,发现其中引用了很多其他文件,比如图片,CSS文件,JS文件。
3.浏览器会自动再次发送Request去获取图片,CSS文件,或者JS文件。
4.等所有的文件都下载成功后。 网页就被显示出来了。
HTTP消息的结构
Request 消息的结构为三部分:1.Request line,2.Request header,3.body (Request header和body中间有个空行)
第一行中method表示请求方法,eg:‘post’,‘get’;path-to-resource表示请求资源;http/version-number表示协议版本号
当使用的是"GET" 方法的时候, body是为空的
看Response消息的结构, 和Request消息的结构基本一样。 同样也分为三部分,第一部分叫Response line, 第二部分叫Response header,第三部分是body. header和body之间也有个空行。
HTTP/version-number表示HTTP协议的版本号, status-code 和message
get和post方法的区别
http协议定义了很多与服务器交互的方法,最基本的有4种,get,post,put,delete,一个url用于描述网络上的资源,http中的get,post,put,delete对应着这个资源的查,改,增,删4个操作,最常见的为get和post,get用于查询/获取资源信息,post用于更新资源信息
get和post的区别:
1.get提交的数据会放在url之后,以?分割url和传输数据,参数之间以&连接;post是把提交的数据放到http包的body中
2.get提交的数据大小有限制(浏览器对url长度有限制),而post提交的数据没有限制
3.GET方式需要使用Request.QueryString来取得变量的值,而POST方式通过Request.Form来获取变量的值(??)
4.用get方法提交数据,会有安全问题,eg:用get请求登录页面,账号和密码会显示在url上,如果页面可以被缓存或其他人可以访问该电脑,会通过历史记录获得密码和账号
状态码
response消息的第一行叫做状态行,由http协议版本号,状态码,状态消息三部分组成
状态码告诉http客户端(浏览器),http服务器是否达到了预期的response
HTTP/1.1定义了5种状态码:
1XX:提示信息,表示请求被成功接受,继续处理
2XX:成功,表示请求被成功接受,理解,处理
3XX:重定向,要完成请求,必须进行更近一步的处理
4XX:客户端错误,表示请求语法错误或请求无法实现
5XX:服务器端错误,服务器未能实现合法的请求