网络编程知识点梳理

1、 你怎么理解HTTP协议?

HTTP协议的特点:
(1)HTTP协议是无状态的
就是说每次HTTP请求都是独立的,任何两个请求之间没有什么必然的联系。但是在实际应用当中并不是完全这样的,引入了Cookie和Session机制来关联请求。
(2)多次HTTP请求
在客户端请求网页时多数情况下并不是一次请求就能成功的,服务端首先是响应HTML页面,然后浏览器收到响应之后发现HTML页面还引用了其他的资源,例如,CSS,JS文件,图片等等,还会自动发送HTTP请求这些需要的资源。现在的HTTP版本支持管道机制,可以同时请求和响应多个请求,大大提高了效率。
(3)基于TCP协议
HTTP协议目的是规定客户端和服务端数据传输的格式和数据交互行为,并不负责数据传输的细节。底层是基于TCP实现的。现在使用的版本当中是默认持久连接的,也就是多次HTTP请求使用一个TCP连接。


HTTP报文
HTTP报文分为请求报文和响应报文
报文由三个部分组成,即开始行、首部行和实体主体
(1)请求报文
请求报文的开始行就是请求行,所以请求报文就是由请求行、请求头、内容实体组成的,注意,每一行的末尾都有回车和换行,在内容实体和请求头之间另有一个空行。其中请求行指定的是请求方法、请求URL、协议版本;请求头是键值对的形式存在的,就是字段名:值;内容实体就是要传输的数据。

来自百度首页的请求报文的例子:
这里写图片描述

请求头中的字段说明:

字段名 说明 例子
请求方法 GET
HTTP版本号 HTTP/1.1
Host 指定请求的服务器的域名和端口号 Host:www.baidu.com
Connection 表示是否需要持久连接(HTTP1.1默认为长连接) Connection:keep-alive(长连接),close(短连接)
Cache-Control 指定请求和响应遵循的缓存机制 Cache-Control:max-age=0 或者 no-cache
User-Agent 发出请求的用户信息(一般是浏览器的信息) User-Agent: Mozilla/5.0 (Linux; X11)
Accept 指定客户端能够接收的内容类型 Accept:text/html
Accept-Encoding 指定浏览器可以支持的web服务器返回内容压缩编码类型 Accept-Encoding:gzip, deflate, br
Accept-Language 浏览器可接受的语言 Accept-Language:zh-CN,zh
Cookie HTTP请求发送时,会把保存在该请求域名下的所有cookie值一起发送给web服务器 Cookie: $Version=1; Skin=new;

(2)响应报文:
响应报文由状态行、响应首部字段(响应头)、响应实体组成,其中第一行是状态行,依次包含HTTP版本,状态码和状态短语组成;在一个回车换行之后是响应头,也是键值对的形式,字段名:值;然后会有一个空行也包含回车换行,之后是响应实体,就是要传输的数据。

来自百度首页的响应报文的例子
这里写图片描述

响应头中的字段说明:

字段名 说明 例子
HTTP版本号 HTTP/1.1
HTTP状态码 200 ok
Cache-Control 告诉所有的缓存机制是否可以缓存那种类型 Cache-Control:private
Connection 表示是否需要持久连接(HTTP1.1默认为长连接) Connection:keep-alive(长连接),close(短连接)
Content-Encoding web服务器支持的返回内容压缩编码类型 Content-Encoding:gzip
Date 原始服务器消息发出的时间 Date: Sat, 05 Aug 2017 12:26:36 GMT
Expires 响应过期的日期和时间 Expires: Sat, 05 Aug 2017 12:26:49 GMT
Server web服务器软件名称 BWS/1.1
Set-Cookie 设置Http Cookie Set-Cookie:BDSVRTM=0;path=/
Vary 告诉下游代理是使用缓存响应还是从原始服务器请求 Vary: Accept-Encoding
Transfer-Encoding 文件传输编码 Transfer-Encoding:chunked

HTTP请求方法
请求方法是客户端用来告知服务器其动作意图的方法。需要注意的是方法名区分大小写,需要用大写字母。
(1)GET:获取资源
向特定的资源发出请求。注意:GET方法不应当被用来产生“副作用”的操作中,例如在we app中的应用,其中一个原因是GET可能会被爬虫等随意访问。
(2)POST:传输实体主体
向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立或对已有资源的修改。POST与GET的区别之一就是目的不同。GET的目的是获取,POST的目的是传输。
(3)PUT:传输主体
PUT方法用来传输文件,向指定资源位置上传其最新内容。类似FTP协议,文件内容包含在请求报文的实体中,然后请求保存到URL指定的服务器位置。
(4)HEAD:获得报文首部
HEAD方法类似GET方法,但是不同的是HEAD方法不要求返回数据(响应体)。这一方法可以在不必传输整个响应内容的情况下,就可以获取包含在响应消息头中的元信息。该方法常用于测试超链接的有效性,是否可以访问,以及最近是否更新等信息。
(5)DELETE:删除文件
DELETE方法用来删除文件,是与PUT相反的方法。DELETE要求服务器删除Request-URI所标识的资源。
(6)OPTIONS:询问支持的方法
因为并不是所有的服务器都支持规定的方法,为了安全有些服务器可能会禁止掉一些方法例如DELETE、PUT等。那么OPTIONS就是用来询问服务器支持的方法。
(7)TRACE:追踪路径
TRACE方法是让Web服务器将之前的请求通信环回给客户端的方法。这个方法并不常用。
(8)CONNECT:要求用隧道协议连接代理
CONNECT方法要求在与代理服务器通信时建立隧道,实现用隧道协议进行TCP通信。主要使用SSL/TLS协议对通信内容加密后传输。

这里写图片描述


HTTP的响应状态码
状态码是用来告知客户端服务器端处理请求的结果。凭借状态码用户可以知道服务器是请求处理成功、失败或者是被转发;这样出现了错误也好定位。状态码是由3位数字加原因短语组成。3位数字中的第一位是用来指定状态的类别。
共有五种如下:
1xx(Informational,信息性状态码):表示接收的请求正在处理
2xx(Success,成功状态码):表示请求正常处理完毕
3xx(Rediretion,重定向状态码):表示需要客户端进行附加操作
4xx(Client Error,客户端错误状态码):表示客户端的错误,服务器无法处理请求。
5xx(Server Error,服务器错误状态码):表示服务器处理请求出错。

常用的几种HTTP状态码(最常用的8种加粗):
200:请求成功,服务器已成功处理了请求
300:多种选择。请求的资源可包括多个位置,相应可返回一个资源特征与地址的列表用于用户终端(例如:浏览器)选择
301(Moved Permanently,永久移动):请求的资源已被永久地移动到新URL,返回信息会包括新的URL,浏览器会自动定向到新URL,今后任何新的请求都应使用新的URL代替。
302(临时移动):资源只是临时被移动,客户端应继续使用原有URL
400(Bad request):客户端请求的语法错误,服务器无法理解
401(Unauthorized):请求需要有通过HTTP认证的认证信息
403(Forbidden):无权限,服务器拒绝提供服务
404(Not Found):没找到资源
408(Request Timeout):表示客户端请求超时
429(Too Many Requests):太多请求。当你需要限制客户端请求某个服务的数量,也就是限制请求速度时,该状态码就会非常有用。在此之前࿰

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值