HTTP状态码以及常见的请求字段

  • HTTP状态码以及常见的请求字段
    • 1、HTTP 概述和特征
    • 1、HTTP状态码
    • 2、HTTP常见的请求字段
  • 参考

HTTP状态码以及常见的请求字段

1、HTTP 概述和特征

HTTP 概述

  • HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World
    Wide Web )服务器传输超文本到本地浏览器的传送协议。
  • HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。
  • HTTP协议工作于客户端-服务端架构上。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。
  • HTTP默认端口号为80,但是你也可以改为8080或者其他端口。

HTTP 概述

HTTP三点注意事项:

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

以下图表展示了HTTP协议通信流程:

1、HTTP状态码










2、HTTP常见的请求字段

请求报文

GET /search?hl=zh-CN&source=hp&q=domety&aq=f&oq= HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint,
application/msword, application/x-silverlight, application/x-shockwave-flash, */*
Referer: <a href="http://www.google.cn/">http://www.google.cn/</a>
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; TheWorld)
Host: <a href="http://www.google.cn">www.google.cn</a>
Connection: Keep-Alive
Cookie: PREF=ID=80a06da87be9ae3c:U=f7167333e2c3b714:NW=1:TM=1261551909:LM=1261551917:S=ybYcq2wpfefs4V9g;
NID=31=ojj8d-IygaEtSxLgaJmqSjVhCspkviJrB6omjamNrSm8lZhKy_yMfO2M4QMRKcH1g0iQv9u-2hfBW7bUFwVh7pGaRUb0RnHcJU37y-
FxlRugatx63JLv7CWMD6UB_O_r  POST /search HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint,
application/msword, application/x-silverlight, application/x-shockwave-flash, */*
Referer: <a href="http://www.google.cn/">http://www.google.cn/</a>
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; TheWorld)
Host: <a href="http://www.google.cn">www.google.cn</a>
Connection: Keep-Alive
Cookie: PREF=ID=80a06da87be9ae3c:U=f7167333e2c3b714:NW=1:TM=1261551909:LM=1261551917:S=ybYcq2wpfefs4V9g;
NID=31=ojj8d-IygaEtSxLgaJmqSjVhCspkviJrB6omjamNrSm8lZhKy_yMfO2M4QMRKcH1g0iQv9u-2hfBW7bUFwVh7pGaRUb0RnHcJU37y-
FxlRugatx63JLv7CWMD6UB_O_r  hl=zh-CN&source=hp&q=domety

响应报文

HTTP/1.1 200 OK
Date: Sat, 01 Jul 2017 14:51:26 GMT
Server: Apache/2.4.7 (Ubuntu)
Set-Cookie: JSESSIONID=84C993F5E433C4DE9BFBA57150FFC065.ajp13_worker;path=/;HttpOnly
Content-Language: zh-CN
Vary: Accept-Encoding
Content-Encoding: gzip
Content-Length: 7333
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html;charset=UTF-8<html><head><title>title of html.</html></head><body><h1>Hello world!</h1></body></html>

1. Accept
定义:可以接收的返回数据类型。服务端会根据该字段,选择其支持的权重最高的内容形式返回。

示例:
(1)可以是多个值,用逗号隔开,如Accept: application/json, text/plain(2)也可以增加权重,不设置权重则默认为1,如Accept: application/json;q=0.5, text/plain

场景实例:

服务器使用了spring的@ResponseBody注解,并且配置了xml、json的converter,如果此时accept为*/*,则服务器会按自己的逻辑选择converter,可能会返回application/xml格式的数据,如果客户端只能处理json数据,则需要声明为application/json,则服务器会返回json格式的数据。

2. Accept-Encoding
定义:支持的内容编码方式。

示例:
(1)可以是多个值,用逗号隔开,也支持使用q表示权重,其中identify表示不压缩Accept-Encoding: gzip, compress, deflate, identify(2)*表示任意Accept-Encoding: *

作用:告知服务器支持的编码方式,服务器可根据此对数据进行压缩,减少传输时间。

场景实例:
使用nginx服务器部署静态资源,有时候会发现资源文件太大,传输太慢。其实浏览器发起请求时已经带上了Accept-Encoding: gzip, deflate,只要在nginx中开启gzip则可以实现压缩之后再传输。

3. Cache-Control

定义:控制缓存的工作机制。

示例:Cache-Control: no-cache
Cache-Control: max-age=0
Cache-Control: public, no-cache, max-age=0

场景实例:

以nginx部署静态资源为背景

(1)对于希望客户端缓存的文件(强制缓存),可以在nginx.conf中配置expires 30s,这样nginx返回的响应头中就会带上Cache-control: max-age=30,浏览器接收到数据后会缓存起来,并在30秒以内直接使用缓存,30s过后再次请求会向服务器请求校验缓存是否合法,服务器可能返回新的数据或者返回304。

(2)对于希望客户端缓存但每次都要校验是否过期的文件(协商缓存),可以在nginx.conf中配置expires 0s,这样nginx返回的相应头中就会带上Cache-control: max-age=0,浏览器接收到数据后会缓存起来,并在下一次请求时向服务器请求校验缓存是否合法,服务器可能返回新的数据或者返回304。

(3)每次通过在浏览器地址栏输入URL访问资源,浏览器都会自动带上Cache-control: no-cache的头部字段,意味着希望重新从目标服务器获取资源,而不从中间的代理服务器中取缓存资源。

4. If-Modified-Since

定义:校验资源是否在指定时间后修改过

示例:If-Modified-Since: Wed, 10 Oct 2018 08:56:00 GMT

场景实例:

以下两种情况缓存均已过期

(1)上一个响应的头部包含Cache-control: max-age=0时

(2)上一个响应的头部包含Cache-control: max-age=30且30秒已过

需要再发一次请求到服务器校验数据是否被修改,此时请求需要带上If-Modified-Since,值为上一个响应的Last-Modified字段。服务器检查资源是否被修改,如果没有返回304,如果被修改返回新的资源。

5. Connection

定义:
(1)管理持久连接
(2)控制不再给代理的首部字段

示例:Connection: Keep-Alive
Connection: closeConnection: Upgrade
Upgrade: Websocket

场景实例:

(1)由于打开一个网页一般需要从同一个服务上获取多个资源,请求头会默认带上Connection: Keep-Alive,表示重用TCP连接,当获取最后一个资源时,不再需要该TCP连接时,可以带上Connection: close。

(2)Upgrade: Websocket一般与Connection: Upgrade配合使用,只可作用于临接服务器。如果客户端经过Nginx来请求目标服务器,则到达目标服务的请求会没有Upgrade: Websocket的头部字段,于是需要在nginx中配置为该请求加上这两个请求头部字段,才能实现客户端经过Nginx与目标服务器进行websocket通讯。

6. Upgrade

定义:升级为其它协议

示例:Connection: Upgrade
Upgrade: Websocket

场景实例:
(1)客户端发起websocket连接时,会先发起一个HTTP请求,Upgrade字段为websocket,服务器判断支持websocket后返回101,接下来使用websocket协议通讯。

(2)浏览器发起mqtt over websocket连接时,会先发起一个HTTP请求,Upgrade字段为mqttv3.1,服务器判断是否支持该版本的mqtt协议决定是否继续通讯。

7. Content-Length

定义:实体主体的长度,单位为byte。

示例:Content-Length: 1500

场景实例:
由于TCP会产生粘包,无法分割多个HTTP报文,就需要使用头部的Content-Length字段来判断该HTTP请求到哪里结束。当使用分片传输,或者报文经过压缩时,没有此字段。

8. Host

定义:请求的域名

示例:Host: www.baidu.com

场景实例:

通常情况下,一个物理机器会部署了多个服务,我们通过Nginx监听80端口,将不同域名的请求转发到对应服务。当浏览器发送一个HTTP请求时,会向DNS查询IP地址,并把请求发送到该IP地址的指定端口,此时会带上Host字段表明是哪个域名发起的请求,服务器通过请求头中的Host字段来判断应该转发到哪个服务。

9. Origin

定义:请求的来源

示例:Origin: http://localhost

场景实例:

当网页需要提交一个跨域POST请求(Content-Type为application/json),会先发送一个OPTION请求,并且带上头部字段Origin,服务器会检查是否允许该源头提交跨域请求,如果允许,返回200,否则返回403 Forbidden。

10. Referer

定义:请求是从哪个网页发起的

示例:Referer: https://www.baidu.com/

场景实例:

(1)服务器可以通过此字段来统计发起请求的来源

(2)可以通过该字段来判断是否跨站请求,如果是则禁止访问来防止跨站请求伪造,但是由于该字段可能会被篡改,所以不是特别可靠。

11. User-Agent

定义:提供浏览器类型及版本、操作系统及版本、浏览器内核、等信息的标识。

示例:User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.67 Safari/537.36

场景实例:

(1)当我们通过手机端访问网页和通过电脑访问网页,服务器会根据UA来返回不一样的结果来适配不同的客户端/浏览器。

(2)服务器可以根据UA来统计用户使用的客户端/浏览器信息,从而更加注重该类型客户端/浏览器的体验。

(3)服务器可以根据UA来判断请求是否由网络爬虫发出,如果UA的值不是普通的浏览器,则禁止访问。但是,网络爬虫也可以直接伪造UA的值来破解。

参考

1、https://tool.oschina.net/commons?type=5
2、https://blog.csdn.net/lblblblblzdx/article/details/83144945

计算机网络常见面试问题 —— HTTP状态码以及常见的请求字段相关推荐

  1. 常见的HTT相应状态码

    常见的HTT相应状态码 200:请求被正常处理 204:请求被受理但没有资源可以返回 206:客户端只是请求资源的一部分,服务器只对请求的部分资源执行GET方法,相应报文中通过Content-Rang ...

  2. HTTP常见的14种状态码

    HTTP状态码表示客户端HTTP请求的返回结果.标记服务器端的处理是否正常或者是出现的错误,能够根据返回的状态码判断请求是否得到正确的处理很重要. 状态码由3位数字和原因短语组成,例如下图所示: 数字 ...

  3. HTTP常见的三种状态码(400 / 404 / 500)

    HTTP常见的三种状态码(400 / 404 / 500) 1.400-服务器不理解请求的语法 400 是 HTTP 的状态码,主要有两种形式: 1)bad request 意思是 "错误的 ...

  4. 常见的服务器响应状态码

    1. 200:请求响应成功 2. 3xx:请求重定向,服务器返回一个新的URL,客户端重新向这个URL发送请求.此时的状态码是对新请求的响应. 3. 4xx:找不到资源,web应用中没有请求的资源,常 ...

  5. 请求状态码(Http常见状态码总结)

    1XX (信息性状态码)接收的请求正在处理 201-206(成功状态码)服务器成功处理了请求,说明网页可以正常访问. 300-307(重定向状态码)要完成请求,需要进一步进行操作.通常,这些状态代码是 ...

  6. HTTP 协议入门 — (TCP/IP协议族、通信传输流、URI 与 URL 的区别、Cookie 状态管理、HTTP 支持的方法、状态码类别、HTTP 首部字段)

    TCP/IP协议族 在介绍 HTTP 协议之前,我们先对 TCP/IP 协议族有个大概的了解,TCP/IP 协议从上到下主要分为应用层.传输层.网络层和数据链路层,各层的主要功能如下表所示: 协议层 ...

  7. 什么是HTTP状态码?常见HTTP状态码盘点

    转自:微点阅读  https://www.weidianyuedu.com Http状态码是什么? 什么是HTTP状态码? HTTP状态码:这是服务器和客户端之间交流信息的语言. 比如: 当客户端向服 ...

  8. 常见的一些 HTTP状态码 404 502 503

    本文知识点基本来自于维基百科 https://zh.wikipedia.org/wiki/HTTP%E7%8A%B6%E6%80%81%E7%A0%81 这儿也有一些内容https://www.w3. ...

  9. 常见的HTTP网络状态码汇总+HttpServletResponse源码

    常见HTTP网络状态码类型为1-5开头 1XX 表示消息 2XX 表示成功 3XX 表示重定向 4XX 表示客户端请求错误 5XX 表示服务端响应错误 常见HTTP网络状态码 200 OK:表示请求成 ...

最新文章

  1. matlab设置数组输出到文件中,Matlab将元胞数组输出到txt或者dat文件中
  2. iic裸机与linux通信,基于IIC协议的Linux操作系统与裸机通信的方法
  3. include静态加载布局ViewStub动态加载布局
  4. SCI论文写作训练营笔记汇总03_科技论文写作(方法篇)
  5. (三)、dubbo环境的搭建
  6. 在Oracle 数据类型中如何使用dump函数
  7. Atitit mysql 存储kv 以及php js接口目录kv_mysql.js 1Set.php 1Get.php 2CREATE TABLE `cfg` ( `k`
  8. anaconda python命令_怎么用anaconda命令行?
  9. html获取页面input值,javascript怎么获取input中用户输入的内容?
  10. echarts图表的内边距_ECharts 图表插件使用整理(图表配置实现)
  11. 我读“世界500强面试题”
  12. 移动DDN专线及联通SDH专线接入路由器及防火墙配置实例
  13. mysql不停库全量备份,mysql全量备份数据
  14. c语言 close,C++ close()关闭文件方法详解
  15. NOIP2010导弹拦截
  16. DIY手动定制一个属于自己的软件安装管理器工具盘[二]
  17. 打印机驱动的PCL与PS的区别
  18. 使用GerberTools的Gerber Panelizer工具进行gerber文件拼板的方法
  19. 传感器与检测技术基础 复习提纲 考试不挂科专用版
  20. 樱花樱花想见你 (中日歌词+罗马音+音译)

热门文章

  1. 乐高加快中国授权专卖店开店步伐,相继落户烟台、昆明等地 | 知消图集
  2. c# 实现 Server-Sent Events (SSE),服务器单方面消息推送 [案例版]
  3. CI/CD --- 什么才是真正的自动化平台
  4. (CI/CD)介绍和详细的构建过程
  5. 海康服务器远程桌面怎么设置,海康DVR/DVS/NVR远程访问设置-广域网访问设置
  6. 图片高清放大效果怎么做?这三种方法分享给你
  7. 罗汉果甜苷V/益生菌修饰卵清蛋白 Mogroside V/probiotics-OVA
  8. 把HTML5静态网页部署到阿里云服务器
  9. 开年书单来袭,你准备好迎接2020了吗?
  10. Dialog显示加载中