面试一年多,每当我问起面试者对HTTP的了解时,个个回答令我瞠目结舌,这些开发者都有3-5年的经验。请不要让我叫你野生程序员,是时候了解HTTP了,让我们当个正规军。

起因

面试官:请问你了解HTTP协议吗?

前端开发:这不是应该后端清楚的吗?

后端开发:这不是前端知道的吗?

面试官:……

我们先一本正经的来了解下HTTP(不包含传输层TCP),然后总结其中的精华回复面试官。

HTTP协议简介

HTTP(超文本传输协议)是应用层上的一种客户端/服务端模型的通信协议,它由请求和响应构成,且是无状态的。(暂不介绍HTTP2)

  • 协议

协议规定了通信双方必须遵循的数据传输格式,这样通信双方按照约定的格式才能准确的通信。

  • 无状态

无状态是指两次连接通信之间是没有任何关系的,每次都是一个新的连接,服务端不会记录前后的请求信息。

  • 客户端/服务端模型

五层网络模型

URL构成

用了这么久,你注意过吗?

协议内容

请求(Request)

客户端发送一个HTTP请求到服务端的格式:

  • 请求行
  • 请求头
  • 请求体

响应(Response)

服务端响应客户端格式:

  • 状态行
  • 响应头
  • 响应体

状态码

HTTP状态码由三个十进制数字组成,第一个十进制数字定义了状态码的类型,后两个数字没有分类的作用。HTTP状态码共分为5种类型:

更详细的状态码可查看 HTTP状态码

但一般我们只需要知道几个常见的就行,比如 200,400,401,403,404,500,502.

请求方法

截止到HTTP1.1共有下面几种方法:

请求和响应常见通用头

注意

Content-Type,内容类型,一般是指网页中存在的Content-Type,用于定义网络文件的类型和网页的编码,决定浏览器将以什么形式、什么编码读取这个文件。

常见的媒体格式类型如下:

以application开头的媒体格式类型:

常见请求头

常见响应头

总结

清楚的知道这些内容,不仅仅是为了应对面试官,而是能实实在在的提高自己的效率,这一点在前后端联调接口最明显,当你在应用中去请求其他接口或转发请求时这些也是要知道的。不然出现问题的概率会大大提高。

https://zhuanlan.zhihu.com/p/60450391

htonl()函数学习的更多相关文章

  1. Python3中的字符串函数学习总结

    这篇文章主要介绍了Python3中的字符串函数学习总结,本文讲解了格式化类方法.查找 & 替换类方法.拆分 & 组合类方法等内容,需要的朋友可以参考下. Sequence Types ...

  2. Drools 函数学习

    Drools 函数学习 函数是定义在规则文件当中一代码块,作用是将在规则文件当中若干个规则都会用到的业务操作封装起来,实现业务代码的复用,减少规则编写的工作量.函数的编写位置可以是规则文件当中 pac ...

  3. C语言(函数)学习之strstr strcasestr

    C语言(函数)学习之[strstr]&[strcasestr]一.strstr函数使用[1]函数原型char*strstr(constchar*haystack,constchar*needl ...

  4. 详解C语言的htons和htonl函数、大尾端、小尾端

    在Linux和Windows网络编程时需要用到htons和htonl函数,用来将主机字节顺序转换为网络字节顺序. 在Intel机器下,执行以下程序 int main(){   printf(" ...

  5. 反汇编windows htonl()函数

    因为自己在系统内核写网络程序有时候需要调用htons htonl 这样的函数进行转换,但由于内核只能调用c运行库,别的API不能调用.自己也接触过一点汇编,从来没有去学过.看过老码识途这本书前几章,如 ...

  6. Java中的回调函数学习

    Java中的回调函数学习 博客分类: J2SE JavaJ#  一般来说分为以下几步: 声明回调函数的统一接口interface A,包含方法callback(); 在调用类caller内将该接口设置 ...

  7. Theano.tensor.round函数学习,同时解决输出Elemwise{xxx,no_inplace}.0的问题

    1. 出现Elemwise{xxx,no_inplace}.0   这是因为没有定义theano.function所致,参考下面错误示范: y = np.random.normal(size=(2,2 ...

  8. C++学习基础十六-- 函数学习笔记

    C++ Primer 第七章-函数学习笔记 一步一个脚印.循序渐进的学习. 一.参数传递 每次调用函数时,都会重新创建函数所有的形参,此时所传递的实参将会初始化对应的形参. 「如果形参是非引用类型,则 ...

  9. pythone函数基础(8)内置函数学习

    内置函数学习# sorted# map# filter# max# sum# round# chr# ord# dir# bool# eval# exec# zipimport mathres = m ...

随机推荐

  1. 利用ASP.NET一般处理程序动态生成Web图像(转)

    摘自:http://www.cnblogs.com/zhouhb/archive/2011/02/15/1955262.html 一般处理程序的扩展名为ashx,它实现了IHttpHandler接口, ...

  2. Matlab调用返回游标的存储过程的分析和处理

    2.Matlab调用Oracl带游标参数输出的存储过程 笔者也是将工作之中遇到的问题进行了搜集与整理,才完成该文的编写,希望能帮助到有需要的朋友. 2.1.PLSQL中的存储过程 PROCEDURE ...

  3. HDUOJ--------(1312)Red and Black

    Red and Black Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) To ...

  4. 从零开始的 Python 爬虫速成指南

    序 本文主要内容:以最短的时间写一个最简单的爬虫,可以抓取论坛的帖子标题和帖子内容. 本文受众:没写过爬虫的萌新. 入门 0.准备工作 需要准备的东西: Python.scrapy.一个IDE或者随便 ...

  5. Response.Flush() Response.End()的区别

    //Response.Flush() 将缓存中的内容立即显示出来//Response.End()  缓冲的输出发送到客户端  停止页面执行//例://Response.Write("520& ...

  6. Concurrency Managed Workqueue(二)CMWQ概述

    一.前言 一种新的机制出现的原因往往是为了解决实际的问题,虽然linux kernel中已经提供了workqueue的机制,那么为何还要引入cmwq呢?也就是说:旧的workqueue机制存在什么样的 ...

  7. 【JUnit4.10源码分析】3.4 Description与測试树

    Description使用组合模式描写叙述一个測试树.组合模式中全部元素都是Composite对象. Description有成员变量private final ArrayList<Descri ...

  8. CListCtrl获取列数

    CListCtrl获取列数 // m_List是一个CListCtrl CHeaderCtrl* pHeaderCtrl = m_List.GetHeaderCtrl();if(pHeaderCtrl ...

  9. 详细介绍Java中的堆和栈

    栈与堆都是Java用来在RAM中寄存数据的中央.与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆. Java的堆是一个运转时数据区,类的对象从中分配空间.这些对象经过new.newar ...

  10. java基础常见问题和eclipse常用快捷键

    一.java常用库 java.lang中 StringBuffer,StringBuilder,System,Runtime,Math java.util Date,Calendar,Random j ...